关于log4j的使用

来源:互联网 发布:淘宝限时打折要钱吗 编辑:程序博客网 时间:2024/06/05 06:46

单独使用log4j

所需jar包:

    <!-- log4j  -->    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>    </dependency>

代码实例:

    package com.xxx.common;    import org.apache.log4j.Logger;    /**     * 单独使用log4j实例      * 缺点: 日志代码耦合性大     *      *      * @author Administrator     *     */    public class Log4jTest {        private static Logger log = Logger.getLogger(Log4jTest.class);        public static void main(String[] args) {            Log4jTest log4jtest = new Log4jTest();            log4jtest.log();        }        /**         * 测试打印log         */        public void log(){            /**             * 为什么不是直接logger.debug(“debug:“+name);呢?             * 在配置文件中虽然可以使用控制级别为比debug级别更高的级别,如 info, warn,error,fatal             * 而不输出debug信息;但是,这里的字符串连接操作仍然会影响运行效率;             * 如果先判断当前logger的级别,如果级别不合适的话,连这句字符串连接都可以不做了。             */            if (log.isDebugEnabled()){                   log.debug("------DEBUG------");            }            log.info("------INFO------");            log.warn("------WARN------");            log.error("------ERROR------");            log.fatal("------FATAL------");        }}

commons-logging 和log4j 结合使用

commons-logging 是apache提供的一个通用日志接口,用户可以自由选择第三方日志组件作为具体实现,像log4j等; commons-logging和log4j结合一起使用, 日志代码依赖于commons-logging而非log4j, 降低了日志代码的耦合性, 如果有需要更换日志实现类, 就会方便许多.

所需jar包:

    <!-- commons-logging 公共logger接口, LogFactory 自动筛选    合适的logger工具  log4j > ... > simpleLog(都找不到,用自带的)  -->    <dependency>        <groupId>commons-logging</groupId>        <artifactId>commons-logging</artifactId>        <version>1.1</version>    </dependency>    <!-- log4j  -->    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>    </dependency>

代码实例

    package com.xxx.common;    import org.apache.commons.logging.Log;    import org.apache.commons.logging.LogFactory;    public class CLTest {        private static Log log = LogFactory.getLog(CLTest.class);        public static void main(String[] args) {            CLTest clTest = new CLTest();            clTest.log();        }        public void log(){            if (log.isDebugEnabled()) {                  log.debug("Debug info.");            }            log.info("Info info");            log.warn("Warn info");            log.error("Error info");            log.fatal("Fatal info");         }    }

slf4j和log4j结合使用

所需jar包:

    <!-- log4j  -->    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>    </dependency>    <!-- slf4j 包 -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>1.7.12</version>    </dependency>    <!-- slf4j-log4j12 包 -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.7.12</version>    </dependency>

代码实例:

    package com.xxx.common;    import org.slf4j.Logger;    import org.slf4j.LoggerFactory;    /**     * 简单日记门面(simple logging Facade for java)     * slf4j 和 log4j 结合使用, 接口: slf4j 实现类: log4j     * 优点:     *  1   SLF4J提供了占位日志记录,通过移除对isDebugEnabled(),      *    isInfoEnabled()等等的检查提高了代码的可读性。     *  2   通过使用日志记录方法,直到你使用到的时候,才会去构造日志信息(字符串),     *    这就同时提高了内存和CPU的使用率     * @author Administrator     *     */    public class SLTest {        private static final Logger logger = LoggerFactory.getLogger(SLTest.class);        public static void main(String[] args) {            SLTest sLTest  = new SLTest();            sLTest.log();        }        public void log(){            /**             * 大家应该还记得,在log4j中,为了提高运行效率,             * 往往在输出信息之前,还要进行级别判断,             * 以避免无效的字符串连接操作。如下:             *  if (logger.isDebugEnabled()){             *      logger.debug(“debug:“+name);             *  }             *  slf4j巧妙的解决了这个问题:先传入带有占位符的字符串,             * 同时把其他参数传入,在slf4j的内容部实现中,             * 如果级别合适再去用传入的参数去替换字符串中的占位符,否则不用执行。             *  logger.info("{} is {}", new String[]{“x",“y"});             */             logger.debug("{}he{}",new Object[]{"object:","YY"});             logger.info("{} info is {} and {}",new Object[]{"1","2","2"});             //也可以不传object数组,传具体参数也行             logger.error("error is {} and {}","1","2");;        }    }

log4j配置文件解析

    ### set log levels ###    log4j.rootLogger = debug , stdout , D , E , R    ### 1: 输出到控制台 ###    log4j.appender.stdout = org.apache.log4j.ConsoleAppender    log4j.appender.stdout.Target = System.out    ## 输出INFO级别以上的日志    log4j.appender.stdout.Threshold = DEBUG    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout    log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n    ### 2: 按日期生成debug以上级别到日志文件 ###    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender    #文件路径对, 没有文件夹 , 是会自动建立文件夹的     log4j.appender.D.File = C:/Users/Administrator/Desktop/logs/log.log    log4j.appender.D.Append = true    ## 输出DEBUG级别以上的日志    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} [ %t:%r ] - [ %p ] %m%n    ### 3: 按日期生成error级别以上信息到文件 ###    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender    ## 异常日志文件名    log4j.appender.E.File =C:/Users/Administrator/Desktop/logs/error.log     log4j.appender.E.Append = true     ## 只输出ERROR级别以上的日志!!!    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} [ %t:%r ] - [ %p ] %m%n    ### 4: 按文件大小生成总量小于一定个数的日志文件 ###    #按大小分割,循环覆盖    log4j.appender.R=org.apache.log4j.RollingFileAppender    log4j.appender.R.MaxFileSize=1MB    log4j.appender.R.MaxBackupIndex=2    log4j.appender.R.File=C:/Users/Administrator/Desktop/logs/partLog.log    log4j.appender.R.Threshold=DEBUG    log4j.appender.R.layout=org.apache.log4j.PatternLayout    log4j.appender.R.layout.ConversionPattern=%d %p  %C.%M(%L) | %m%n
0 0
原创粉丝点击