logback是slf4j的原生实现,所以效率是比较高,这里在ssm-demo中集成进来logback,步骤如下:
1、maven集成
在pom.xml文件里面添加如下配置:
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 用户web环境查看access日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
2、配置文件
在src/main/resources目录下,添加logback.xml,内容如下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3、集成tomcat配置
3.1、拷贝logback-core-1.2.3.jar、logback-access-1.2.3.jar文件到$TOMCAT_HOME/lib/目录下
3.2、在$TOMCAT_HOME/conf/目录下,添加logback-access.xml文件,内容如下:
<configuration>
<!-- always a good activate OnConsoleStatusListener -->
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%h %l %u %user %date "%r" %s %b</pattern>
</encoder>
</appender>
<appender-ref ref="STDOUT" />
</configuration>
这个文件, 也可以放到项目的src/main/resources目录下
3.3、在web.xml文件下, 添加servlet配置, 内容如下:
<servlet>
<servlet-name>AccessViewStatusMessages</servlet-name>
<servlet-class>ch.qos.logback.access.ViewStatusMessagesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AccessViewStatusMessages</servlet-name>
<url-pattern>/lbAccessStatus</url-pattern>
</servlet-mapping>
3.4、运行项目tomcat,结果如下:
可以看到access日志了
4、集成jetty配置
不写了
5、logback流程图
日志记录流程图
日志等级level
5.1、最佳实践
5.1.1、记录日志不要用➕号各种类型,采用占位符(参数化日志)的形式,举例如下:
//不推荐 logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
//推荐 logger.debug("The entry is {}.", entry);
5.1.2、记录日志前, 判断下日志的level是否打开,举例如下:
if(logger.isDebugEnabled()) { logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i])); }
5.1.3、记录数组, 可以这样, 如下:
Object[] paramArray = {newVal, below, above}; logger.debug("Value {} was inserted between {} and {}.", paramArray);
5.1.4、关闭日志
<root level="off"> <appender-ref ref="STDOUT" /> </root>
5.1.5、不要在循环中记录日志
5.1.6、日志耗费时间的三个地方:即使日志关闭,也会耗费时间;决定是否需要记录日志;格式化日志成字符串、发结果发给appender的目的地。
6、logback日志配置文件查找顺序
在classpath下,查找logback-test.xml
在classpath下,查找logback.groovy
在classpath下,查找logback.xml
查找com.qos.logback.classic.spi.Configurator的实现类型, SPI方式,
META-INF\services\ch.qos.logback.classic.spi.Configurator
采用logback的默认实现BasicConfigurator
,只在console记录日志
7、Appender类图
代码地址:https://gitee.com/zyx870805/ssm-demo.git