如何使用 NLog 的完全限定类名作为记录器名称?
我有一个通用类:
public class GenericClass<A>
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void Blah(A a)
{
Logger.Info("Test log");
}
}
与简单的 NLog 配置一起使用:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="console" xsi:type="ColoredConsole" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="console" />
</rules>
</nlog>
我希望我的日志输出看起来像:
...|INFO|NLogTests.GenericClass<System.String>|Test log
相反,我看到的是:
...|INFO|NLogTests.GenericClass`1|Test log
如何让记录器使用完全限定的类型名称而不是基本名称显示通用参数的数量?
I have a generic class:
public class GenericClass<A>
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void Blah(A a)
{
Logger.Info("Test log");
}
}
Used with a simple NLog configuration:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="console" xsi:type="ColoredConsole" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="console" />
</rules>
</nlog>
I would like my log output to look something like:
...|INFO|NLogTests.GenericClass<System.String>|Test log
Instead, what I see is:
...|INFO|NLogTests.GenericClass`1|Test log
How can I get logger to use the fully qualified type name instead of the basic name which only displays number of generic parameters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用以下方法代替 GetCurrentClassLogger:
将
GenericToString
放置在您保存随机实用函数/扩展方法的位置。免责声明:该功能现已被黑客攻击,可能无法正常工作,导致您的计算机着火或导致秃顶。
Instead of GetCurrentClassLogger, you could use:
Place
GenericToString
wherever you keep random utility functions / extension methods.Disclaimer: the function was hacked up right now and might not work, make your computer catch fire, or induce baldness.
如果您使用的是 C# 6 & .NET> 4.5,那么你可以做一个巧妙的技巧来使用
CSharpCodeProvider
:然后你可以像这样使用这个扩展:
输出将是:
If you're using C# 6 & .NET > 4.5, then you can do a neat trick to use
CSharpCodeProvider
:Then you can use this extension like this:
And output will be: