当前位置:  开发笔记 > 前端 > 正文

如何在包装Log4net时记录MethodName?

如何解决《如何在包装Log4net时记录MethodName?》经验,为你挑选了3个好方法。

我已经将Log4net包装在静态包装器中并想要记录

loggingEvent.LocationInformation.MethodName
loggingEvent.LocationInformation.ClassName

然而,我得到的只是我的包装器的名称.

如何使用forwardingappender和静态包装类来记录该信息

Logger.Debug("Logging to Debug");
Logger.Info("Logging to Info");
Logger.Warn("Logging to Warn");
Logger.Error(ex);
Logger.Fatal(ex);

Magnus Johan.. 27

怎么样%M%C变量? http://logging.apache.org/log4net/log4net-1.2.11/release/sdk/log4net.Layout.PatternLayout.html

用法,例如:


  

那不是你做的事吗?



1> Magnus Johan..:

怎么样%M%C变量? http://logging.apache.org/log4net/log4net-1.2.11/release/sdk/log4net.Layout.PatternLayout.html

用法,例如:


  

那不是你做的事吗?


注意主题中的"包装时".在问题作者的例子中(当包装ILog时)%M将等同于"Debug","I​​nfo"等,这是没用的.

2> Claus Thomse..:

好吧,错误是在我的附近,但为了完整性,包括我所知的最佳答案:

你需要的Facade应该包装ILogger而不是ILog

 public static class Logger
 {
    private readonly static Type ThisDeclaringType = typeof(Logger);
    private static readonly ILogger defaultLogger;

    static Logger()
    {
      defaultLogger =
        LoggerManager.GetLogger(Assembly.GetCallingAssembly(),"MyDefaultLoggger");

...

    public static void Info(string message)
    {
        if (defaultLogger.IsEnabledFor(infoLevel))
        {
            defaultLogger.Log(typeof(Logger), infoLevel, message, null);
        }
    }



3> 小智..:

只需声明你的日志变量......

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

然后你可以正常使用它.


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