Nlog不会写入Windows服务中的日志文件

har*_*ang 4 c# windows-services nlog

我有一个用.net 4.0编写的Windows服务,我把它安装在Local System的凭证下.在我使用nlog的代码中,

private static Logger logger = LogManager.GetCurrentClassLogger();
logger.Debug("some information");
Run Code Online (Sandbox Code Playgroud)

我也将nlog.config复制到exe文件所在的同一目录

<?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="logfile" type="File"
            fileName="c:\log\TestService\My.log"
            layout="${longdate}::${logger}::${message}"
            keepFileOpen="false" />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" maxLevel="Deubg" writeTo="logfile" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

但是,如果我启动该服务,我根本看不到日志文件.如果我交换log.Debug代码Debug.WriteLine并使用我的Visual Studio附加到Windows服务进程进行调试,我可以看到输出窗口有我的调试消息,这意味着我的Windows服务代码是正确的.

我的nlog代码有问题吗?

- 更新1 -

我将nlog.config更新为

<?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="logfile" type="File"
            fileName="c:\log\TestService\My.log"
            layout="${longdate}::${logger}::${message}"
            keepFileOpen="false" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile" />
  </rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)

并将我的代码更改为

logger.Trace("some information");
Run Code Online (Sandbox Code Playgroud)

然后它工作.我不确定我的第一组配置有什么问题.

小智 10

UPDATE

<logger name="*" minlevel="Info" maxLevel="Deubg" writeTo="logfile" />
                                           ^^^^^
Run Code Online (Sandbox Code Playgroud)

首先:Debug拼错了.

但主要问题是Debug级别在信息级别下.

以下是允许的日志级别(按降序排列):

  • 致命
  • 错误
  • 警告
  • 信息
  • 调试
  • trace(最详细的信息.)

链接到nlog文档

  • "首先:调试拼写错误." - 如果在指出调试中的字符转换时首先转换字符是故意的,精彩的和聪明的. (3认同)