zoukankan      html  css  js  c++  java
  • 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的启动 

  • 相关阅读:
    js中(function(){…})()立即执行函数写法理解
    css3 样式 圆角
    Hbuilder实用技巧
    开始使用 HBuilder 和 Mui
    init和plus(编码中遇到问题就看这里)
    将id传过去,根据id显示下面的详情页面
    iOS-上传头像的使用
    iOS-iOS 支付 [支付宝、银联、微信](转)
    iOS-ShareSDK的使用(转)
    iOS-在AFN基础上进行网络请求的封装
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444409.html
Copyright © 2011-2022 走看看