我正在使用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
文件中添加任何设置吗?或者这可以通过编程方式完成吗?感谢您的帮助。
答案 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