logback文件详解(动态指定根目录)

我的例子

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="30 seconds" packagingData="true">
    <!-- 设置 logger context 名称,一旦设置不可改变,默认为default -->
    <contextName>EFDC</contextName>
    <!-- 定义日志文件名称,与工程名一致 -->
    <property name="APP_NAME" value="EFDC" />
    <!-- 定义日志的根目录  可以手动指定绝对路径  如:<property name="LOG_HOME" value="绝对路径(用正斜杠代替反斜杠或者双反斜杠来分隔目录级次)" /> -->
    <!--也可以用define标签自己在代码中动态指定根目录,LogHomeProperty类后面附上 -->
    <define name="LOG_HOME" class="com.hkx.logging.util.LogHomeProperty" />
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{ HH:mm:ss.SSS} %-5level %logger{ 36} - %msg%n</pattern>
        </encoder>
    </appender>
     <!-- 正常文件输出设置 -->
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 活动文件 -->
        <File>${ LOG_HOME}/${ APP_NAME}.log</File>
        <!-- 日志滚动策略 -->
        <rollingPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 归档文件 -->
            <FileNamePattern>${ LOG_HOME}/${ APP_NAME}/%d{ yyyy-MM-dd}-%i.zip
            </FileNamePattern>
            <!-- 单个日志文件最多 10MB -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 30天的日志周期,超出数量就删除旧文件  -->
            <maxHistory>30</maxHistory>
            <!-- 日志体量上限,超出删除旧的日志 -->
            <totalSizeCap>500MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{ yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 异常文件输出设置,将异常堆栈另外保存一份到单独的文件中,方便查找 -->
    <appender name="FILE_ERROR"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${ LOG_HOME}/${ APP_NAME}.error.log</File>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${ LOG_HOME}/${ APP_NAME}/error-%d{ yyyy-MM-dd}-%i.zip
            </FileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>500MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{ yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印警告日志 -->
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 异步输出 -->
    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
        <!-- 0-不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACTDEBUGINFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref ="FILE"/>
    </appender>
    <!-- 日志级别若没显示定义,则继承最近的父logger(该logger需显示定义level,直到rootLogger)的日志级别-->
    <!-- logger的appender默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为-->
    <logger name="com.jiuqi"  level="INFO" additivity="false" >
        <appender-ref ref="FILE"/>
    </logger>
    <!-- 至多只能配置一个root -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_ERROR" />
    </root>
</configuration>

LogHomeProperty 类要继承PropertyDefinerBase类

package com.hkx.logging.util;
import ch.qos.logback.core.PropertyDefinerBase;

public class LogHomeProperty extends PropertyDefinerBase{

       private static final String LOG_HOME = 自己动态的定义根目录路径;
       
       @Override
       public String getPropertyValue() {
              return LOG_HOME;
       }
}

这里有大神的一篇超详细的说明 https://www.cnblogs.com/warking/p/5710303.html

    原文作者:kk无敌怕
    原文地址: https://blog.csdn.net/weixin_42142057/article/details/90236108
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