Cha*_*les 5 c# performance logging
我正在研究C#日志记录,如果消息低于日志记录阈值,我不希望我的日志消息花费任何时间进行处理.我可以看到log4net最好的是在评估日志参数后进行阈值检查.
例:
_logger.Debug( "My complicated log message " + thisFunctionTakesALongTime() + " will take a long time" )
Run Code Online (Sandbox Code Playgroud)
即使阈值高于Debug,仍将评估thisFunctionTakesALongTime.
在log4net中,您应该使用_logger.isDebugEnabled,以便最终得到
if( _logger.isDebugEnabled )
_logger.Debug( "Much faster" )
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的.net日志记录解决方案,每次我想记录时都不需要检查.
在C++中,我被允许这样做
LOG_DEBUG( "My complicated log message " + thisFunctionTakesALongTime() + " will take no time" )
Run Code Online (Sandbox Code Playgroud)
因为我的LOG_DEBUG宏执行日志级别检查.这让我在整个应用程序中都有一行日志消息,我更喜欢这个消息.有人知道在C#中复制这种行为的方法吗?
如果您可以使用.NET 3.5(C#3.0),则可以使用扩展方法来包装if语句.
所以你可以做相同的"宏":
logger.Log_Debug("Much faster");
logger.Log_Debug(() => { "My complicated log message " + thisFunctionTakesALongTime() + " will take no time" });
Run Code Online (Sandbox Code Playgroud)
通过将检查包装在此方法中:
public class Log4NetExtensionMethods {
// simple string wrapper
public void Log_Debug(this log4net.ILog logger, string logMessage) {
if(logger.isDebugEnabled) {
logger.Debug(logMessage);
}
}
// this takes a delegate so you can delay execution
// of a function call until you've determined it's necessary
public void Log_Debug(this log4net.ILog logger, Func<string> logMessageDelegate) {
if(logger.isDebugEnabled) {
logger.Debug(logMessageDelegate());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3849 次 |
| 最近记录: |