如果一个应用程序将其所有活动数据写入一个日志文件,是否有使用多个TraceSource的用处?我只是对代码中需要多个TraceSource的用例感到好奇。什么时候需要在代码中使用多个TraceSource?
回答
看到这些答案的一个很好的起点等问题,使用TraceSources上:
can't understand .net 2010 tracing and app.config
How to use TraceSource across classes
我要说的是,任何时候你有一个以上的类,你可能(可能)考虑有多个TraceSource。
一个优点于具有多个TraceSource是,它增加了在这你可以控制你的日志的粒度。例如,如果您在每个课程中使用不同的TraceSource,则可以将日志记录控制到课程级别。你可以打开一个(或多个)特定的类并关闭所有其他类。
这是NLog和log4net用户的常见模式。使用这些登录平台类典型的初始化将是这个样子:
public class A
{
//NLog example
private static Logger logger = LogManager.GetCurrentClassLogger();
public F()
{
logger.Info("Inside F");
}
}
在这个例子中,A类记录器被命名为类的完全限定域名(NLOG确实在GetCurrentClassLogger的辛勤工作() )。
做TraceSource类似的东西,你会做这样的事情:
public class A
{
private static TraceSource ts = new TraceSource(System.Reflection.GetCurrentMethod().DeclaringType.ToString();
public F()
{
ts.Information("Inside F");
}
}
如果你在每一个类这样做,你可以很容易地控制你的类记录。
我不敢肯定这种模式为常见的有TraceSource因为它与log4net的和NLOG。我认为您可能会经常看到TraceSource的用户按功能区域获取他们的TraceSources。
所以,你可能将您的应用程序成“读”,“过程”和“写”功能(或任何有意义的你)。在这种情况下,你可以得到基于功能区的类别相应的TraceSource它们被用于:
public class FileReader
{
private static TraceSource ts = new TraceSource("Read");
public F()
{
ts.Information("Hello from FileReader.F");
}
}
public class NetworkReader
{
private static TraceSource ts = new TraceSource("Read");
public F()
{
ts.Information("Hello from NetworkReader.F");
}
}
等。
现在,你可以把日志记录为“读取”,并关闭所有其他职能部门(或打开详细日志记录为“读取”,对于所有其他不太详细的日志记录)。
此外,一个与TraceListeners选项是输出TraceSource名称。因此,在输出中,您可以更轻松地理解日志记录,因为如果您愿意,可以相对轻松地找到从特定功能区域(或特定TraceSource)生成的所有日志记录消息。
如果你有一个很好的命名空间命名约定,你甚至可以考虑基于命名空间层次结构中的某个节点或甚至基于该类所在的程序集来获取每个类的TraceSource。类型将为您检索该信息。
既然你正在寻找TraceSources,我会鼓励你看看这个项目在CodePlex上:
http://ukadcdiagnostics.codeplex.com/
这是一个很好的项目(基于TraceSource),它允许您格式化的日志输出与使用log4net和NLog所做的相似。
我也鼓励你看看围绕着Castle的TraceSource构建的这个日志记录封装器。
https://github.com/castleproject/Castle.Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs
有趣的事情,他们所做的是提供一个层次结构TraceSource的名称。过去我已经实现了类似的东西。它工作得很好。
我对这个问题的答案提供了TraceSource层次如何是有益的想法:
What's the best approach to logging?
祝你好运!
- 1. 什么时候使用GWT,什么时候不需要
- 2. Application.DoEvents,什么时候需要,什么时候不需要?
- 3. 我什么时候需要使用@WebServiceRef?
- 4. 什么时候需要使用ng-template?
- 5. 我什么时候需要使用MPI_Barrier()?
- 6. 我什么时候需要使用“android:id”?
- 7. 你什么时候需要在Ruby中需要一个模块?
- 8. 什么时候需要CAMLparamX?
- 9. 什么时候需要pygame.init()?
- 10. 什么时候需要NSCopying?
- 11. 什么时候需要NS_RETURNS_RETAINED?
- 12. 什么时候需要“javascript:...”?
- 13. 什么时候需要TransactionScopeOption.Supress?
- 14. 什么时候需要dynamic_cast?
- 15. 什么时候需要curl_global_init()?
- 16. 什么时候在C++中需要'int'?
- 17. 什么时候使用Cache要多少?
- 18. 什么时候需要(“哪个”)出生?
- 19. 我什么时候需要使用的各个jQuery中
- 20. Android上的OpenCV,我什么时候需要本地代码?
- 21. 我什么时候需要分配财产,什么时候不需要?
- 22. 什么时候需要在java中初始化一个对象,什么时候不需要?
- 23. 我什么时候需要调用XInitThreads?
- 24. 什么时候需要引用document.getElementByID?
- 25. 什么时候js中的“var”需要?
- 26. 我什么时候需要在Jasmine的beforeEach块中使用?
- 27. 我什么时候需要在Backbone.js中使用_.bindAll()?
- 28. 什么时候需要在angular2中使用jQuery?
- 29. 什么时候需要在python中使用全局关键字
- 30. 我们什么时候需要在codeIgniter中使用base_url()函数?