2012-02-16 159 views

回答

0

只是try ... catchexception并给予例外到测井方法:

try 
{ 
    // ... code that throws exception 
} 
catch (Exeption ex) 
{ 
    myLogger.Error(ex); 
} 

此重载隐式调用,打印调用堆栈到您的日志异常的ToString()方法。

7

有两种基本形式,即需要一个对象,一个异常明确:

catch(Exception ex) 
{ 
    // the form that takes two args has an exception as second, prints trace... 
    _log.Error("My custom message", ex); 
} 

,而另一种的任何对象,并对其进行ToString()

catch(Exception ex) 
{ 
    // the form that takes one arg uses ToString() 
    _log.Error(ex); 
} 

前者允许您首先在日志条目上添加更有意义的消息,以提供您需要的任何其他详细信息。后者将做的工作,但只有使用ToString()将异常细节,它给你:

的ToString的默认实现获取类 抛出当前异常的消息,称结果的名称 ToString的内部异常,以及调用 Environment.StackTrace的结果。如果这些成员中的任何一个是Nothing,则其值 不包含在返回的字符串中。

13

您需要确保布局模式的定义能够输出您想要的格式和数据。

log4Net Pattern Layout

用于输出记录事件堆栈跟踪电平符可以括号之间被包围的堆栈跟踪。例如,%stacktrace {level}。如果没有堆栈跟踪级指定符给出然后1假定

输出使用格式:type3.MethodCall3> type2.MethodCall2> type1.MethodCall1

这种模式不适用于精简框架组件。

20

使用此:

void Error(object message,Exception t) 

原因是log4net的文档中的void Error(object message)

警告注意,传递一个例外,此方法将打印异常的名字,但没有堆栈跟踪。要打印堆栈跟踪,请改为使用void Error(object,Exception)表单。

Error(object message, Exception t)是登录异常数据的最灵活的方式,因为它去作为例外,而不是对象以及可以在追加程序用于缩小日志到特定异常类(而不是通过搜索一个字符串,它是非常缓慢,而且不太一致)

还有的是需要消息和异常的所有非格式测井方法特别版本:

namespace log4net 
{ 
    public interface ILog 
    { 
     ... 
     /* Log a message object and exception */ 
     void Debug(object message, Exception t); 
     void Info(object message, Exception t); 
     void Warn(object message, Exception t); 
     void Error(object message, Exception t); 
     void Fatal(object message, Exception t); 
     ... 
    } 
} 
0

您可以通过扩展器ILOG到有记录只是一个异常的方法了堆栈跟踪。

public static void ErrorWithStackTrace(this ILog log, Exception exception) 
{ 
    log.Error(exception.Message,exception); 
    }