【发布时间】:2009-09-08 15:29:55
【问题描述】:
我只是想知道为什么 log4Net 中没有trace level。这个级别似乎缺失了,我有时觉得需要使用它,例如输出应用程序中正在执行的事件。此功能是part of log4J。
我知道我可以创建一个自定义关卡,就像 here 所讨论的那样,但我不想将时间和精力投入到我认为应该是库本身的一部分的事情上。
您是否知道实现此功能的 log4net 扩展库或为什么它不是 .net 端口的一部分?
【问题讨论】:
我只是想知道为什么 log4Net 中没有trace level。这个级别似乎缺失了,我有时觉得需要使用它,例如输出应用程序中正在执行的事件。此功能是part of log4J。
我知道我可以创建一个自定义关卡,就像 here 所讨论的那样,但我不想将时间和精力投入到我认为应该是库本身的一部分的事情上。
您是否知道实现此功能的 log4net 扩展库或为什么它不是 .net 端口的一部分?
【问题讨论】:
您可以使用扩展方法将详细(或跟踪级别)添加到 log4net。这是我正在使用的:
public static class ILogExtentions
{
public static void Trace(this ILog log, string message, Exception exception)
{
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,
log4net.Core.Level.Trace, message, exception);
}
public static void Trace(this ILog log, string message)
{
log.Trace(message, null);
}
public static void Verbose(this ILog log, string message, Exception exception)
{
log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType,
log4net.Core.Level.Verbose, message, exception);
}
public static void Verbose(this ILog log, string message)
{
log.Verbose(message, null);
}
}
使用示例:
public class ClientDAO
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ClientDAO));
public void GetClientByCode()
{
log.Trace("your verbose message here");
//....
}
}
来源:
http://www.matthewlowrance.com/post/2010/07/14/Logging-to-Trace-Verbose-etc-with-log4net.aspx
【讨论】:
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType?那是写typeof(ILogExtentions)的低效方式
ILog Log = LogManager.GetLogger(typeof(MyLoggingClass));中的MyLoggingClass
在 log4net.Core.Level 类http://logging.apache.org/log4net/release/sdk/html/F_log4net_Core_Level_Trace.htm中有一个跟踪级别
【讨论】:
log4net.ILog 接口仅公开 Fatal、Error、Warn、Info 和 Debug 级别的方法和属性。
我同意这有点限制,并希望在那里再看到一个级别。但是,最佳的关卡数量可能是“比当前的关卡数量多一个”——你总是会发现自己偶尔想要多一个关卡。
【讨论】: