logback/log4j基本配置和标签详解

什么是logback

logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小,包含了许多独特并且有用的特性。

logback.xml

首先直接上配置,我在项目过程中发现一些同时遇到需要logback文件的时候就去其他项目copy一个,改吧改吧名字就直接完事。完全不了解其中标签的含义以及需要单独将日志打入一个文件怎么使用都不清楚,如果你需要一个logback可以把底下的copy走,但是我建议看看后续的标签含义。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 每隔20S扫描1次配置文件,如果配置文件被修改自动加载 -->
<configuration scan="true" scanPeriod="20 seconds">
    <!-- Windows操作系统 -->
    <if condition='property("os.name").contains("Windows")'>
        <then>
            <property name="LOG_FILE_ROOT" value="D://opt/applog/logs"/>
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>
        </then>
    </if>
    <!-- MAC操作系统 -->
    <if condition='property("os.name").toUpperCase().contains("MAC")'>
        <then>
            <property name="LOG_FILE_ROOT" value=".log/logs" />
            <!-- 控制台输出 -->
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>
        </then>
    </if>
    <!-- Linux操作系统 -->
    <if condition='property("os.name").contains("Linux")'>
        <then>
            <property name="LOG_FILE_ROOT" value="/opt/applog/-logs"/>
            <!-- 控制台输出 -->
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>

        </then>
    </if>


    <springProfile name="dev">
        <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_FILE_ROOT}/web-debug.log</file>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE_ROOT}/web-debug-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <maxFileSize>100MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
            </rollingPolicy>
            <encoder>
                <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-info.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>20</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-warn.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-warn-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-error.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

     <!-- root Logger 分环境进行配置,本地环境需要用的DEBUG -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="DEBUG"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>

    <springProfile name="pro">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>

</configuration>

<root>标签

在 Logback 日志框架中,<root level> 标签用于定义根日志级别。根日志级别是指所有日志记录器的默认级别,如果没有为特定的日志记录器指定级别,则会使用根日志级别。

根日志级别通过<root> 元素来表示,其语法如下:

<root level="级别">
    <!-- appender 配置 -->
</root>

在这里插入图片描述

在这里,level 属性用于指定根日志级别。根日志级别可以是以下之一:TRACE、DEBUG、INFO、WARN、ERROR 或 OFF。级别由低到高,TRACE 是最详细的级别,而 OFF 表示禁用日志记录。

当一个日志事件发送到 Logback 时,它将首先检查根日志级别。如果事件的级别高于或等于根日志级别,那么该事件将被记录下来。如果事件的级别低于根日志级别,那么它将被忽略。

因此,通过设置 <root level> 标签,您可以为整个应用程序指定默认的日志记录级别。您还可以在其他地方针对特定的日志记录器设置级别,以覆盖根日志级别的默认设置。

<appender-ref>标签

<appender-ref> 标签用于将日志事件附加器(appender)与特定的日志记录器相关联。在 Logback 配置文件中,可以使用 <appender-ref> 标签将一个或多个附加器与日志记录器关联起来。

<appender-ref> 元素的语法如下:

<appender-ref ref="附加器名称" />

在这里,ref 属性用于指定要关联的附加器的名称。附加器名称应与配置文件中定义的附加器的名称匹配。

通过使用 <appender-ref> 标签,您可以将一个或多个附加器(例如文件附加器、控制台附加器等)与日志记录器相关联。这意味着当日志事件到达该日志记录器时,它将被传递给与之关联的附加器进行处理。这样可以根据需要将日志事件输出到不同的目标,例如文件、控制台、远程服务器等。

以下是一个示例,展示如何使用 <appender-ref> 标签将附加器与日志记录器关联:

<configuration>
    <!-- 定义附加器 -->
    <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 附加器配置 -->
    </appender>
    
    <!-- 定义日志记录器 -->
    <logger name="com.example.MyClass" level="DEBUG">
        <!-- 关联附加器 -->
        <appender-ref ref="ConsoleAppender" />
    </logger>
</configuration>

在上面的示例中,ConsoleAppender 是一个控制台附加器,它被定义在 <appender> 元素中。然后,通过使用 <appender-ref> 标签,将该附加器与名为 com.example.MyClass 的日志记录器关联起来。这意味着 com.example.MyClass 日志记录器的日志事件将被发送到 ConsoleAppender 进行处理。

