当前位置:  开发笔记 > 编程语言 > 正文

如何使用log4net记录跟踪消息?

如何解决《如何使用log4net记录跟踪消息?》经验,为你挑选了2个好方法。

我正在使用log4net将写入日志消息记录到滚动日志文件中.

现在我还将所有跟踪消息重定向System.Diagnostics.Trace到该日志文件.我该如何配置?我试图在log4net文档中找到有关它的任何内容,但没有成功.有可能吗?

我想这样做的原因是因为我对第三方库的Trace消息感兴趣.


    
      
      
      
      
      
      
        
      
    

Dirk Vollmar.. 71

根据Rune的建议,我实现了一个输出到log4net的基本TraceListener:

public class Log4netTraceListener : System.Diagnostics.TraceListener
{
    private readonly log4net.ILog _log;

    public Log4netTraceListener()
    {
        _log = log4net.LogManager.GetLogger("System.Diagnostics.Redirection");
    }

    public Log4netTraceListener(log4net.ILog log)
    {
        _log = log;
    }

    public override void Write(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }

    public override void WriteLine(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }
}

+1为上面的答案.如果log4net也设置为写入TraceAppender,我会小心.我实际上没有测试过这个,但是你最终可能会遇到Trace写入log4net并且log4net正在写入Trace导致无限循环的情况.例如,如上所示,您可以通过在记录器'System.Diagnostics.Redirection'的appender中不包含TraceAppender来缓解这种情况. (12认同)

看一下log4net.Util.LogLog类的源代码.默认情况下,这会记录到Trace,并且@Jimit大部分都是正确的 - 如果发生appender错误,你最终会陷入僵局.在TraceListener的实现中,我确保在实现的构造函数中设置log4net.Util.LogLog.EmitInternalMessages = false,并且可能处理LogLog.LogReceived事件并以另一种方式记录这些消息.令人遗憾的是,由于此设置,将不会记录某些appender错误.来源是你的朋友. (4认同)

在log4net中是否有可以监听跟踪事件的内置监听器? (3认同)


Rune Grimsta.. 26

我不知道log4net是否支持这个,但你可以实现自己的跟踪监听器来做到这一点.

TraceListener没有太多需要实现的方法,您所要做的就是将值转发到log4net,这应该很容易实现.

要添加自定义跟踪侦听器,您可以修改app.config/web.config,也可以使用代码添加它 Trace.Listeners.Add(new Log4NetTraceListener());



1> Dirk Vollmar..:

根据Rune的建议,我实现了一个输出到log4net的基本TraceListener:

public class Log4netTraceListener : System.Diagnostics.TraceListener
{
    private readonly log4net.ILog _log;

    public Log4netTraceListener()
    {
        _log = log4net.LogManager.GetLogger("System.Diagnostics.Redirection");
    }

    public Log4netTraceListener(log4net.ILog log)
    {
        _log = log;
    }

    public override void Write(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }

    public override void WriteLine(string message)
    {
        if (_log != null)
        {
            _log.Debug(message);
        }
    }
}


+1为上面的答案.如果log4net也设置为写入TraceAppender,我会小心.我实际上没有测试过这个,但是你最终可能会遇到Trace写入log4net并且log4net正在写入Trace导致无限循环的情况.例如,如上所示,您可以通过在记录器'System.Diagnostics.Redirection'的appender中不包含TraceAppender来缓解这种情况.
看一下log4net.Util.LogLog类的源代码.默认情况下,这会记录到Trace,并且@Jimit大部分都是正确的 - 如果发生appender错误,你最终会陷入僵局.在TraceListener的实现中,我确保在实现的构造函数中设置log4net.Util.LogLog.EmitInternalMessages = false,并且可能处理LogLog.LogReceived事件并以另一种方式记录这些消息.令人遗憾的是,由于此设置,将不会记录某些appender错误.来源是你的朋友.
在log4net中是否有可以监听跟踪事件的内置监听器?

2> Rune Grimsta..:

我不知道log4net是否支持这个,但你可以实现自己的跟踪监听器来做到这一点.

TraceListener没有太多需要实现的方法,您所要做的就是将值转发到log4net,这应该很容易实现.

要添加自定义跟踪侦听器,您可以修改app.config/web.config,也可以使用代码添加它 Trace.Listeners.Add(new Log4NetTraceListener());

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有