在动态设置文件名时,不使用NLog创建日志文件

时间:2013-05-30 15:55:25

标签: c# logging nlog

我正在使用以下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); 

但是没有在C:\ Logfile&gt;创建日志文件Log.txt。没有异常抛出

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

2 个答案:

答案 0 :(得分:2)

我很确定你是用代码覆盖你的配置。为什么不在代码中配置所有内容?

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

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

答案 1 :(得分:0)

如果您查看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年了,但也许这会帮助其他人。