logback日志按照类型输出到不同文件

背景

公司要将项目的日志分为不同的类别,如所有日志、请求日志、错误日志和 SQL 日志。

目前使用的日志框架为slf4j + logback。

思路

要将日志分为不同的类别,可以使用 Logback 的日志级别和过滤器来实现。

然后,可以针对特定的日志类型设置不同的日志级别和过滤器。

实现前知识准备

Logback 的appender标签

在 Logback 中,<appender> 用于定义日志输出的目标。Logback 提供了多种类型的 appender,可以将日志记录输出到不同的目标,如控制台、文件、数据库等。

以下是 Logback 常用的 appender 类型:

ConsoleAppender:将日志输出到控制台。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">     
	<encoder>
   		<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
	 </encoder>
 </appender>

FileAppender:将日志输出到文件。

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
	<file>/path/to/logfile.log</file>    
 	<encoder> 
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
 	</encoder>
 </appender>

RollingFileAppender:将日志输出到滚动的文件,可以按照一定规则(如时间、文件大小)拆分日志文件。

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">     <file>/path/to/logfile.log</file>
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		<fileNamePattern>/path/to/logfile-%d{yyyy-MM-dd}.log</fileNamePattern>   
		<maxHistory>30</maxHistory>
	</rollingPolicy>
	<encoder>
		<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
	</encoder> 
</appender>

这些只是一些常用的 appender 类型,Logback 还提供了更多的 appender,如 SyslogAppender、SMTPAppender 等,可以根据实际需求选择适合的 appender。

在 Logback 的配置文件中,可以通过 <appender-ref> 引用相应的 appender,并将其关联到特定的 logger 上,以实现日志的输出目标配置。

Logback 的logger标签

Logback 的 <logger> 标签用于定义日志记录器,可以根据包名或类名来区分不同的日志记录器,并设置相应的日志级别和输出目标。

以下是一个示例的 <logger> 标签的配置:

<configuration> 
    <!-- 其他配置 --> 
      <logger name="com.example.package" level="DEBUG">  
           <appender-ref ref="CONSOLE"/> 
           <appender-ref ref="FILE"/> 
      </logger>   
 <!-- 其他配置 -->
  </configuration>

在上述示例中,<logger> 标签的 name 属性指定了要匹配的包名或类名(通常使用包名),level 属性指定了日志级别。

可以在 <logger> 标签内部使用 <appender-ref> 标签来引用定义好的 <appender>,以将日志记录到相应的输出目标(如控制台、文件等)。

注意,Logback 会按照 Logger 配置的顺序进行匹配,因此在配置文件中,一般将高优先级的 Logger 放在前面。

可以使用通配符来匹配多个包名或类名,例如:

<logger name="com.example.package.*" level="DEBUG">   
  <!-- 配置 -->
 </logger>

上述配置将匹配以 “com.example.package.” 开头的所有类。

此外,还可以配置 <logger> 的其他属性,如 additivity 属性用于指定是否将日志事件传递给更高层次的 Logger。

总结来说,<logger> 标签用于定义不同的日志记录器,并通过设置级别和输出目标来控制日志的记录行为。

具体实现

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志文件目录 -->
    <property name="LOG_PATH" value="logs"/>
    <!-- 日志文件名称 -->
    <property name="LOG_NAME" value="report"/>

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}"/>
    <property name="LOG_FILE_ERROR" value="${LOG_FILE_ERROR:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-error"/>
    <property name="LOG_FILE_REQUEST" value="${LOG_FILE_REQUEST:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-request"/>
    <property name="LOG_FILE_SQL" value="${LOG_FILE_SQL:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-sql"/>
    <property name="LOG_FILE_SUFFIX" value="${LOG_FILE_SUFFIX:-${LOG_NAME_EXTENSION:-gz}}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <!-- 所有日志 Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-14}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- ERROR日志 Appender -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_ERROR}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ERROR}.%d{yyyy-MM-dd}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-14}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!-- 请求日志 Logger -->
    <appender name="FILE_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_REQUEST}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE_REQUEST}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <minIndex>${LOG_FILE_MIN_INDEX:-1}</minIndex>
            <maxIndex>${LOG_FILE_MAX_INDEX:-3}</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 显示请求URL -->
    <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>
    <!-- 显示请求映射Controller -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>
    <!-- 显示请求返回内容 -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>

    <!-- SQL日志 Logger -->
    <appender name="FILE_SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_SQL}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE_SQL}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <minIndex>${LOG_FILE_MIN_INDEX:-1}</minIndex>
            <maxIndex>${LOG_FILE_MAX_INDEX:-3}</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
        </triggeringPolicy>
    </appender>
    <logger name="SQL" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_SQL" />
    </logger>

    <logger name="com.shsnc" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_ERROR" />
    </logger>

    <root level="WARN">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_ERROR" />
    </root>

</configuration>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值