在用NLog做日志记录时,会访问Nlog.config以获得配置,但该文件是预先被设置好的。如下方法可以在运行时用编程的方式修改Nlog配置。代码示例:
LoggingConfiguration
lc =
LogManager
.Configuration; // 关键,获得Configuration对象
// 接下来,设置Configuration对象里的各个子对象
DatabaseTarget
t = (
DatabaseTarget
)lc.FindTargetByName(dbTargetName);
t.CommandText =
string
.Format(
"insert into
{0}
.dbo.Logging([LogTime], [Machine],[Logger],[LogLevel],[Message],[ProcessName],[AppVersion]) values (@LogTime, @Machine,@Logger,@LogLevel,@Message,@ProcessName, @AppVersion);"
,
DatabaseName);
LogManager
.ReconfigExistingLoggers();// 保存Configuration对象
注意点:
1 记录Log的类库有两个,一个是Common.Logging,一个是NLog,前者不提供动态配置的功能,只有后者有。本文所用的命名空间是NLog。
2 ReconfigExistingLoggers方法会检查所有已存在的Logger对象,使其能按照新配置工作。但是我在使用中发现当Logger对象、ReconfigExistingLoggers方法、日志的记录动作在同一个类里时才能正常工作,否则配置的效果难以起作用。初步研究的结论是Reconfigure成功至少要满足两个条件:
1)能够访问到Logger对象。所以建议把ReconfigExistingLoggers方法和Logger对象放到同一个类,这样即使Logger有private修饰也可以方法。
2)获取Configuration、修改Configuration、Reconfigure必须在同一个类里。所以建议把上述这段代码放到同一个函数里。