我正在通过NUnit运行测试,并希望NLog消息能够快速告诉我每条日志消息的调用测试。像
这样的东西<target xsi:type="File"
layout="${longdate} ${someMagic} ${message}"
/>
如果不深入研究NLog代码,有没有一种简单的方法可以做到这一点?
答案 0 :(得分:1)
这是一个有效的解决方案:一组包含NLog ILogger.Error(..)
方法等的扩展方法,查找NUnit [Test]
或[TestCase]
属性的堆栈
public static void XError(this ILogger log, String message)
{
if (log.IsErrorEnabled == false)
return;
var prefix = GetCallerTestDescription();
log.Error("[{0}] {1}", prefix, message);
}
private static string GetCallerTestDescription()
{
var stack = new StackTrace(false).GetFrames();
if (stack != null)
{
foreach (var frame in stack)
{
var method = frame.GetMethod();
var testAttributes = method.GetCustomAttributes<TestAttribute>();
if (testAttributes != null && testAttributes.Any())
{
return method.Name;
}
var tcAttributes = method.GetCustomAttributes<TestCaseAttribute>();
if (tcAttributes != null && tcAttributes.Any())
{
return method.Name;
}
}
}