前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot的Slf4j日志功能,实现根据业务不同将日志写进不同的文件

SpringBoot的Slf4j日志功能,实现根据业务不同将日志写进不同的文件

作者头像
一写代码就开心
发布2022-11-16 13:25:52
6750
发布2022-11-16 13:25:52
举报
文章被收录于专栏:java和python

目录

1 需求

我们的项目的业务是比较多多,不同的业务想要生成不同的日志到不同的文件里面,这样就好找信息

2 实现

首先就是要写一个logback.xml的文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--    log日志存放路径 

这个存放路径可以写多个,只要起不同的name就可以
-->
    <springProperty name="LOG_PATH" source="logging.path" defaultValue="./logs"/>
   <property name="zljklog.path" value="logs/jing/"/>




    <!--自定义控制台日志格式-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
        </encoder>
    </appender>
 


    <!--系统INFO级别日志-滚动记录日志-->
    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值-->
        <File>${LOG_PATH}/Main_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.LOG_PATH}/Main_info-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
        </encoder>
    </appender>
 





    <!--系统ERROR级别日志-滚动记录日志-->
    <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/Main_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">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.LOG_PATH}/Main_error-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
 
        <encoder charset="UTF-8">
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
        </encoder>
    </appender>






    <!--业务geServer入口日志-->
    <appender name="geServer_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/geServer入口.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">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.LOG_PATH}/geServer入口-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 





    <!--业务jingServer入口日志-->
    <appender name="jingServer_Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/jingServer入口.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">
            <!--设置滚动文件规则,如果直接使用 %d,默认格式是 yyyy-MM-dd-->
            <fileNamePattern>${log.LOG_PATH}/jingServer入口-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <!--保留5天的日志,5天的压缩文件是可以发现问题并且解决问题的最长时间-->
            <maxHistory>5</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>






    <!-- 下面就是根据业务
这个是必须这样写
-->
    <logger name="jingServer" additivity="false" level="INFO">
        <appender-ref ref="jingServer_Appender"/>
    </logger>
 
    <logger name="geServer" additivity="false" level="INFO">
        <appender-ref ref="geServer_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>
  1. 使用就很简单了如上面我们主要分为3个业务:主业务,geServer入口业务,jingServer入口业务

分别讲解使用:

主业务的使用:就是使用最原始的@Slf4j的注解方式

代码语言:javascript
复制
@Slf4j
@Component
public class AService {
 
    public void fun(){
    
     log.info("{}","主业务日志使用");
     
    }
    
    }

geServer入口业务使用:首先就是不要使用@Slf4j的注解,然后就是在LoggerFactory中获取配置文件中定义的logger的业务名称

代码语言:javascript
复制
@Component
public class AService {
 
    private final Logger log = LoggerFactory.getLogger("geServer");
    
    public void fun1(){
    
     log.info("{}","msg");
     
    }
    
    }

jingServer入口业务使用:同上面的方式

代码语言:javascript
复制
@Component
public class AService {
 
    private final Logger log = LoggerFactory.getLogger("jingServer");
    
    public void fun1(){
    
     log.info("{}","msg");
     
    }
    
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 需求
  • 2 实现
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档