我在C#.NET中有一个Windows服务项目,带有最新版本的.NET框架,我正在尝试将nLog 4.5.11实施到该项目中。 Windows服务具有计时器类,其事件每10秒触发一次。我正在尝试从这些处理程序写入nLog,但它未在日志文件中打印。
来自Windows onstart事件处理程序的信息语句已完全写入日志。
在internalLogFile.log中进行故障排除后,现在我找到了nLog Info的那些行,但是在由某些其他程序集(如RabbitMQ.log)创建的另一个日志文件中。我什至没有在nLog.config中提到它。我不确定nLog为什么要在多个文件中进行这种内容混合。
已将nlog程序集添加到Windows服务项目:-
nLog.config文件内容:-
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogFile="C:\Px\log.txt" internalLogLevel="Info">
<targets>
<target name="logconsole" xsi:type="Console" />
<target name="logfile"
xsi:type="File"
fileName="${basedir}/Px_LoaderService-${shortdate}.log" />
</targets>
<rules>
<logger name="docLogger" minlevel="Info" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="logconsole" />
</rules>
</nlog>
InternalLogfile也没有任何错误或有关丢失的写入的信息。
这里是Timer event handler:-
的示例代码 private static NLog.Logger log = LogManager.GetLogger("docLogger");
private void BulkInserts(object sender, ElapsedEventArgs e)
{
lock (_locker)
{
try
{
log.Info(string.Format("BulkInsert called."));
}
}
请指出我在哪里犯了错误,并且这种混合的日志正在发生。
我在Windows服务项目中发现了问题。从项目中的另一个程序集引用中生成了另一个nlog文件。这就是为什么将某些日志语句写入不同的日志文件的原因。由于log是静态对象,是在类级别创建的,而第二个日志对象是在具有不同类作用域的程序集中创建的。但是,日志对象的类型为static,这就是导致此问题的原因。我会说它来自两个不同类别的静态物体污染。
现在我已经确定了问题,已经解决了