slf4j-不同业务日志写到不同的文件中

3次阅读

共计 3187 个字符,预计需要花费 8 分钟才能阅读完成。

在 resources 目录下增加 logback.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProperty name="LOG_PATH" source="logging.path" defaultValue="/home/admin/xxx/logs" />
    <!-- 自定义控制台日志格局 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 零碎 INFO 级别日志 - 滚动记录日志 -->
    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 被写入的文件名,能够是绝对目录,也能够是相对目录,如果下级目录不存在会主动创立,没有默认值 -->
        <File>${LOG_PATH}/sys_info.log</File>
        <!-- 如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是 true。-->
        <append>true</append>
        <!-- 级别过滤器(LevelFilter), 此处只打 INFO 级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <!-- 上面 2 个属性示意匹配规定 level 的承受打印,不匹配的(即非 INFO)回绝打印 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 最罕用的滚动策略,它依据工夫来制订滚动策略,既负责滚动也负责登程滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 设置滚动文件规定,如果间接应用 %d,默认格局是 yyyy-MM-dd-->
            <fileNamePattern>${LOG_PATH}/sys_info.log.%d</fileNamePattern>
            <!-- 保留 30 天的日志 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 零碎 ERROR 级别日志 - 滚动记录日志 -->
    <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/sys_error.log</File>
        <append>true</append>
        <!-- 此处只打 ERROR 级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/sys_error.log.%d</fileNamePattern>
            <maxHistory>12</maxHistory>
        </rollingPolicy>

        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 业务 business- 1 日志 -->
    <appender name="bs1_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/api.log</File>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/api.log.%d</fileNamePattern>
            <maxHistory>12</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- additivity 属性为 false,示意此 logger 的打印信息不再向下级传递 (注:该值默认为 true,logger 的日志信息会顺次向下级传递,最高级 logger 为 root,如果不加则至多打印 2 次,自身一次,root 一次)-->
    <logger name="bs1" additivity="false" level="INFO">
        <appender-ref ref="bs1_Appender"/>
    </logger>
    <!--info 和 error 离开打印,注:ERROR > WARN > INFO > DEBUG > TRACE-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYS_INFO"/>
        <appender-ref ref="SYS_ERROR"/>
    </root>

</configuration>

在 application.yml 文件中增加日志目录

logging.path=/media/data/tomcatlogs

在应用类中调用对应业务名字的 logger


@Component
public class AService {private final Logger log = LoggerFactory.getLogger("bs1");
    
    public void fun1(){log.info("{}","msg");
     
    }
    
    }

其中 bs1 就是业务的名字

正文完
 0