logback简单配置详解

注意:这是main或是test执行时候的样子,如果是web项目,log日志生成到中间件的目录下,

比如:

如果使用tomcat,则web项目的log日志生成到tomcat/bin/user_path(我的是logs路径,可以配置到pom.xml或是写死到里面,不过因为多系统多软件,还是建议不要写绝对路径)

下面就是简单的案例:

idea新建项目,项目结构和jar包:
这里写图片描述
类:

public class Test {

    private static Logger Log = LoggerFactory.getLogger(Test.class);

    @org.junit.Test
    public void testLogBack(){

        Log.debug("debug测试");
        Log.info("info测试");
        Log.error("error测试");

        try{
            throw new RuntimeException("error RuntimeException 测试");
        }catch(Exception e){
            Log.error(e.getMessage(),e);
        }
    }

}

logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<!--
  scan:xml文件如果发生改变,将会被重新加载,默认值是true
  scanPeriod:间隔扫描xml是否改变,scan为true是生效。默认是ms,默认间隔时间是1分钟。
  debug:当此属性设置为true时,将打印出logback.xml内部日志消息,默认值是false。 
-->
<configuration debug="true" scan="true" scanPeriod="30 seconds">
    <!--
      name:标签名,为了让其他标签调用的唯一标示
      class:引用的类,从此类中可以看出该appender标签定义的是日志输出的位置
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 常用
                  %-数字xxx               分隔多少,不要和属性分开写,不挨着会报错
                  %d{HH……} | d           日期,分开会报错
                  %thread                线程
                  %level | p | le        显示级别
                  %logger{数字} | c | lo  类文件,虽然和class一样,但是如果包.类很长,这个可以获取简约长度展示
                  %class | c             输出同上
                  %file  | F             是哪个.java文件
                  %m | msg | message     输出信息
                  %M                     方法
                  %line  | L             错误的行号,少用
                  %caller{数字}           输出信息深度
            -->
            <pattern>%d{HH:mm:ss.SSS} [%-5level] [%-5class] [%-5M] - [%m]%n </pattern>
        </encoder>
    </appender>

    <!-- 滚动日志 -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/error.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] [%-5class] [%-5M] - [%m] %-5line%n </pattern>
            <charset>GBK</charset>
        </encoder>
    <!-- 可以过滤在error日志中只输出error的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!-- 触发策略:当日志文件满足5MB就会出发回滚策略-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

        <!-- 滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保留30天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/info.log</file>

        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] [%-5class] [%-5M] - [%m]%n </pattern>
            <charset>GBK</charset>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!--
            回滚策略:
            其中minIndex和maxIndex分别对应的是满足5MB的日志文件的命名序号(1~10)对应%i.log中的i值。
            如:xxx-2016-1.log,xxx-2016-2.log等,如果超过10个就会覆盖第一个
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>logs/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>30</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

    </appender>


    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/debug.log</file>

        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] [%-5class] [%-5M] - [%m]%n </pattern>
            <charset>GBK</charset>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>logs/debug.%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>30</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>5MB</maxFileSize>
        </triggeringPolicy>

    </appender>

    <!--
        设置哪个目录或者包,类使用哪个日志
     将控制impl包下的所有类的日志的打印,level是打印级别:debug,如果不设置level,它将继承它的上级<root>的日志级别“DEBUG”
        如果没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
        如果没有设置appender-ref,此loger本身不打印任何信息。
    -->
    <root level="debug">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ERROR" />
        <appender-ref ref="INFO" />
        <appender-ref ref="DEBUG" />
    </root>

    <!--
        当执行impl类的方法时,会首先执行本身引用的appender-ref标签设置的格式打印;
        当执行不在impl中的方法时,会将级别为“DEBUG”及大于“DEBUG”的日志信息传递给root,
        root接到下级传递的信息,交给已经配置好的名为“STDOUT”和“log_file”的appender处理,“STDOUT”appender将信息打印到控制台,“log_file”appender将信息打印到日志文件;
    -->

    <!--打印mybatis的SQL语句-->
    <logger name="com.ibatis" level="DEBUG" />
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />
    <logger name="java.sql.Connection" level="DEBUG" />
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />

    <!--日志异步到数据库 -->
    <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
        <!--日志异步到数据库 -->
        <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <driverClass>com.mysql.jdbc.Driver</driverClass>
                <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
                <user>root</user>
                <password>root</password>
            </dataSource>
        </connectionSource>
    </appender>-->

</configuration>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值