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

文章目录

    • 背景
    • 思路
    • 实现前知识准备
      • Logback 的appender标签
      • Logback 的logger标签
    • 具体实现

背景

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

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

思路

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

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

实现前知识准备

Logback 的appender标签

在 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 的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>

你可能感兴趣的:(日志框架,logback,oracle,数据库)