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

命名记录器上的log4net策略?

如何解决《命名记录器上的log4net策略?》经验,为你挑选了1个好方法。

我通常在每个班级中声明以下内容:

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

并使用每个类中的静态成员来记录不同的级别(信息,调试等)

我在某个地方看到并且一直在使用它有点盲目,推断设置足够灵活,可以帮助我按命名空间过滤并记录各个类型,如果我想解决生产问题而不是.

但我很少使用精细伐木的"水平".所以,我想看看其他人在使用什么.您是否使用上述内容,因为我感觉很多人正在使用它,或者您是否创建了命名记录器,如"debug","trace","error","moduleA"等,并在不同类型之间共享记录器,组装?



1> Peter Lillev..:

我基本上用

public class MyClass
{
    private static readonly ILog log = Log.Get();
}

其中Log.Get是一个基本上在内部执行此操作的类

return LogManager.GetLogger(typeof(T));

启动成本甚至小于反射方式以及更清洁的imo.

更新:鉴于我以后几年的依赖注入,单元测试和假货的经验,我不能再说我宽恕上面概述的方法.该方法(我的和OP的方法)的问题在于代码具有关于如何创建日志实例的明确知识.

一方面,这种增加的耦合使得测试更加困难:没有简单的方法用ILog假的实例替换实例.另一方面,对我的Log类进行的更改将导致所有使用它的类中的更改波动.

因此,我走的路线注入ILog情况下,通常是通过构造函数注入,以及外包如何构建一个记录器来选择我的DI框架:

public class MyClass
{
    readonly ILog _log;

    public class MyClass(ILog log)
    {
        _log = log;
    }
}

这允许适当的去耦.代码不再需要知道如何构造记录器.大多数依赖注入框架都具有查看正在注入的类型然后使用它来构造日志实例的方法.这是log4net和Autofac的方法.

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