背景
公司要将项目的日志分为不同的类别,如所有日志、请求日志、错误日志和 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。文章来源:https://www.toymoban.com/news/detail-599685.html
总结来说,<logger>
标签用于定义不同的日志记录器,并通过设置级别和输出目标来控制日志的记录行为。文章来源地址https://www.toymoban.com/news/detail-599685.html
具体实现
<?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>
到了这里,关于logback日志按照类型输出到不同文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!