如何清除NLog?

时间:2017-01-18 20:07:55

标签: logging nlog

我使用NLog不仅记录错误,而且还制作了第二个日志,基本上是业务部门的用户友好文本报告。它会让他们知道说员工没有分配经理,所以他们知道他们需要解决问题。

我这样做是为了我们公司内部的几个业务部门。我有一个每晚运行的控制台应用程序,它将为每个业务部门选择导入文件并进行处理。

我遇到的问题是,即使我为每个业务部门创建了一个新的日志文件,每个业务部门的日志记录信息也会连接到之前的信息。因此,第一个文件只有他们的日志,但第二个文件只有第一个和第二个,第三个文件有第一个,第二个和第三个信息。

任何人都知道我可以清除内存中的日志记录以重新开始每个业务部门的方式吗?我没有看到任何类型的.clear方法。

这就是我最初在课堂上创建日志的方式。

private static Logger logger = LogManager.GetLogger("defaultLogger");
private static Logger reportLogger = LogManager.GetLogger("reportLogger");

我在找reportLogger.Clear()之类的东西。我甚至尝试创建一个像reportLogger = new Logger();这样的新版本,但这给了我一个错误,即Logger无法访问。

<?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"
      autoReload="true" 
      throwExceptions="true">

  <variable name="LogDirBase" value="D:\integration\logs\EmployeeFileImport"/>
  <variable name="LogYear" value="${date:format=yyy}"/>
  <variable name="LogMonth" value="${date:format=MM}"/>
  <variable name="LogDay" value="${date:format=dd}"/>
  <variable name="LogFileShortDate" value="${date:format=yyyy-MM-dd}"/>

  <targets async="true">

    <target name="DefaultTarget"
      xsi:type="File"
      fileName="${LogDirBase}\${shortdate}.log"
      encoding="utf-8"
      layout="${longdate} | ${callsite} | ${message}"
      archiveEvery="Day"
      archiveNumbering="Rolling"
      maxArchiveFiles="7"
      concurrentWrites="true"
    />

    <target name="ReportTarget"
      xsi:type="File"
      fileName="${LogDirBase}\${shortdate}_Report.txt"
      encoding="utf-8"
      layout="${message}"
      archiveEvery="Day"
      archiveNumbering="Rolling"
      maxArchiveFiles="7"
      concurrentWrites="true"
    />

    <target name="ConsoleTarget"
      xsi:type="Console"
      layout="${longdate} ${logger:shortName=True} ${message}${onexception:EXCEPTION OCCURRED\:${exception:format=type,message,StackTrace,method:maxInnerExceptionLevel=8:innerFormat=type,message,StackTrace,method}}"
    />

  </targets>

  <rules>
    <logger name="defaultLogger" minlevel="Debug" writeTo="DefaultTarget, ConsoleTarget" />
    <logger name="reportLogger" minlevel="Debug" writeTo="ReportTarget" />
  </rules>
</nlog>

更新

我昨晚必须推送其他一些代码更改,现在它似乎正在按预期工作。我没有对日志记录进行任何代码更改,所以我不确定它有什么变化。我将不得不关注接下来几天的报告,看看会发生什么。

以下是我设置日志/报告文件的方法。

static void SetLogFileNames(FileInfo file)
        {
            try
            {
                string logDirectory = ConfigurationManager.AppSettings["LogDirectory"];
                string fileNameOnly = file.Name.ToString().Substring(0, file.Name.Length - 4);


                //*** change the log file name and create one for each file processed. ***
                //*** Need both a Logging file and a Report file to be sent to the business owners. ***
                FileTarget defaultTarget = FindTargetByName("DefaultTarget");
                defaultTarget.FileName = logDirectory + string.Format("{0:yyyy-MM-dd}", DateTime.Now) + "_" + fileNameOnly + ".log";

                FileTarget reportTarget = FindTargetByName("ReportTarget");
                CurrentReportName = string.Format("{0:yyyy-MM-dd}", DateTime.Now) + "_" + fileNameOnly + "_Report" + ".txt";
                CurrentReportPathName = logDirectory + CurrentReportName;
                reportTarget.FileName = CurrentReportPathName;

                LogManager.ReconfigExistingLoggers();

            }
            catch (Exception ex)
            {
                CreateLog(string.Format("Error: setting Log File names. {0} | {1} | {2}", ex.Message, ex.StackTrace, ex.InnerException), false);
            }  
        }

0 个答案:

没有答案