zoukankan      html  css  js  c++  java
  • log4j 2 入门实例(2)

    本文介绍将日志输出到文件的例子。

    log4j 2输出到文件

    log4j2.xml文件

    这个文件里,定义了三个类型的Appender:Console、File和RollingFile。

    • Console类型的Appender名称为Console,并且使用过滤器ThresholdFilter:debug级别及其以上信息可以输出,其余级别不输出。
    • File类型的Appender名称为log,存储日志到log/test.log文件里,append=“false”表示每次运行程序后,新日志覆盖旧日志。
    • RollingFile类型的Appender名称为RollingFile,存储日志到logs/app.log文件里,app.log达到某个大小值时,可以备份存储起来。还有其它的触发策略,比如时间,可以每天某个时间点进行备份存储。
    <?xml version="1.0" encoding="UTF-8"?>
    
    <configuration status="error">
        <!--先定义所有的appender-->
        <appenders>
            <!--这个输出控制台的配置-->
            <Console name="Console" target="SYSTEM_OUT">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                <!--这个都知道是输出日志的格式-->
                <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
            </Console>
            <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
            <File name="log" fileName="log/test.log" append="false">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
            </File>
    
            <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
            <RollingFile name="RollingFile" fileName="logs/app.log"
                         filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
                <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                <SizeBasedTriggeringPolicy size="0.004MB"/>
            </RollingFile>
        </appenders>
        <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
        <loggers>
            <!--建立一个默认的root的logger-->
            <root level="trace">
                <appender-ref ref="RollingFile"/>
                <appender-ref ref="log"/>
                <appender-ref ref="Console"/>
            </root>
    
        </loggers>
    </configuration>

    输出日志的例子

    import org.apache.logging.log4j.Level;
    import org.apache.logging.log4j.LogManager;
     
    public class Hello
    {
        public static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Hello.class.getName);
        public static void main(String[] args)
        {
            add(1, 2);
        }
     
        public static int add(int a , int b)
        {
            logger.entry(a, b);//trace级别的信息,单独列出来是希望你在某个方法或者程序逻辑开始的时候调用,和logger.trace("entry")基本一个意思
            logger.info("我是info信息");
            logger.warn("我是warn信息");
            logger.error("我是error信息");
            logger.fatal("我是fatal信息");
            logger.printf(Level.TRACE, "%d+%d=%d", a, b, a + b);//这个就是制定Level类型的调用:谁闲着没事调用这个,也不一定哦!
            logger.exit(a + b);//和entry()对应的结束方法,和logger.trace("exit");一个意思
            return a + b;
        }
    }

    输出信息

    1、控制台

    trace级别信息被过滤掉了。

    13:52:31.012 INFO  main.java.com.dbyl.appiumCore.tests.Hello 17 add - 我是info信息
    13:52:31.012 WARN  main.java.com.dbyl.appiumCore.tests.Hello 18 add - 我是warn信息
    13:52:31.013 ERROR main.java.com.dbyl.appiumCore.tests.Hello 19 add - 我是error信息
    13:52:31.013 FATAL main.java.com.dbyl.appiumCore.tests.Hello 20 add - 我是fatal信息

    2、不滚动存储的日志

    项目的根目录/log/test.log

    11:20:51.739 TRACE main.java.com.dbyl.appiumCore.tests.Hello 16 add - Enter params(1, 2)
    11:20:51.745 INFO  main.java.com.dbyl.appiumCore.tests.Hello 17 add - 我是info信息
    11:20:51.746 WARN  main.java.com.dbyl.appiumCore.tests.Hello 18 add - 我是warn信息
    11:20:51.747 ERROR main.java.com.dbyl.appiumCore.tests.Hello 19 add - 我是error信息
    11:20:51.747 FATAL main.java.com.dbyl.appiumCore.tests.Hello 20 add - 我是fatal信息
    11:20:51.759 TRACE main.java.com.dbyl.appiumCore.tests.Hello 21 add - 1+2=3
    11:20:51.760 TRACE main.java.com.dbyl.appiumCore.tests.Hello 22 add - Exit with(3)

    3、滚动存储的日志

    项目的根目录/logs/app.log

    2017-02-13 at 13:33:24 CST TRACE main.java.com.dbyl.appiumCore.tests.Hello 22 add - Exit with(3)

    app.log文件中只有一部分日志,其余部分日志都已经在文件达到4K大小时被备份存储了。

    项目的根目录/log/2017-02/

    drwxr-xr-x  8 wwh  staff  272  2 13 13:33 .
    drwxr-xr-x  4 wwh  staff  136  2 13 13:33 ..
    -rw-r--r--  1 wwh  staff  120  2 13 13:33 app-02-13-2017-1.log.gz
    -rw-r--r--  1 wwh  staff  122  2 13 13:33 app-02-13-2017-2.log.gz
    -rw-r--r--  1 wwh  staff  122  2 13 13:33 app-02-13-2017-3.log.gz
    -rw-r--r--  1 wwh  staff  123  2 13 13:33 app-02-13-2017-4.log.gz
    -rw-r--r--  1 wwh  staff  123  2 13 13:33 app-02-13-2017-5.log.gz
    -rw-r--r--  1 wwh  staff  110  2 13 13:33 app-02-13-2017-6.log.gz
  • 相关阅读:
    yum安装Mysql
    在Centos上安装xtrabackup,对Mysql做备份
    Linux下使用yum安装Mysql之后,无法登陆mysql
    手动产生replication中的系统SP
    MySQL全面瓦解1:安装部署与准备
    开发笔记:PDF生成文字和图片水印
    调试与优化:一次数据中心看板 T+1 改 T+0 优化过程
    MySQL:SELECT COUNT 小结
    系统架构设计:平滑发布和ABTesting
    linux /dev/mapper/centos-root目录莫名其妙被占满
  • 原文地址:https://www.cnblogs.com/superbaby11/p/6392935.html
Copyright © 2011-2022 走看看