无NLog.config时,NLog默认日志布局配置位置及修改方法咨询
NLog日志格式配置问题解答
疑问1:NLog的配置是否确实存在于成员的备注中?
不存在。你看到的NLog.xml是NLog类库的XML文档注释文件,里面的内容仅用于生成API文档,只是记录了NLog内部各个Target的默认布局值,完全不是实际生效的配置文件。那些<remarks>里的布局代码,只是给开发者看的“默认格式说明”,修改它不会对你的应用日志格式产生任何影响。
疑问2:若是,如何确定对应的成员?
既然第一个问题的答案是否定的,这里直接说明:你看到的这些成员(比如M:NLog.Targets.TargetWithLayout.#ctor、P:NLog.Targets.TargetWithLayout.Layout等)是NLog源码内部的构造函数、属性定义,属于类库本身的实现细节,和你的应用日志配置没有关系,不需要去关注它们。
疑问3:若否,该配置的实际位置在哪里?
你当前没有NLog.config文件,说明应用正在使用NLog的默认配置。要修改日志格式,有两种可行方案:
方案1:添加NLog.config配置文件(推荐)
在你的C#项目中新建一个名为NLog.config的XML文件,将其属性设置为「复制到输出目录:如果较新则复制」,然后在文件中自定义Target和布局,示例如下:
<?xml version="1.0" encoding="utf-8" ?> <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="Console" layout="${longdate} [${level:uppercase=true}] ${logger} -> ${message}" /> </targets> <rules> <!-- 匹配所有日志记录器,将Trace及以上级别日志输出到console目标 --> <logger name="*" minlevel="Trace" writeTo="console" /> </rules> </nlog>
方案2:代码中动态配置
如果不想用配置文件,可以在应用启动阶段(比如Program.cs的入口处)通过代码直接配置NLog,示例如下:
using NLog; using NLog.Config; using NLog.Targets; // 构建配置 var config = new LoggingConfiguration(); // 创建控制台目标并设置自定义布局 var consoleTarget = new ConsoleTarget("console") { Layout = "${longdate} [${level:uppercase=true}] ${logger} -> ${message}" }; config.AddTarget(consoleTarget); // 添加日志规则 config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, consoleTarget)); // 应用配置 LogManager.Configuration = config; // 测试日志 var logger = LogManager.GetCurrentClassLogger(); logger.Info("测试自定义格式的日志");
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

