Log4J

在程序的开发过程中,可以使用debug打断点来调试程序,观察程序的运行情况。那代码上线之后,怎么看程序的运行情况呢?打log。

1、
程序log的几处应用:
  • 定位问题
  • 观察程序的运行状态
  • 统计
log的三大组件:
Logger:输入日志的具体内容
Appender:输出到哪里
Layout:输出日志的样式


2、打log的方式:
打log无非就是在程序中通过硬编码的方式,输出一些信息。极端点,通过system.out.print()也照样能打出信息来,为啥那搞那么复杂的日志系统呢?我个人的理解,主要是为了便于统一控制。举个栗子,不要maven,去各大网站把jar包一个个的下载下来,再导入到项目里,也一样能让程序跑起来,为啥大家不这么干呢 ?不就是为了方便和统一管理么。

3、log的level:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
举个栗子,在实例化Logger对象的时候,设置的配置级别是INFO,那么,至少要用logger.info()才能打印出来,用logger.debug()是不会进行打印的。
通常,使用Level来限制日志的输出,还有另一种方式是使用Threshold,概念上是类似的。

4、创建logger实例:
在代码中,常常会使用如下的方式获取一个logger实例,
private static final Logger LOGGER = LoggerFactory.getLogger(ProductAuditResultListener.class);
这种方式其实是使用类的全限定名来生成logger实例的,上面的代码就等价于:
private static final Logger LOGGER = LoggerFactory.getLogger("com.dianping.secondhand.service.mq.consumer.ProductAuditResultListener);
而在log4j中,也是靠名字来区分logger的层次结构的,举个栗子:
比如:名称为java的Logger就是java.util的父Logger;java.util是java.util.Collection的父Logger;Logger的体系结构和package的结构划分类似,使用.来区分;所以我们前面才说,使用类的全限定名是最简单,也是最符合logger的体系结构的命名方式。

5、root logger:
  • root logger是没有名字的
  • root logger是自动存在的
  • root logger必须设置level
  • Logger.getRootLogger()可以用来获取root logger
在log4j中,按道理说,应该为每一个logger都指定其level、appender与layout,然而log4j使用层级与继承的方式,让配置最大程度的简化,并提供了相当大的灵活性。

6、appender:
appender指的是日志的输出目的地。对于appender而言,其对parent的态度不是继承或覆盖,而是一种叠加或叫追加。它会把它所有parent的appender都追加到自身之上,这可能导致同一条log.info()语句输出好几遍。可以通过设置
additivity="false"
来禁止这种特性。

7、Layout:
Layout指明了输出的日志的格式。一般该对象是绑定在appender上的,的创建appender的时候指定。反应到XML配置文件中,就有如下的配置结构:
为root logger指定level、appender -> 在appender的声明中指定layout 

8、log4j的启动:
在整个应用启动时,就得完成log4j相应配置的读取和加载,否则log4j会告警的。至少,怎么说也得把root logger配置好[level、appender、layout]吧。在web应用中,可以通过在web.xml配置个listener
 
org.apache.logging.log4j.web.Log4jServletContextListener
来完成log4j的启动 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值