windows 服务中多个日志文件中的 nLog 信息语句混合
nLog mixing of info statements in multiple log files in the windows service
我在 C#.NET 中有一个 windows-service 项目,带有最新版本的 .NET 框架,我正在尝试在该项目中实施 nLog 4.5.11。 Windows 服务有一个计时器 class,它的事件每 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 事件处理程序的示例代码 :-
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 文件是从项目中的不同程序集引用生成的。这就是为什么一些日志语句被写入不同的日志文件的原因。由于日志是静态对象并在 class 级别创建,并且第二个日志对象是在具有不同 class 范围的程序集中创建的。但是日志对象是静态类型的,这就是导致问题的原因。我会说它的静态对象污染来自两个不同的 classes。
现在我已经确定了问题并已解决
我在 C#.NET 中有一个 windows-service 项目,带有最新版本的 .NET 框架,我正在尝试在该项目中实施 nLog 4.5.11。 Windows 服务有一个计时器 class,它的事件每 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 事件处理程序的示例代码 :-
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 文件是从项目中的不同程序集引用生成的。这就是为什么一些日志语句被写入不同的日志文件的原因。由于日志是静态对象并在 class 级别创建,并且第二个日志对象是在具有不同 class 范围的程序集中创建的。但是日志对象是静态类型的,这就是导致问题的原因。我会说它的静态对象污染来自两个不同的 classes。
现在我已经确定了问题并已解决