<!-- 设置日志文件的基础目录 -->
<property name="LOG_DIR" value="/opt/logs/mqtt-app"/>
<property name="log.maxHistory" value="15"/>
<property name="log.maxFileSize" value="30MB"/>
<!-- 定义控制台日志输出的 Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<!-- 使用 PatternLayout 定义控制台输出格式 -->
<pattern>
%cyan(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %yellow(%logger{36}) - %msg%n
</pattern>
</encoder>
</appender>
<!-- 定义 DEBUG 等级日志的滚动文件 Appender -->
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/debug/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/debug/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 定义 ERROR 等级日志的滚动文件 Appender -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/error/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 定义 WARN 等级日志的滚动文件 Appender -->
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/warn/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 定义 INFO 等级日志的滚动文件 Appender -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/info/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${log.maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 配置 DEBUG 等级日志的 Logger -->
<logger name="com.example" level="DEBUG" additivity="false">
<appender-ref ref="DEBUG_FILE"/>
</logger>
<!-- 配置 ERROR 等级日志的 Logger -->
<logger name="com.example" level="ERROR" additivity="false">
<appender-ref ref="ERROR_FILE"/>
</logger>
<!-- 配置 WARN 等级日志的 Logger -->
<logger name="com.example" level="WARN" additivity="false">
<appender-ref ref="WARN_FILE"/>
</logger>
<!-- 配置 INFO 等级日志的 Logger -->
<logger name="com.example" level="INFO" additivity="false">
<appender-ref ref="INFO_FILE"/>
</logger>
<!-- 配置根 Logger,默认的日志输出级别和 Appender -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
<appender-ref ref="DEBUG_FILE"/>
</root>
这是一个使用 Logback 作为日志框架的配置文件,用于定义不同级别的日志输出和日志文件滚动策略。以下是对这个配置文件的分析:
-
日志文件基础目录:
<property name="LOG_DIR" value="/opt/logs/mqtt-app"/>
- 定义了日志文件的基础目录,所有的日志文件都将保存在这个目录下。
-
日志文件滚动策略配置:
<property name="log.maxHistory" value="15"/>
<property name="log.maxFileSize" value="30MB"/>
- 设置了日志文件的最大历史备份数量和单个日志文件的最大大小。
-
控制台日志输出:
- 定义了一个名为
CONSOLE
的日志 Appender,用于将日志输出到控制台。 - 使用了
ch.qos.logback.core.ConsoleAppender
类。 - 使用了 UTF-8 编码。
- 定义了控制台输出的格式,包括日期时间、线程名、日志级别、Logger 名称和日志消息。
- 定义了一个名为
-
不同级别的滚动文件 Appender:
- 分别定义了
DEBUG_FILE
、ERROR_FILE
、WARN_FILE
和INFO_FILE
四个滚动文件的 Appender,用于将不同级别的日志输出到文件中。 - 每个 Appender 配置了文件路径、滚动策略、编码、格式和级别过滤器。
- 分别定义了
-
Logger 配置:
- 配置了四个 Logger,分别为
com.example
,并分别设置了不同的日志级别和 Appender 引用。 additivity="false"
表示不传播日志消息到父 Logger。
- 配置了四个 Logger,分别为
-
根 Logger 配置:
- 配置了根 Logger,设置了默认的日志输出级别为 INFO,以及引用了不同级别的 Appender。
通过这个配置文件,你可以实现将不同级别的日志输出到不同的日志文件中,并使用日志文件滚动策略来管理日志文件的数量和大小。如果需要对不同的包或类设置不同的日志级别,可以通过添加类似的 Logger 配置来实现。