zoukankan      html  css  js  c++  java
  • logback配置方法

    logback是一个通用可靠、快速灵活的日志框架,它替代了log4j,和slf4j组成新的日志系统。

    slf4j是一个日志门面,为其他各种日志框架提供了统一的接口,代码中使用slf4j可以避免对某一种日志框架造成依赖。

    logback的文档地址:logback官方文档

    配置示例地址:github

    一、添加jar包引用

    修改pom.xml文件,加入:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.7</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.7</version>
    </dependency>
    

    二、添加配置文件

    在"src/main/resources"代码文件夹中新建文件"logback.xml",内容为:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- 自定义属性名称 -->
        <property name="App_Name" value="demo1" />
     
        <!-- 输出到控制台 -->
        <appender name="demo-log-console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!-- 格式化日志输出格式 -->
                <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
            </encoder>
        </appender>
         
        <!-- 输出到文件 -->
        <appender name="demo-log-file" class="ch.qos.logback.core.FileAppender">
            <!-- 活动日志名称 -->
            <file>log/${App_Name}/testFile.log</file>
            <!-- 是否接着上次的结尾继续,默认为true -->
            <!-- <append>true</append> -->
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
            </encoder>
        </appender>
         
        <!-- 输出到滚动文件(时间策略) -->
        <appender name="demo-log-rollingfiletime" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 活动日志名称 -->
            <file>log/${App_Name}/testRollingFileTime.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 滚动日志名称 -->
                <!-- 按最小的单位来,如果设置了mm,就是每分钟归档一次 -->
                <fileNamePattern>log/${App_Name}/testRollingFileTime-%d{yyyy-MM-dd_HH-mm}-%i.log.zip</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- 如果时间还没到,活动日志超过2KB,就归档一次,用%i区分 -->
                    <maxFileSize>2KB</maxFileSize>  
                </timeBasedFileNamingAndTriggeringPolicy>
                <!-- 归档文件最长保留时间,没有时间单位,如果是每分钟归档一次,就是30分钟清除一次 -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <!-- 格式化日志输出格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
        </appender>
         
        <!-- 输出到滚动文件(窗口策略) -->
        <appender name="demo-log-rollingfilefixed" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 活动日志名称 -->
            <file>log/${App_Name}/testRollingFileFixed.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <!-- 滚动日志名称 -->
                <fileNamePattern>log/${App_Name}/testRollingFileFixed-%i.log.zip</fileNamePattern>
                <!-- 序号从1开始 -->
                <minIndex>1</minIndex>
                <!-- 文件超过3个就开始覆盖之前的 -->
                <maxIndex>3</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- 活动日志超过2KB,就归档一次,用%i区分 -->
                <maxFileSize>2KB</maxFileSize>
            </triggeringPolicy>
            <encoder>
                <!-- 格式化日志输出格式 -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>
         
        <!-- 自定义打印级别和范围 -->
        <!-- additivity是否输出到父输出源 -->
        <!-- level包括TRACE、DEBUG、INFO、WARN、ERROR -->
        <logger name="org.xs.demo1" level="INFO" additivity="false">
            <appender-ref ref="demo-log-console" />
            <appender-ref ref="demo-log-file" />
            <appender-ref ref="demo-log-rollingfiletime" />
            <appender-ref ref="demo-log-rollingfilefixed" />
        </logger>
         
        <!-- 默认的打印级别 -->
        <root level="INFO">
            <!-- <appender-ref ref="demo-log" /> -->
        </root>
    </configuration>
    

    配置里的Appender是最常用的4个,其他还有很多,还可以自定义Appender

    三、运行测试

    1、在程序中加入log记录:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    private final Logger log = LoggerFactory.getLogger(getClass().getName());
     
    @RequestMapping("list2")
    public String list2(HttpServletRequest request) {
             
        List<testInfo> list = testDao.getList();
        request.setAttribute("testList", list);
             
        log.info("233");
             
        return "list";
    }
    

    2、测试

    tomcat启动后,在eclipse的相应目录下出现了3中类型的滚动日志

    访问一次list2地址以后,控制台出现了一行信息

    活动日志文件也有内容了,因为是39分加入了新内容,所以时间策略的滚动日志自动归档了38分的记录

    多次访问list2地址以后,活动日志文件超出了2kb,产生了归档后的滚动日志文件

    注:时间策略的滚动日志,在活动日志加入新内容时,会根据时间去归档之前的滚动日志文件,如果设定的1分钟还没到,活动日志超出了2kb,也会先归档这一部分的滚动日志文件。

    实例代码地址:https://github.com/ctxsdhy/cnblogs-example

  • 相关阅读:
    friend ---- public and private
    c++中const使用详解
    In c++ access control works on per-class basis not on per-object basis.
    realloc 用法
    enum don't allocate any memory
    (转)C++ STL中的vector的内存分配与释放
    计算机网络面试总结
    Redis安装与测试
    Hbase的安装与测试
    使用ActiveMQ实现简易聊天功能
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/6421050.html
Copyright © 2011-2022 走看看