gpt4 book ai didi

nlog - 如何使用完全限定的类名作为 NLog 的记录器名称?

转载 作者:行者123 更新时间:2023-12-01 13:00:09 29 4
gpt4 key购买 nike

我有一个泛型类:

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

如何让记录器使用完全限定的类型名称而不是仅显示通用参数数量的基本名称?

最佳答案

代替 GetCurrentClassLogger,您可以使用:

Logger log = LogManager.GetLogger(GenericToString(typeof(GenericClass<A>)));

string GenericToString(Type type) {
var typeName = type.Namespace + "." + type.Name;
var args = type.GetGenericArguments();
if (args.Count() == 0) return typeName;

typeName = typeName.Remove(typeName.LastIndexOf("`"));
return typeName
+ "<"
+ string.Join(", ", args.Select(a=>GenericToString(a)))
+ ">";
}

GenericToString 放在您保留随机实用函数/扩展方法的任何地方。

免责声明:该功能目前已被破解,可能无法正常使用,导致您的计算机着火或导致秃顶。

关于nlog - 如何使用完全限定的类名作为 NLog 的记录器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735129/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com