logback-spring.xml实战配置

示例如下:

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

<configuration scan="true" scanPeriod="10 seconds" debug="true">

    <!--日志文件存储路径-->
    <property name="log_path" value="./logs"></property>
    <!-- 编码格式设置 -->
    <property name="encoding" value="UTF-8" />

    <!--获取TID-->
    <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter" />
    <!--获取当前主机IP地址-->
    <define name="ip" class="com.**.config.LogIpPropertyConfig"></define>

    <!--定义日志格式-->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="log_pattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][{%thread}][TID: %tid][%logger#%M %L]LINECONTENT:%m%n"></property>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <!--<append>true</append>-->
        <encoder charset="UTF-8">
            <!-- 输出日志记录格式 -->
            <pattern>${log_pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <!-- 输出日志到文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 日志输出格式 -->
            <charset>${encoding}</charset>
            <pattern>${log_pattern}</pattern>
        </encoder>

        <!--<file>./logs</file>-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 输出日志文件的名 -->
            <fileNamePattern>${log_path}/${ip}-iac-web-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 保存30天的日志 -->
            <maxHistory>30</maxHistory>
            <!--单个日志文件最多50M-->
            <maxFileSize>50MB</maxFileSize>
            <!--最大不能超过2GB-->
            <totalSizeCap>2GB</totalSizeCap>
            <!--启动时执行清除过期日志-->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- 输出日志到文件 -->
    <appender name="REDIS_MASTER" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 日志输出格式 -->
            <charset>${encoding}</charset>
            <pattern>${log_pattern}</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 输出日志文件的名 -->
            <fileNamePattern>${log_path}/${ip}-iac-redis-%d{yyyy-MM}.%i.log</fileNamePattern>
            <!-- 保存30天的日志 -->
            <maxHistory>30</maxHistory>
            <!--单个日志文件最多50M-->
            <maxFileSize>50MB</maxFileSize>
            <!--最大不能超过2GB-->
            <totalSizeCap>2GB</totalSizeCap>
            <!--启动时执行清除过期日志-->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- root节点,用来指定最基础的日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <!--logger节点,可选节点,用来具体指明包的日志输出级别,它将会覆盖root的输出级别,name 属性表示匹配的logger类型前缀-->
    <!--logger中有一个additivity属性,作用在于 children-logger是否使用 rootLogger配置的appender进行输出-->
    <!--false:表示只用当前logger的appender-ref。true:表示当前logger的appender-ref和root Logger的appender-ref都有效。-->
    <logger name="com.**.core.redis" level="DEBUG" additivity="false">
        <appender-ref ref="REDIS_MASTER"/>
    </logger>
    <logger name="org.springframework" level="WARN"></logger>
    <logger name="org.mybatis" level="DEBUG"></logger>

</configuration>

 

获取当前主机IP地址:

自定义类并继承 ch.qos.logback.core.PropertyDefinerBase 类,重写 getPropertyValue()方法:

/**
 * @author huangdh
 * @version 1.0
 * @description:
 * @date 2022-10-09 15:16
 */
public class LogIpPropertyConfig extends PropertyDefinerBase {

    private static final Logger logger = LoggerFactory.getLogger(LogIpPropertyConfig.class);

    private static String ip;

    static {
        try {
            ip = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            logger.error("获取日志IP地址异常",e);
            ip = null;
        }
    }
    @Override
    public String getPropertyValue() {
        return ip;
    }
}

 

posted @ 2022-10-11 08:57  BlogMemory  阅读(1749)  评论(0编辑  收藏  举报