公司要将项目的日志分为不同的类别,如所有日志、请求日志、错误日志和 SQL 日志。
目前使用的日志框架为slf4j + logback。
要将日志分为不同的类别,可以使用 Logback 的日志级别和过滤器来实现。
然后,可以针对特定的日志类型设置不同的日志级别和过滤器。
在 Logback 中,
用于定义日志输出的目标。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%npattern>
encoder>
appender>
FileAppender
:将日志输出到文件。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/path/to/logfile.logfile>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
RollingFileAppender
:将日志输出到滚动的文件,可以按照一定规则(如时间、文件大小)拆分日志文件。
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/path/to/logfile.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/path/to/logfile-%d{yyyy-MM-dd}.logfileNamePattern>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
这些只是一些常用的 appender 类型,Logback 还提供了更多的 appender,如 SyslogAppender、SMTPAppender 等,可以根据实际需求选择适合的 appender。
在 Logback 的配置文件中,可以通过
引用相应的 appender,并将其关联到特定的 logger 上,以实现日志的输出目标配置。
Logback 的
标签用于定义日志记录器,可以根据包名或类名来区分不同的日志记录器,并设置相应的日志级别和输出目标。
以下是一个示例的
标签的配置:
<configuration>
<logger name="com.example.package" level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
logger>
configuration>
在上述示例中,
标签的 name
属性指定了要匹配的包名或类名(通常使用包名),level
属性指定了日志级别。
可以在
标签内部使用
标签来引用定义好的
,以将日志记录到相应的输出目标(如控制台、文件等)。
注意,Logback 会按照 Logger 配置的顺序进行匹配,因此在配置文件中,一般将高优先级的 Logger 放在前面。
可以使用通配符来匹配多个包名或类名,例如:
<logger name="com.example.package.*" level="DEBUG">
logger>
上述配置将匹配以 “com.example.package.” 开头的所有类。
此外,还可以配置
的其他属性,如 additivity
属性用于指定是否将日志事件传递给更高层次的 Logger。
总结来说,
标签用于定义不同的日志记录器,并通过设置级别和输出目标来控制日志的记录行为。
<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 name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}pattern>
encoder>
<file>${LOG_FILE}.logfile>
<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>
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}pattern>
encoder>
<file>${LOG_FILE_ERROR}.logfile>
<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>ERRORlevel>
filter>
appender>
<appender name="FILE_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}pattern>
encoder>
<file>${LOG_FILE_REQUEST}.logfile>
<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>
<logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE_REQUEST" />
logger>
<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>
<appender name="FILE_SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}pattern>
encoder>
<file>${LOG_FILE_SQL}.logfile>
<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>