关于log4j使用常识的一个问题求解。

qunhao 2012-05-29 08:48:57
看了很多项目,在类中使用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的类都这样写,而日志的输出目的地都是一样的。

所以我有疑问,为什么不在一个类中获得这么一个日志记录器对象,以后其它类需要日志记录的时候,就从这个类获得日志记录器来记录日志呢?
...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxqrr 2012-05-30
  • 打赏
  • 举报
回复
=Logger.getRootLogger
qunhao 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
如果按你说的那么做,报错的是在一个类里,你如果区分问题是出在哪个类里呢 ,以后日志分析就有问题。
而且如果这样做的话日志粒度也是个问题了
[/Quote]

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

古布 2012-05-30
  • 打赏
  • 举报
回复
1。LZ的意思地是建一个静态的log类,以后的类直接调用。省得每次都直接定义了。貌似确实能简单些。
2。这样增加类之间的耦合。
3。但是如果某个类的比较特殊,需要一个特别的log,你的代码修改的比较多。不好维护。
淡定的峰哥 2012-05-30
  • 打赏
  • 举报
回复
效果是一样的,但用起来和维护起来麻烦:
你这个log统一的类维护起来麻烦,每写一个新类,都要在你这个类里面加一个log属性
用你这个log的类还要到你这里面去找,哪个log变量对应我这个类
淡定的峰哥 2012-05-30
  • 打赏
  • 举报
回复
效果是一样的,但用起来和维护起来麻烦:
你这个log统一的类维护起来麻烦,每写一个新类,都要在你这个类里面加一个log属性
用你这个log的类还要到你这里面去找,哪个log变量对应我这个类
小菜鸟的博客 2012-05-29
  • 打赏
  • 举报
回复
如果按你说的那么做,报错的是在一个类里,你如果区分问题是出在哪个类里呢 ,以后日志分析就有问题。
而且如果这样做的话日志粒度也是个问题了
BUG弄潮儿 2012-05-29
  • 打赏
  • 举报
回复
这样的话可以使用每个类的
全路径类名表示日志信息
热烈的红颜 2012-05-29
  • 打赏
  • 举报
回复
1,那如果那样 怎么来细粒度 日志级别呢
2,那样做在Log4j中似乎 不会打印出真实的那个文件出了错误当debug的时候

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