看了很多项目,在类中使用log4j记录日志,都会发现在本类中定义了一个日志记录器,如下:private static final Logger log=Logger.getLogger(Logj4jTest.class);
private static final Logger log=Logger.getLogger(Logj4jTest.class);
private static final Logger log2=Logger.getLogger(Logj4jTest2.class);
这两个日志记录器对象引用是不一样的,意味着每个类这样写,创建的日志记录器对象就特别多了。
使用到log4j的类都这样写,而日志的输出目的地都是一样的。所以我有疑问,为什么不在一个类中获得这么一个日志记录器对象,以后其它类需要日志记录的时候,就从这个类获得日志记录器来记录日志呢?

解决方案 »

  1.   

    1,那如果那样 怎么来细粒度 日志级别呢
    2,那样做在Log4j中似乎 不会打印出真实的那个文件出了错误当debug的时候  
      

  2.   


    在日志输出格式的配置里,通过配置不就可以得到日志产生于哪个类的。
    %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) 
      

  3.   

    效果是一样的,但用起来和维护起来麻烦:
    你这个log统一的类维护起来麻烦,每写一个新类,都要在你这个类里面加一个log属性
    用你这个log的类还要到你这里面去找,哪个log变量对应我这个类
      

  4.   

    效果是一样的,但用起来和维护起来麻烦:
    你这个log统一的类维护起来麻烦,每写一个新类,都要在你这个类里面加一个log属性
    用你这个log的类还要到你这里面去找,哪个log变量对应我这个类
      

  5.   

    1。LZ的意思地是建一个静态的log类,以后的类直接调用。省得每次都直接定义了。貌似确实能简单些。
    2。这样增加类之间的耦合。
    3。但是如果某个类的比较特殊,需要一个特别的log,你的代码修改的比较多。不好维护。