为每个应用程序运行创建一个新的跟踪日志文件

时间:2014-01-15 07:55:37

标签: c# .net logging trace

我正在使用TraceListener将执行细节写入日志文件。以下是我的app.config文件中的配置:

<system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Runner.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>

但是我可以看到每次执行都会将日志附加到文件Runner.log。相反,我想为每次执行创建不同的日志文件。我需要在app.config文件中添加任何设置吗?或者这可以通过编程方式完成吗?感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我已在下面的课程中实施,它对我来说很好。此外,现在我不需要在app.config文件中指定任何内容

  class TextLogTraceListener : TextWriterTraceListener
    {
        private string logFileLocation = string.Empty;

        private StreamWriter traceWriter;

        public TextLogTraceListener(string filePath)
        {
            logFileLocation = filePath;
            traceWriter = new StreamWriter(filePath, true);
            traceWriter.AutoFlush = true;
        }

        public override void Write(string message)
        {
            traceWriter.Write(message);
        }

        public override void WriteLine(string message)
        {
            traceWriter.WriteLine(message);
        }

        public override void Close()
        {
            traceWriter.Close();
        }
    }

使用如下所示的课程:

public static class Logger
    {
        static TextLogTraceListener textLogTraceListener = new TextLogTraceListener("Trace.log");

        public static void CloseWriter()
        {
            textLogTraceListener.Close();
        }

        public static void Error(string message, string module)
        {
            WriteEntry(message, "ERROR", module);
        }

        public static void Error(Exception ex, string module)
        {
            WriteEntry(ex.Message + Environment.NewLine + ex.StackTrace, "ERROR", module);
        }

        public static void Warning(string message, string module)
        {
            WriteEntry(message, "WARNING", module);
        }

        public static void Info(string message, string module)
        {
            WriteEntry(message, "INFO", module);
        }

        private static void WriteEntry(string message, string type, string module)
        {
            textLogTraceListener.WriteLine(string.Format("[{0}] [{1}] [{2}] {3}",
                                  DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                  type,
                                  module,
                                  message));
        }
    }

答案 1 :(得分:1)

最好的方法是编写自己的TextWriterTraceListener类实现,并在app.config中注册。

以下是一个示例实现:

http://www.geekzilla.co.uk/View2C5161FE-783B-4AB7-90EF-C249CB291746.htm