Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。
官方网站:https://logback.qos.ch/index.html
Logback主要分为三个模块:
添加pom.xml文件
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.25version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
添加测试类
public class LogbackService {
//定义日志对象
public final static Logger LOGGER = LoggerFactory.getLogger(LogbackService.class);
@Test
public void testSlf4j(){ //打印日志信息
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
logback会依次读取以下类型配置文件:
logback组件之间的关系
Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也 可以定义日志类型、级别。
Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中
<configuration>
<property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level %msg%n"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<root level="ALL">
<appender-ref ref="console"/>
root>
configuration>
pattern
在ch.qos.logback.classic.PatternLayout中可以看到相关的字符替代,如:
格式修饰符
-+最小宽度,用十进制表示
.+最大宽度,十进制表示
.后面加减号-在加数字,表示从尾部截断。| Format modifier | Logger name | Result |
|---|---|---|
| [%20.20logger] | main.Name | [ main.Name] |
| [%-20.20logger] | main.Name | [main.Name ] |
| [%10.10logger] | main.foo.foo.bar.Name | [o.bar.Name] |
| [%10.-10logger] | main.foo.foo.bar.Name | [main.foo.f] |
Appender
Appender:设置日志信息的取向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender:控制台ch.qos.logback.core.rolling.RollingFileAppender:文件大小到达指定大小的时候生成一个新的文件ch.qos.logback.core.FileAppender:文件root
root:用来设置某一个包或者具体的某一个类的日志打印级别、以及指定。
输出到log文件
<configuration>
<property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level %msg%n"/>
<property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
<file>${log_dir}/logback.logfile>
appender>
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
root>
configuration>
输出到html文件
<configuration>
<property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level %msg%n"/>
<property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%level%d{yyyy-MM-dd HH:mm:ss}%c%M%L%thread%mpattern>
layout>
encoder>
<file>${log_dir}/logback.htmlfile>
appender>
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="htmlFile"/>
root>
configuration>
<configuration>
<property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level %msg%n"/>
<property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
<file>${log_dir}/roll_logback.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
<maxFileSize>20kbmaxFileSize>
rollingPolicy>
appender>
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="rollFile"/>
root>
configuration>
<configuration>
<property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level %msg%n"/>
<property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.errtarget>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
<file>${log_dir}/roll_logback.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
<maxFileSize>20kbmaxFileSize>
rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>errorlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollFile"/>
appender>
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="async"/>
root>
<logger name="com.machoul" level="debug" additivity="false">
<appender-ref ref="rollFile"/>
logger>
configuration>
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。
官方配置的地址:https://logback.qos.ch/access.html#configuration
logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下$TOMCAT_HOME/conf/server.xml中的Host元素中添加:<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
<configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
<property name="LOG_DIR" value="${catalina.base}/logs"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/access.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>access.%d{yyyy-MM-dd}.log.zipfileNamePattern>
rollingPolicy>
<encoder>
<pattern>combinedpattern>
encoder>
appender>
<appender-ref ref="FILE"/>
configuration>