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

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

logback.xml

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

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

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

<appender>标签

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

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

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

举个例子:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 日志输出格式 -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

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

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

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

  • 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。
  • 子标签 <appender-ref>:此标签用于将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

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <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"/>
    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>-->
            <charset>utf8</charset>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <!-- 所有级别日志 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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <!-- warn日志 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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印info日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- debug日志 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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印debug日志 -->
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error日志 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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印error日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn日志 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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印warn日志 -->
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <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.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <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>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值