logback 不同类的日志打印在不同的文件中

在Spring Boot中,您可以使用Logback为不同的类配置不同的日志文件。以下是一个基本的 logback.xml 配置示例,展示了如何为两个类 com.example.Class1com.example.Class2 配置不同的日志文件。

logback.xml


<configuration>
    <appender name="CLASS1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/class1.logfile>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>

    <appender name="CLASS2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/class2.logfile>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>

    <logger name="com.example.Class1" level="info" additivity="false">
        <appender-ref ref="CLASS1_FILE" />
    logger>

    <logger name="com.example.Class2" level="info" additivity="false">
        <appender-ref ref="CLASS2_FILE" />
    logger>

    <root level="error">
        <appender-ref ref="CLASS1_FILE" />
        <appender-ref ref="CLASS2_FILE" />
    root>
configuration>

这个配置定义了两个 appender,分别命名为 “CLASS1_FILE” 和 “CLASS2_FILE”。每个appender会将日志输出到指定的文件中,这里分别是 logs/class1.loglogs/class2.log

然后,定义了两个 logger,分别对应 com.example.Class1com.example.Class2 类。这两个 logger 的日志级别都设置为 “info”,并将日志输出到对应的 appender 中。additivity="false" 的设置是为了防止日志被父 logger(在这里是 root logger)也处理。

最后,root logger 设置为只处理 “error” 级别以上的日志,它的日志输出到两个 appender 中。

以上配置示例可以根据你的具体需求进行调整,例如你可以修改日志级别、日志模式、日志文件的路径等。

标签

标签在Logback配置文件中定义了日志输出的目的地和格式。换句话说,它确定了日志消息的输出方式和地点。例如,这可能是一个文件,一个数据库,一个控制台窗口等等。

每个 标签包含以下主要部分:

  • name属性:此属性定义了appender的名称,你可以随意命名,但需要确保在配置文件中唯一。
  • class属性:此属性定义了appender的类型。例如,ch.qos.logback.core.ConsoleAppender 是将日志发送到控制台,ch.qos.logback.core.rolling.RollingFileAppender 是将日志发送到文件,并提供滚动特性。
  • 子标签 :这些标签定义了日志输出的格式。PatternLayoutEncoderPatternLayout 可以让你自定义日志的格式。

举个例子:

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

在这个例子中,名为 “STDOUT” 的appender是 ConsoleAppender 类型,这意味着它将日志输出到控制台。 标签定义了日志的输出格式。%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 表示日志包含时间戳、线程名、日志级别、logger名和消息内容。

标签在Logback配置文件中定义了一个logger实例,这个实例会拦截、处理日志消息,并将日志传递到适当的appender中进行记录。

每个 标签通常包含以下部分:

  • name属性:此属性定义了logger的名称,通常与你想要记录日志的类或包的名称匹配。例如,如果你有一个名为 com.example.MyClass 的类,并且你想要特别记录这个类的日志,那么你可以创建一个名称为 com.example.MyClass 的logger。
  • level属性:此属性定义了该logger接受的最低日志级别。可选的级别有 TRACE, DEBUG, INFO, WARN, ERROR, OFF。例如,如果设置为INFO,那么该logger将只记录INFO、WARN、ERROR级别的日志。
  • additivity属性:此属性决定日志是否应传递给父logger进行处理。如果设为 false,则日志仅由此logger处理,不会被传递到父logger;如果设为 true 或不设置,日志既由此logger处理,也会被传递到父logger。
  • 子标签 :此标签用于将logger与appender关联起来。appender的引用名称必须与之前定义的appender的名称匹配。

例如:

<logger name="com.example.MyClass" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
logger>

这个示例定义了一个名为 com.example.MyClass 的logger,其日志级别设置为 info,并且不会把日志传递给父logger。日志将被发送到名为 STDOUT 的appender中进行处理。

综合logback.xml


<configuration debug="false">
    
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
    
    <property name="LOG_HOME" value="E:/code/logs/springboot_temple" />
    <property name="LOG_NAME_BEGIN" value="springboot_temple" />
    <property name="moduleName" value="springboot-temple" />
    <property name="maxFileSize" value="100MB" />
    <property name="totalSizeCap" value="2GB" />
    <property name="MaxHistory" value="30" />
    
    <property name="COLOUR_LOG_PATTERN"
              value="%magenta(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([TRACE_ID:%X{TRACE_ID}])  %blue([%thread]) %highlight(%-5level) %green(%logger) - %msg%n"/>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}pattern>-->
            <charset>utf8charset>
        encoder>
    appender>
    
    
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-all-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
    appender>


    
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-info-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>
    
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-debug-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUGlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-error-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-warn-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARNlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>




    <appender name="CLASS1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class1-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
    appender>


    <appender name="CLASS2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class2-%d{yyyy-MM-dd}_%i.logfileNamePattern>
            
            <maxFileSize>${maxFileSize}maxFileSize>
            
            <totalSizeCap>${totalSizeCap}totalSizeCap>
            
            <MaxHistory>${MaxHistory}MaxHistory>
        rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            
            <pattern>${COLOUR_LOG_PATTERN}pattern>
        encoder>
    appender>


    <logger name="com.example.demo_wwxx_dep.service.ClassLog1" level="info" additivity="true">
        <appender-ref ref="CLASS1_FILE" />
    logger>

    <logger name="com.example.demo_wwxx_dep.service.ClassLog2" level="info" additivity="false">
        <appender-ref ref="CLASS2_FILE" />
    logger>



    
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="ERROR" />
        <appender-ref ref="DEBUG" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
    root>
configuration>

你可能感兴趣的:(logback,java,spring)