我想了解Trace.Write
与Trace.TraceInformation
之间的区别以及应该使用哪一个。
我尝试为时间戳/日期时间配置traceOutputOptions
。我只需要为我正在编写的每条消息添加时间戳。我得到的日期时间有点混乱,因为它在下一行中添加了应用程序名称和用户友好的时间戳,如下所示。
ConsoleApplication1.exe Information: 0 : Hello - Trace!
DateTime=2011-01-31T14:26:11.1538509Z
ConsoleApplication1.exe Error: 0 : Hello - Trace!
DateTime=2011-01-31T14:26:11.1538509Z
我需要的只是
2011-01-31 11:32 Information: Hello - Trace!
2011-01-31 11:33 Error: Hello - Trace!
有没有简单的方法在App.config
进行设置?
答案 0 :(得分:10)
我找到了一个更好的方法,不需要任何其他外部依赖(我认为包含的System.Diagnostics功能已经很丰富)
我以这种方式继承了我需要的两个监听器(ConsoleTraceListener和TextWriterTraceListener):
namespace MyApp
{
namespace Diagnostics
{
public class DateTimeConsoleTraceListener : ConsoleTraceListener
{
public override void Write(string message)
{
base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message);
}
}
public class DateTimeTextWriterTraceListener : TextWriterTraceListener
{
public DateTimeTextWriterTraceListener(string fileName) : base(fileName) { }
public override void Write(string message)
{
base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message);
}
}
}
}
然后,在App.config中:
<sharedListeners>
<add name="ConsoleListener"
type="MyApp.Diagnostics.DateTimeConsoleTraceListener, MyApp">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="All"/>
</add>
<add name="FileListener"
type="MyApp.Diagnostics.DateTimeTextWriterTraceListener, MyApp"
initializeData="MyApp.log" >
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="All"/>
</add>
</sharedListeners>
希望这有帮助!
答案 1 :(得分:1)
查看codeplex上的Ukadc.Diagnostics项目。它提供了一个很好的基于System.Diagnostics的插件包,它提供了比使用内置的System.Diagnostics TraceListeners可以实现的更强大的输出格式化功能(类似于log4net和NLog)。您甚至可以编写自己的格式/令牌对象,并将它们包含在输出格式化过程中。
该库易于使用且运行良好。