【问题标题】:Log file not getting created using NLog when filename is set dynamically动态设置文件名时未使用 NLog 创建日志文件
【发布时间】:2013-05-30 15:55:25
【问题描述】:

我正在使用以下 NLog 配置,但已删除 FileName 属性。我想动态设置它。我也为它编写了代码。但它根本不会在指定位置创建日志文件。

如果我哪里出错了,请告诉我。

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="console" xsi:type="Console" />

      <target name="logfile" xsi:type="File"
           layout="${longdate} ${level} ${message}" archiveAboveSize="1048576"                
           concurrentWrites="true"
           keepFileOpen="false"
           encoding="iso-8859-2" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile" />
  </rules>
</nlog>

动态设置文件名的C#代码

            LoggingConfiguration config = new LoggingConfiguration();
            FileTarget fileTarget = new FileTarget();
            config.AddTarget("logfile", fileTarget);
            fileTarget.FileName =  @"C:\Logfile\Log.txt"; 
            NLog.LogManager.Configuration = config;

            LoggingRule rule = new LoggingRule("*", LogLevel.Debug, fileTarget);
            config.LoggingRules.Add(rule); 

但日志文件 Log.txt 未在 C:\Logfile> 中创建。也没有抛出异常

非常感谢任何帮助。提前致谢。

【问题讨论】:

    标签: c# logging nlog


    【解决方案1】:

    我很确定您正在通过代码覆盖您的配置。为什么不在代码中配置所有内容?

    您确定您拥有写入C:\Logfile\Log.txt 的必要权限吗? 我刚刚试过你的代码,它对我有用。

    您还可以启用 NLog 的内部日志记录:https://github.com/nlog/NLog/wiki/Internal-logging

    【讨论】:

      【解决方案2】:

      如果您查看 NLog.LogManager.Configuration 的 setter 的源代码,您会发现它有副作用,可能是出于性能原因。我遇到了与您类似的问题,我尝试在程序中较早设置日志配置后对其进行更改,发现我的更改没有得到尊重。

      对我来说,解决方案是创建一个新的 LoggingConfiguration 对象并分配它。在您的情况下,只需移动作业即可解决问题:

      LoggingConfiguration config = new LoggingConfiguration();
      FileTarget fileTarget = new FileTarget();
      config.AddTarget("logfile", fileTarget);
      fileTarget.FileName =  @"C:\Logfile\Log.txt"; 
      
      LoggingRule rule = new LoggingRule("*", LogLevel.Debug, fileTarget);
      config.LoggingRules.Add(rule); 
      
      NLog.LogManager.Configuration = config;
      

      感谢我迟到了 3 年多才为您解决问题,但也许这对其他人有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多