首页 > 其他分享 >logback-spring.xml实战配置

logback-spring.xml实战配置

时间:2022-10-11 09:14:44浏览次数:54  
标签:xml log spring static logback ip pattern true

示例如下:

<?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;
    }
}

 

标签:xml,log,spring,static,logback,ip,pattern,true
From: https://www.cnblogs.com/huangdh/p/16778072.html

相关文章

  • logback.xml和logback-spring.xml的区别
    logback和logback-spring.xml都可以用来配置logback,但是2者的加载顺序是不一样的。logback.xml—>application.properties—>logback-spring.xml. logback.xml加载早于......
  • logback简介及logback.xml配置详解
    一、logback的介绍Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。它当前分为下面下个模块:logback-core:其它两个模块的基础模块log......
  • Spring JPA 如何进行无参数查询布尔类型
    根据官方的文档说明:SpringDataJPA-ReferenceDocumentation  可以在查询的参数后面添加True或False来进行查询。例如,如果需要对下面的参数进行查询:True......
  • 解决spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver报红
    解决spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver无法引用解决办法:点击查看代码<!--mysql--><dependency><groupId>mysq......
  • Spring-04:持久化数据,了解SpringDataJPA和Mybatis
    1Javaweb阶段的方式在之前的Javaweb项目中,我们持久化数据的方式还是直接使用JDBC参考:Javaweb总结-目前开发Javaweb的套路梳理https://www.cnblogs.com/fancy2022/p/16......
  • XML和JSON数据格式
    目录​​XML​​​​DTD(文档类型定义)​​​​DTD实体​​​​JSON​​​​使用python解析JSON数据​​​​XML和JSON的区别 ​​​​XML的优缺点​​​​JSON的优缺点​......
  • Spring事务的三种实现方式
    spring中事务的三种实现方式1.编程式事务管理过时了,一般不用,略2.声明式事务管理2.1基于TransactionProxyFactoryBean的声明式事务管理1创建异常类publicclassMyException......
  • 异步访问技术Ajax(XMLHttpRequest)
    目录​​AJAX​​​​XMLHttpRequest ​​​​Ajax向服务器发送请求​​​​Ajax接收服务器响应​​​​AJAX-onreadystatechange事件 ​​​​使用Callback函数​​......
  • SpringBoot-JavaMailSender接口实战
    相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送,在SpringBoot的Starter模块中也为此提供了自动化配置。下面通过实例来讲解如......
  • spring day02 xml开发总结以及注解开发总结
    第三方资源配置管理管理DataSource连接池对象【第一步】添加Druid连接池依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><......