12

我试图了解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  

我所需要的只是

2011-01-31 11:32 Information: Hello - Trace!  
2011-01-31 11:33 Error: Hello - Trace!

有没有简单的方法来设置App.config它?

4

2 回答 2

13

我找到了一种更好的方法,不需要任何其他外部依赖(我认为包含的 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>

希望这可以帮助!

于 2013-08-19T16:16:58.553 回答
1

查看 codeplex 的Ukadc.Diagnostics项目。它提供了一个很好的基于 System.Diagnostics 的插件包,它提供了比内置 System.Diagnostics TraceListeners 更强大的输出格式化功能(类似于 log4net 和 NLog)。您甚至可以编写自己的格式化/标记对象,并将它们包含在输出格式化过程中。

该库易于使用且运行良好。

于 2011-02-01T21:47:34.140 回答