通过适当配置 <appender-ref> 标签,您可以将多个附加器关联到同一个日志记录器,或者将同一个附加器关联到多个日志记录器,以满足您的日志输出需求。

简单的说:上述的示例就可以为我们输出日志到自定义的文件夹中。

输出日志到自定义文件

在开发的过程中,难免会要在info日志和error日志中排查问题,那么一个应用部署在测试环境或者uat环境的时候,会产生大量的日志在日志文件中,如果我们需要查询相关的日志记录通常linux会使用grep来进行搜索来满足需求。如果你的功能会被大量调用,并且需要详细记录前后流转的参数;又或者在测试阶段需要把用户所有的权限和角色在日志文件中打印观察。此时你可能需要把你这部分的功能开发日志打印到一个单独的日志文件中。

<!-- root Logger 分环境进行配置,本地环境需要用的DEBUG -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="DEBUG"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>

    <springProfile name="pro">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>

根据springProfile标签,我们可以分环境配置,dev环境的root级别改为DEBUG级别,pro环境使用INFO级别。所以如果你需要观察用户权限问题打的日志可以使用log.debug()来记录在debug的日志文件中。

那么如果想要新建一个日志文件(非info、error、warn、debug)的日志,例如支付相关的日志都放入paylog文件中。不管是DEBUG INFO WARN ERROR都直接放一起,那么我们需要自定义一个附加器appender和一个日志记录器logger。

附加器定义如下:

<appender name="pay" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/qhyu.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/qhyu-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>20</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

在 Logback 的过滤器配置中,<onMatch><onMismatch> 标签用于指定过滤器匹配和不匹配时的行为。它们需要配套使用。

  • <onMatch>:该标签定义了当日志事件与过滤器匹配时的操作。它有以下参数:

    • ACCEPT:表示接受(通过)匹配的日志事件,将其传递给后续的附加器或日志记录器进行处理。

    • NEUTRAL:表示中立,不对匹配的日志事件进行特殊处理,继续按照日志处理流程进行传递。

    • DENY:表示拒绝(拦截)匹配的日志事件,不将其传递给后续的附加器或日志记录器。

  • <onMismatch>:该标签定义了当日志事件与过滤器不匹配时的操作。它有以下参数:

  • ACCEPT:表示接受(通过)不匹配的日志事件,将其传递给后续的附加器或日志记录器进行处理。

  • NEUTRAL:表示中立,不对不匹配的日志事件进行特殊处理,继续按照日志处理流程进行传递。

  • DENY:表示拒绝(拦截)不匹配的日志事件,不将其传递给后续的附加器或日志记录器。

通常情况下,应该将 <onMatch><onMismatch> 标签配对使用,以明确指定匹配和不匹配时的操作。例如,可以将匹配时的操作设置为 ACCEPT,表示允许通过匹配的日志事件,而将不匹配时的操作设置为 DENY,表示拒绝不匹配的日志事件。

以下是一个示例配置:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

在上述示例中,过滤器的配置指定了当日志事件的级别为 INFO 时,执行匹配操作为 ACCEPT,而当日志事件的级别不是 INFO 时,执行不匹配操作为 DENY。这意味着只有级别为 INFO 的日志事件才会通过过滤器,其他级别的日志事件将被拒绝。

因为我想把所有的日志都打到一个文件中,不区分info error还是warn所以我将四个过滤器放在同一个附加器中,如果你想为这个文件拆分的话可以配合日志记录器一起使用,也就是接下来要说的内容。

日志记录器如下:

<logger name="PAYLOGGER" level="DEBUG" additivity="false">
        <appender-ref ref="pay"/>
  </logger>

在这里插入图片描述

如果使用的是自定义name,那么自己使用的时候需要定义Logger logger = LoggerFactory.getLogger(“PAYLOGGER”);这样可以在任意的类中直接使用。

<logger> 标签用于配置特定包或类的日志记录器。它允许您为特定的包或类设置不同于根日志记录器的日志级别、附加器和其他属性。

<logger> 标签有以下常用的属性:

  • name:指定要配置的包或类的名称。可以使用包名或类的全限定名。例如,com.swcares.eupsi.airplaneSale

  • level:设置该日志记录器的日志级别。可以是 TRACEDEBUGINFOWARNERROR 等级别。例如,INFO

  • additivity:指定是否继承父级日志记录器的附加器。如果设置为 true,则该日志记录器将继承父级日志记录器的附加器;如果设置为 false,则该日志记录器将仅使用自己配置的附加器。默认值为 true

