zoukankan      html  css  js  c++  java
  • [J2EE:中间件]Slf4J+Logback快速入门

    1 简述

    2 配置

    配置文件: logback.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
    <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
    <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
    
    <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
    默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <!-- 定义日志文件 输入位置 -->
        <property name="logPath" value="d:/test_log" />
        <!-- 日志最大的历史 30天 -->
        <property name="maxHistory" value="30"/>
    
        <!-- 配置项, 通过此节点配置日志输出位置(控制台、文件、数据库)、输出格式等-->
        <!-- ConsoleAppender代表输出到控制台 -->
        <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
            <!-- layout代表输出格式 -->
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
            </layout>
        </appender>
        <!-- 日志输出文件 -->
        <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
            </encoder>
            <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
            <!-- 滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 输出路径 -->
                <fileNamePattern>${logPath}/info/%d.log</fileNamePattern>
                <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
                则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
                <maxHistory>${maxHistory}</maxHistory>
            </rollingPolicy>
            <!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
              <fileNamePattern>${logPath}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>
              <minIndex>1</minIndex>
              <maxIndex>3</maxIndex>
            </rollingPolicy>   -->
            <!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>5MB</maxFileSize>
            </triggeringPolicy>   -->
        </appender>
        <!-- 特殊记录Error日志 -->
        <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 只记录ERROR级别日志,添加范围过滤,可以将该类型的日志特殊记录到某个位置 -->
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logPath}/error/%d.log</fileNamePattern>
                <!-- 日志最大的历史 60天 -->
                <maxHistory>60</maxHistory>
            </rollingPolicy>
        </appender>
    
        <!-- 根节点,表名基本的日志级别,里面可以由多个appender规则 -->
        <!-- level="info"代表基础日志级别为info -->
        <root level="info">
            <!-- 引入控制台输出规则 -->
            <appender-ref ref="consoleLog" />
            <appender-ref ref="fileInfoLog" />
            <appender-ref ref="fileErrorLog" />
        </root>
    </configuration>
    

    3 Maven依赖: pom.xml

    <!-- 日志 -->
    <!-- Slf<Simple Logging Facade For Java> + Log4J -->
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <!-- 实现方案1:Log4J -->
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <!-- slf4j与log4j的整合jar包 : 其将自动引入其log4j-1.2.17.jar -->
    <!--        <dependency>-->
    <!--            <groupId>org.slf4j</groupId>-->
    <!--            <artifactId>slf4j-log4j12</artifactId>-->
    <!--            <version>1.7.25</version>-->
    <!--        </dependency>-->
    <!-- 实现方案2: Logback -->
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    

    4 测试

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class TestLog {
        static Logger logger = LoggerFactory.getLogger(TestLog.class);
        public static void main(String[] arge){
            logger.debug("johnnyzen debug");
            logger.info("johnnyzen info");
            logger.error("johnnyzen error");
            logger.warn("johnnyzen warn");
        }
    }
    

    测试结果:

    备注:因为root节点中我们记录的日志级别是info,其就只会记录等于或高于info级别的日志,其他的都忽略避免生产环境产生过多日志。

    5 参考文献

  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/13043411.html
Copyright © 2011-2022 走看看