zoukankan      html  css  js  c++  java
  • Java日志组件2---Log4j(org.apache.log4j.Logger)

    如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用jdk的自带Log完全可以解决问题。但是,在开发的过程中,大多数项目都比较大,为方便找到程序的bug,都是需要系统的记录日志的。这里边出现了Log4j(Log for Java),Apache Log4j下载地址:log4j官方下载

    apache的log4j是一个开源项目,作为一个强大的日志组件,它提供的功能远比jdk系统再带的log要多,可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。

    下面是本人测试log4j的过程

    1、新建java项目:Logger

    2、添加log4j-1.2.17.jar包

    3、添加log4j.properties配置文件,这里在写的过程中发现,在写入properties文件的时候,会将中文字符转化为unicode码,所以我将log4j.properties更改为log4j.txt文件,然后在代码中手动加载log4j.txt文件(文件位置config/log4j.txt)

    config/log4j.txt:

    ### 设置logger级别 ###
    log4j.rootLogger = debug,stdout,D,E
    
    ### 输出格式解释:
    ### [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
    
    ### %d{yyyy-MM-dd HH:mm:ss}: 时间,大括号内是时间格式
    ### %c: 全类名
    ### %M: 调用的方法名称
    ### %F:%L  类名:行号(在控制台可以追踪代码)
    ### %n: 换行
    ### %p: 日志级别,这里%-5p是指定的5个字符的日志名称,为的是格式整齐
    ### %m: 日志信息
    
    ### 输出的信息大概如下:
    ### [时间{时间格式}][信息所在的class.method(className:lineNumber)] 换行
    ### [Level: 5个字符的等级名称] - Msg: 输出信息 换行
    
    ### appender.stdout输出到控制台 ###
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target = System.out
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
    
    ### appender.D输出Debug信息到日志文件 E://logs/error.log ###
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.D.File = E://Log//Log4j//log4j_debug.log
    log4j.appender.D.Append = true
    log4j.appender.D.Threshold = DEBUG 
    log4j.appender.D.layout = org.apache.log4j.PatternLayout
    log4j.appender.D.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n
    
    ### appender.D输出Error信息到日志文件 E://logs/error.log ###
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.E.File = E://Log//Log4j//log4j_error.log 
    log4j.appender.E.Append = true
    log4j.appender.E.Threshold = ERROR 
    log4j.appender.E.layout = org.apache.log4j.PatternLayout
    log4j.appender.E.layout.ConversionPattern = [%-d{yyyy-MM-dd HH:mm:ss}][Class: %c.%M(%F:%L)] %n[Level: %-5p] - Msg: %m%n

    4、写测试类Log4jTest.java

    package cn.darkranger.log.log4j;
    
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
    import org.junit.Test;
    
    public class Log4jTest {
        private static Logger logger = Logger.getLogger(Log4jTest.class);
    
        static {
            
            // **** 在JavaWeb中一般通过下面方式配置 ****
            //     <context-param>
            //         <param-name>log4jConfigLocation</param-name>
            //         <param-value>/WEB-INF/classes/log4j.properties</param-value>
            //     </context-param>
            //     <listener>
            //         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
            //     </listener>
            
            // **** 在Java项目中 ****
            // 手动读取配置文件
            // 读取的文件应该是log4j.properties,由于在log4j.properties中中文会转化为Unicode码,将文件修改为log4j.txt
            
            PropertyConfigurator.configure("config/log4j.txt");
        }
    
        @Test
        public void test01() {
            // 等级从上到下依次下降
            // 灾难、严重
            logger.fatal("this is fatal!");
            // 错误
            logger.error("this is error!");
            // 警告
            logger.warn("this is warn!");
            // 信息
            logger.info("this is info!");
            // 调试
            logger.debug("this is debug!");
            // 追踪
            logger.trace("this is trace!");
        }
    }

    测试:

    控制台输出:

    [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)] 
    [Level: FATAL] - Msg: this is fatal!
    [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)] 
    [Level: ERROR] - Msg: this is error!
    [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:36)] 
    [Level: WARN ] - Msg: this is warn!
    [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:38)] 
    [Level: INFO ] - Msg: this is info!
    [2016-06-15 15:41:42][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:40)] 
    [Level: DEBUG] - Msg: this is debug!

    文件输出:

    E:LogLog4jlog4j_debug.log

    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)] 
    [Level: FATAL] - Msg: this is fatal!
    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)] 
    [Level: ERROR] - Msg: this is error!
    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:36)] 
    [Level: WARN ] - Msg: this is warn!
    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:38)] 
    [Level: INFO ] - Msg: this is info!
    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:40)] 
    [Level: DEBUG] - Msg: this is debug!

    E:LogLog4jlog4j_error.log

    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:32)] 
    [Level: FATAL] - Msg: this is fatal!
    [2016-06-15 16:04:04][Class: cn.darkranger.log.log4j.Log4jTest.test01(Log4jTest.java:34)] 
    [Level: ERROR] - Msg: this is error!
  • 相关阅读:
    开启gpu加速的高性能移动端相框组件!
    一看就懂得移动端rem布局、rem如何换算
    加密算法
    YDNKJS 笔记
    JavaScript函数
    测试下
    console前端代码自动删除QQ空间我的说说
    前端规范
    解决方案
    重读js高程笔记二
  • 原文地址:https://www.cnblogs.com/wrcold520/p/5587854.html
Copyright © 2011-2022 走看看