logback配置文件

Patten参数说明
logger
在这里插入图片描述
在这里插入图片描述

logback.cml

<?xml version="1.0" encoding="utf-8"?>
<!-- configuration:子节点:appender,logger,root
    scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
    scanPeriod:检测文件修改时间间隔,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
    packagingData:数据打包,开启可能会影响性能,默认关闭
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false" packagingData="false">
    <!--每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。
    一旦设置,不能修改。可以通过%contextName/$cn来打印日志上下文名称,一般来说不用这个属性,可有可无-->
    <contextName>MyApp</contextName>
    <!-- property:定义key,value键值对
        name的值是变量的名称,value的值时变量定义的值。定义变量后,可以使“${变量名}”来使用变量。
        定义变量也可用variable
    -->
    <property name="patten_simple" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} | %msg%n"/>
    <variable name="patten" value="%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n"/>
    <!--key:名字,datePattern:当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式-->
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

    <!-- appender:无默认值,appender的具体实现类。常用的有 ConsoleAppender、FileAppender、RollingFileAppender
        ConsoleAppender:用于在屏幕上输出日志,只要定义好encoder节点就可以使用
        FileAppender:向文件输出日志内容,由于没有日志滚动策略,一般很少使用
        RollingFileAppender:向文件输出日志内容,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件。
    -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--常用的过滤器
        LevelFilter:根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志
            <level>:设置过滤级别
            <onMatch>:用于配置符合过滤条件的操作
            <onMismatch>:用于配置不符合过滤条件的操作
        ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;
        当日志级别低于临界值时,日志会被拒绝。
        EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar
        -->
        <!-- 定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来,用当前appender输出日志的时候都会经过这个过滤器 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志-->
            <level>DEBUG</level>
        </filter>

        <!--定义控制台输出格式-->
        <!-- encoder:负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。目前PatternLayoutEncoder 是唯一有用的且默认的encoder
            <pattern>:用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。
        -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>${patten}</pattern>-->
            <pattern>${patten_simple}</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
        <file>testFile.log</file>
        <!--如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true-->
        <append>true</append>
        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <prudent>false</prudent>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
    <appender name="fileRolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定义日志输出的路径-->
        <!--这里的scheduler.manager.server.home 没有在上面的配置中设定,所以会使用java启动时配置的值-->
        <!--比如通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
        <file>logs/rollingFile.log</file>
        
        <!--定义日志滚动的策略,决定 RollingFileAppender 的行为,涉及文件移动和重命名-->
        <!-- triggeringPolicy:
        TimeBasedRollingPolicy:最常用的滚动策略,根据时间来制定滚动策略,既负责滚动也负责触发滚动
            <fileNamePattern>:包含文件名及“%d”转换符, “%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
            <maxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。
        FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略。
            <minIndex>:窗口索引最小值
            <maxIndex>:窗口索引最大值,当用户指定的窗口过大时,会自动将窗口设置为12
            <fileNamePattern >:必须包含“%i”例如,假设最小值和最大值分别为1和2,命名模式为 mylog%i.log,会产生归档文件mylog1.log和mylog2.log
        SizeBasedTriggeringPolicy:查看当前活动文件的大小,如果超过指定大小会告知 RollingFileAppender 触发当前活动文件滚动。只有一个节点
            <maxFileSize>:这是活动文件的大小,默认值是10MB。
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义文件滚动时的文件名的格式-->
            <fileNamePattern>
                <!--${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz-->
                logs/rollingFile.%d{yyyy-MM-dd.HH}.log.zip
            </fileNamePattern>
            <!--根据fileNamePattern确定单位,此例60小时-->
            <maxHistory>60</maxHistory>
            <!--日志量最大20GB,该属性在 1.1.6版本后 才开始支持-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <!-- 告知 RollingFileAppender 何时激活滚动-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每个日志文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <!--定义输出格式-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
        </encoder>
        <!--当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,
        1不支持也不允许文件压缩,2不能设置file属性,必须留空-->
        <!--<prudent>false</prudent>-->
    </appender>

    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="这里设定输出级别是debug">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="fileRolling"/>
        <!--<appender-ref ref="file"/>-->
    </root>

    <!--
    logger:仅有一个name属性,一个可选的level和一个可选的addtivity属性
        name:用来指定受此loger约束的某一个包或者具体的某一个类
        level:大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
            如果未设置此属性,那么当前loger将会继承上级的级别
    -->
    <!--对于以类方式获取log的如:LoggerFactory.getLogger(ClassName.class),若name设置为包名,则对该包下所有类生效 
    输出级别设置为warn,并且只输出到控制台-->
    <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
    <logger name="com.example.logback" level="warn"/>

    <!-- 通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger
    additivity:表示是否使用rootLogger配置的appender进行输出,false则不适用
        由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender
        如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况
    -->
    <logger name="mytest" level="info" additivity="false">
        <!--logger可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger-->
        <appender-ref ref="stdout"/>
    </logger>

    <!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
    <!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>
</configuration>

logback多环境配置

<configuration>
    <property name="patten_simple" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} | %msg%n"/>
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来,用当前appender输出日志的时候都会经过这个过滤器 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志-->
            <level>DEBUG</level>
        </filter>

        <!--定义控制台输出格式-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>${patten}</pattern>-->
            <pattern>${patten_simple}</pattern>
        </encoder>
    </appender>
    <!--多环境日志输出-->
    <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
    <springProfile name="test,dev">
        <logger name="com.example.demo" level="DEBUG" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>
    </springProfile>

    <!-- 生产环境. -->
    <springProfile name="prod">
        <logger name="com.example" level="INFO" additivity="false">
            <appender-ref ref="consoleLog"/>
        </logger>
    </springProfile>
</configuration>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值