什么是logback
Logback 是一个开源的 Java 日志框架,是 log4j 框架的改进版,具有更快的执行速度、更好的灵活性和更强的功能。下面是 Logback 的用法、配置方法和日志级别。Logback 已经被整合到 Spring 和 Spring Boot 中了。
Logback 的用法
单独使用 Logback 框架,需要在项目的 pom.xml 文件中引入 logback-classic 和 logback-core 两个依赖:
1 2 3 4 5 6 7 8 9 10 11 12
| <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency>
|
在应用程序中,使用 org.slf4j.Logger 接口来输出日志信息,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class MyClass { private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void myMethod() { logger.debug("debug message"); logger.info("info message"); logger.warn("warn message"); logger.error("error message"); } }
|
Logback 的配置方法
Logback 的配置文件可以使用 XML 或者 Groovy 语言编写,可以配置多个 logger,每个 logger 可以指定不同的 appender,从而实现不同的日志输出方式。下面是一个简单的 logback.xml 配置文件的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <?xml version="1.0" encoding="UTF-8"?> <configuration> <contextName>community</contextName> <property name="LOG_PATH" value="E:/HUMEN/logger/data"/> <property name="APPDIR" value="community"/>
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APPDIR}/log_error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>30</maxHistory> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
<appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APPDIR}/log_warn.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>30</maxHistory> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APPDIR}/log_info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>30</maxHistory> </rollingPolicy> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> <charset>utf-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> </appender>
<logger name="com.gallifrey.outcode" level="debug"/>
<root level="info"> <appender-ref ref="FILE_ERROR"/> <appender-ref ref="FILE_WARN"/> <appender-ref ref="FILE_INFO"/> <appender-ref ref="STDOUT"/> </root>
</configuration>
|
其中,configuration 元素是必须的,用于指定配置文件的根元素;appender 元素用于定义输出方式;encoder 元素用于定义日志信息的格式;logger 元素用于指定 logger 的名称、级别和 appender;root 元素用于指定根 logger 的级别和 appender。
Logback 的日志级别
Logback 定义了以下 5 个日志级别,按照严重程度从低到高依次为:
level of request p |
effective level q |
|
|
|
|
|
TRACE |
DEBUG |
INFO |
WARN |
ERROR |
OFF |
|
TRACE |
YES |
NO |
NO |
NO |
NO |
NO |
DEBUG |
YES |
YES |
NO |
NO |
NO |
NO |
INFO |
YES |
YES |
YES |
NO |
NO |
NO |
WARN |
YES |
YES |
YES |
YES |
NO |
NO |
ERROR |
YES |
YES |
YES |
YES |
YES |
NO |
- TRACE:跟踪级别,最低级别,用于记录应用程序中详细的调试信息。
- DEBUG:调试级别,用于记录应用程序的调试信息。
- INFO:信息级别,用于记录应用程序的一般性信息。
- WARN:警告级别,用于记录应用程序的警告信息。
- ERROR:错误级别,用于记录应用程序
参考链接
- Logback Manual (qos.ch)
- Logback 中文文档 - Logback 1.3.0-alpha4 Manual | Docs4dev