【问题标题】:Nlog log file is not created未创建 Nlog 日志文件
【发布时间】:2019-09-23 19:27:03
【问题描述】:

我正在尝试在控制台应用程序中记录异常。我一如既往地做了所有事情(然后它对我有用......):

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"
 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
 autoReload="true"
 throwExceptions="false"
 internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <targets>
    <target name="LogFile" xsi:type="File"
               fileName="${basedir}/Log/${date:format=yyyyMMdd} myLog.txt"
               layout="${longdate}|${level:uppercase=true}|${message}|${exception}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="LogFile" />
  </rules>
</nlog>
class Program
{
    private static Logger _log = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
      _log.Error("test");
    }
}

由于某种神秘的原因,我的计算机上永远不会创建文件。任何想法为什么

【问题讨论】:

    标签: c# nlog


    【解决方案1】:

    在 Visual Studio 中,检查您的 NLog.config 文件是否具有以下属性: 构建动作:内容。 复制到输出目录 = 如果更新则复制

    我附上了一个屏幕截图,您可以在其中看到它的外观。抱歉,是西​​班牙语。

    【讨论】:

      【解决方案2】:

      您的配置看起来有效,所以这不应该是问题。

      需要检查的一些事项:

      1. 您的 nlog.config 是否在正确的目录中?最好的测试方法是将 nlog.config 复制到包含 .dll 或 .exe 的目录中。

      2. 启用异常以确保 Nlog 不会捕获错误:throwExceptions="true"

      3. 通过设置internalLogLevel="Info"检查内部日志并检查“c:\temp\nlog-internal.log”

      可以在NLog documentation 上找到完整的故障排除教程。

      【讨论】:

        【解决方案3】:

        编辑您的NLog 配置,像这样更改您的日志文件路径,使用${shortdate} 而不是{date:format=yyyyMMdd}。在规则中设置名称并像本示例中那样调用它。

         <?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 async="true">
            <targets>
              <target name="LogFile" xsi:type="File"
                      fileName="${basedir}/Log/${shortdate}myLog.txt"
                      layout="${longdate}|${level:uppercase=true}|${message}|${exception}" />
            </targets>
        
            <rules>
              <logger name="ErrorLog" minlevel="Trace" writeTo="LogFile" />
            </rules>
        </nlog>
        

        还有你的 .cs

            class Program
        {
        
            private Logger ErrorLogger = NLog.LogManager.GetLogger("ErrorLog");
        
            static void Main(string[] args)
            {
                ErrorLogger.Error("test");
            }
        }
        

        【讨论】:

        • 因此,您建议从基于类的日志记录切换到命名记录器日志记录 - 这不应该是这里的问题,恕我直言......此外,您的命名不匹配:ErrorFile vs ErrorLog.
        • 这只是一个运行良好的示例,我建议更改 fileName path ,部分日期格式并将级别更改为 TRACE 以记录所有内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多