ima*_*mak 10 c# trace system.diagnostics
我试图理解Trace.Writevs 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
Run Code Online (Sandbox Code Playgroud)
我所需要的就像是
2011-01-31 11:32 Information: Hello - Trace!
2011-01-31 11:33 Error: Hello - Trace!
Run Code Online (Sandbox Code Playgroud)
App.config这样做有什么简单的方法吗?
Jam*_*mby 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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在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>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
查看codeplex 上的Ukadc.Diagnostics项目。它提供了一个很好的基于 System.Diagnostics 的插件包,它提供了比内置 System.Diagnostics TraceListeners 更强大的输出格式化功能(类似于 log4net 和 NLog)。您甚至可以编写自己的格式化/标记对象并将它们包含在输出格式化过程中。
该库易于使用并且运行良好。