2009-07-19 33 views
9

我实现一个自定义的XML格式的log4.net如何使用包装类时log4net的

public class ISDSApplicationEventsLayout : XmlLayoutBase 
{ 
    protected override void FormatXml(...) 
    { 
     //Location Info 
     writer.WriteStartElement("Method"); 
     writer.WriteString(**loggingEvent.LocationInformation.MethodName * *); 
     writer.WriteEndElement(); 
    } 
} 

问题是...登录方法的名称现在,当我调用日志方法从我的日志包装类。 ..所谓的记录

public static void logEvent(string message) 
{ 
    log.Info(isdsLog); 
} 

我得到的输出....

<Method>logEvent</Method> 

怎么可能有调用该方法的名称logEvent,而不是logEvent作为方法名?

谢谢

问题更新:

如果这上面似乎有点复杂 - 什么,我要问的是:你如何保持在称为包装记录功能的方法的上下文log4net的...

例如...方法的doWork()调用... - >日志包装 - >调用log4net的....

你怎么做的方法名=的doWork和不记录WRA pper功能....

+0

[使用包装时,如何保留Log4Net的日志类和方法名?](http:// stackoverflow。com/questions/2049992/when-using-wrapper-how-to-preserve-class-and-method-name-for-log4net-to-log) – 2017-02-04 10:20:00

回答

14

实际上,您可以使用开箱即用的log4net轻松修复此问题。你的包装器可以调用Logger.Log并传递你的包装类的类型作为第一个参数。所以,你的包装可能会是这个样子:

public class MyLog4NetWrapper 
{ 
    ILog log = LogManager.GetLogger("WhateverYourLoggerNameIs"); 

    public void logEvent(string message) 
    {  
    log.Logger.Log(typeof(MyLog4NetWrapper), LogLevel.Info, message, null); 
    } 
} 

当log4net的消息记录,它遍历调用堆栈,直到它到达其声明类型等于传递进来的第一个参数类型的方法Log方法。堆栈中的下一个方法是实际的呼叫站点。

至于包装log4net记录器,我不知道我会建议创建一个静态包装类。主要的问题是你的app.config文件中只能有一个可配置的记录器。换句话说,您将无法独立控制代码的不同部分的日志记录。如果你有A类和B类,并且都使用你的静态包装记录器,那么这两个类将记录在同一个级别。如果你想让A级的登录和B级的登录失效,你将无法做到这一点。

+0

当然,有时候你不会看到脸上盯着你。那么,如果你把代码修改为`log.Logger.Log(...)`至少:) – 2010-12-09 09:25:52

1

我不认为你可以用开箱即用的log4net轻松解决这个问题。如果我们看一看在the LogImpl class的ILog.Info方法,您呼叫:

virtual public void Info(object message) 
    { 
     Logger.Log(ThisDeclaringType, m_levelInfo, message, null); 
    } 

当记录一条消息,log4net的会走当前呼叫的堆栈跟踪,以便找到发起的方法日志操作。为此,Log4net使用“ThisDeclaringType”类型作为搜索的边界,选择该类型内的第一个“上方”调用作为启动方法。

就你而言,遇到的第一个方法是logEvent方法。如果您删除了logEvent包装器并直接使用记录方法,您将获得所需的信息。

+0

实际上,可以创建一个可以成功保存通话的记录器包装器网站信息。请参阅我的答案中的代码示例,了解执行此操作的一种方法。关键是将包装的记录器的类型作为第一个参数传递给Log方法(而不是使用Info,Debug等方法)。 – wageoghe 2010-12-08 20:18:59