2

是否可以在 TraceListener 的“initializeData”中添加时间戳?

像这样的东西:

<sharedListeners>
      <add name="AppSourceListener"
        type="System.Diagnostics.DelimitedListTraceListener" 
        initializeData="c:\test%date.csv" 
        traceOutputOptions="ProcessId, DateTime, Callstack">
      </add>      
</sharedListeners>

一旦启动应用程序,我想将 DateTime.Now 放在每个日志中。

4

2 回答 2

1

这是可能的。无论您作为“ initializeData ”放置什么,都会进入自定义跟踪侦听器的构造函数。所以如果你有这样的东西

namespace MyLogger
{
    public class DebugListener :TraceListener
    {
        string LogFileName;
        public DebugListener (string filename)
        {
            filename = filename.Replace("@date",DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString());
            LogFileName = filename;
        }
    }
}

和配置

<system.diagnostics>
  <trace autoflush="true" indentsize="4">
    <listeners>
      <add name="dbgListener" type="MyLogger.DebugListener,MyLogger" initializeData="MyLog@date.txt"/>
    </listeners>
  </trace>
</system.diagnostics>

然后你会得到文件名MyLog20173.txt 虽然记住构造函数只会被调用一次,你必须重新启动应用程序来创建一个新的日志,但你总是可以在你的代码中处理这个逻辑,就像这个创建一个新的每个月的日志文件

//get new log file name every month
string newFileName = string.Format("{0}_{1}{2}.txt","name",DateTime.UtcNow.Year.ToString(CultureInfo.InvariantCulture),DateTime.UtcNow.ToString("MM", CultureInfo.InvariantCulture))`;
于 2017-03-12T19:59:45.200 回答
1

这在 .config 文件中是不可能的。为此,请从代码中创建 TraceListener:

//Remove all existing trace listeners
while (Trace.Listeners.Count > 0)
    Trace.Listeners.RemoveAt(0);
//Add the new one with new file name
Trace.Listeners.Add(new DelimitedListTraceListener(@"mylogwithdatetime.log"));
于 2016-01-04T17:15:42.020 回答