除了上述常用属性外,<logger> 标签还可以配置其他属性,如 <appender-ref> 标签引用的附加器、<filter> 标签设置的过滤器等。这些属性可以根据您的需求进行配置和调整。

以下是一个示例 <logger> 标签的配置:

<logger name="com.qhyu.pay.modules.test" level="INFO" additivity="false">
    <appender-ref ref="SOME_APPENDER"/>
</logger>

在上述示例中,<logger> 标签配置了名为 com.qhyu.pay.modules.test 的日志记录器,将日志级别设置为 INFO,并指定了一个名为 SOME_APPENDER 的附加器。此外,additivity 属性被设置为 false,表示该日志记录器不会继承父级日志记录器的附加器。

这种配置就是可以在这个类中直接使用,不需要定义Logger了。

在这里插入图片描述

通过使用 <logger> 标签,您可以对特定的包或类进行精细化的日志配置,以满足不同部分的日志记录需求。

完整xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 每隔20S扫描1次配置文件,如果配置文件被修改自动加载 -->
<configuration scan="true" scanPeriod="20 seconds">
    <!-- Windows操作系统 -->
    <if condition='property("os.name").contains("Windows")'>
        <then>
            <property name="LOG_FILE_ROOT" value="D://opt/applog/logs"/>
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>
        </then>
    </if>
    <!-- MAC操作系统 -->
    <if condition='property("os.name").toUpperCase().contains("MAC")'>
        <then>
            <property name="LOG_FILE_ROOT" value=".log/logs"/>
            <!-- 控制台输出 -->
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>
        </then>
    </if>
    <!-- Linux操作系统 -->
    <if condition='property("os.name").contains("Linux")'>
        <then>
            <property name="LOG_FILE_ROOT" value="/opt/applog/-logs"/>
            <!-- 控制台输出 -->
            <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
                </encoder>
            </appender>

        </then>
    </if>


    <springProfile name="dev">
        <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_FILE_ROOT}/web-debug.log</file>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE_ROOT}/web-debug-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <maxFileSize>100MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
            </rollingPolicy>
            <encoder>
                <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-info.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>20</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-warn.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-warn-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/web-error.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/web-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>


	<!-- 时间滚动输出 所有级别的日志到预计的文件中 -->
    <appender name="pay" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE_ROOT}/pay.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ROOT}/pay-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>20</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}[%level][%thread][%logger.java:%line] - %msg%n</pattern>
        </encoder>
    </appender>

     <!--<logger name="com.qhyu.pay.modules.test" level="DEBUG" additivity="false">
        <appender-ref ref="pay"/>
    </logger>-->
    
    <logger name="PAYLOGGER" level="DEBUG" additivity="false">
        <appender-ref ref="pay"/>
    </logger>

    <!-- root Logger 分环境进行配置,本地环境需要用的DEBUG -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="DEBUG"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>

    <springProfile name="pro">
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
        </root>
    </springProfile>
</configuration>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Logback是一个灵活、小巧且高度模块化的日志框架。它能够完全替代log4j,并比log4j更快、更安全。相比于原先的log4j,它优化了文件锁和大规模同时记录日志的高并发,能够更加稳定地运行。此外,Logback的开销比其他日志框架更小,性能表现也更好。 Logback配置文件包含了多个部分,如基础配置、Appender、Logger和Filter。其中, 基础配置部分设置全局配置,如日志等级、控制台的输出等。 Appender部分负责将日志写入具体的目的地,如文件、控制台、数据库等。 Logger部分指定日志的类型。它分为根Logger和普通Logger。根Logger即所有Logger的父Logger。在Logger中可以进行日志级别的设置,如Info、Warn、Error等级别的日志。 Filter部分指定日志筛选器。它根据用户自定义逻辑对不同的日志进行过滤。 配置Logback的时候,需要指定三个文件,分别是logback.xml、logback.groovy、和logback-test.xml。其中,logback-groovy可以替代logback.xml来进行xml文件外的更灵活管理。logback-test.xml则用于测试环境配置。一个完整的Logback配置文件应该包含这几个部分,才能保证结果正确。 总之,Logback是一个非常强大的日志框架,它在高性能、安全性、配置灵活性等多方面都有着出色的表现。无论是在企业级开发,还是在个人开发中,都是非常值得使用的一个框架。但在使用时也需要注意配置的灵活性和合理性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code A Better Life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值