三、实际应用
3.1、简单使用logback(无配置文件)
首先引入依赖slf4j-api(方便统一API),接着引入logback-classic模块:
<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies>
其实slf4j-classic中包含了slf4j-api的依赖,但是为了进行日志API的统一管理才单独引入slf4j-api的依赖。(这样想,若是你不导入单独的slf4j-api的依赖,之后更换日志框架也随着对应不同的slf4j-api的依赖引入出现问题)
测试程序:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { //获取Logger实例 public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { LOGGER.error("error"); LOGGER.warn("warn"); LOGGER.info("info"); LOGGER.debug("debug"); LOGGER.trace("trace"); } }
日志等级默认为debug。
3.2、配合配置文件使用logback
新建logback.xml放置在resource目录下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志输出格式: %-5level:日志等级 %d{yyyy-MM-dd HH:mm:ss.SSS}:日期 %c:类的完整名称 %M:method %L:行号 %thread:线程名称 %m或者%msg:信息 %n:换行 --> <!--配置一对键值对--> <property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/> <!-- 配置ConsoleAppender --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- 输出流对象 --> <target>System.err</target> <!-- 日志格式配置 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 引用上面的键值对及输出的格式 --> <pattern>${pattern}</pattern> </encoder> </appender> <!-- 设置root的日志等级为ALL,以及引用上面的name为console的appender --> <root level="ALL"> <!-- 可设置多个appender --> <appender-ref ref="console"/> </root> </configuration>
设置了root的日志等级为ALL,appender引用的是consoleappender,该appender设置了输出流对象以及日志格式配置(自定义日志格式布局,格式也是进行的引用)。
测试程序:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { //获取Logger实例 public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class); public static void main(String[] args) { LOGGER.error("error"); LOGGER.warn("warn"); LOGGER.info("info"); LOGGER.debug("debug"); LOGGER.trace("trace"); } }
运行的内容显示与配置文件中的相同,配置成功。
四、log4j.properties转logback.xml
针对于一些老项目原本使用log4j现在想要使用logback,那么对应的配置文件必然也需要进行重写,不过我们也有简便的方法通过官网提供的转换功能来实现:logback转换页面
我们将想要转换的log4j.propertoes复制到指定的输入栏即可:
转换内容如下:
log4j.properties log4j.rootLogger = trace,file # FileAppender # file为名称 其中属性file:文件路径 encoding:编码 log4j.appender.file = org.apache.log4j.FileAppender log4j.appender.file.file = C:/Users/93997/Desktop/projectexers/logs/log.txt log4j.appender.file.encoding = UTF-8 # 设置自定义布局(自定义输出格式) log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern= [%-5p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n
logback.xml <?xml version="1.0" encoding="UTF-8"?> <!-- For assistance related to logback-translator or configuration --> <!-- files in general, please contact the logback user mailing list --> <!-- at http://www.qos.ch/mailman/listinfo/logback-user --> <!-- --> <!-- For professional support please see --> <!-- http://www.qos.ch/shop/products/professionalSupport --> <!-- --> <configuration> <appender name="file" class="ch.qos.logback.core.FileAppender"> <file>C:/Users/93997/Desktop/projectexers/logs/log.txt</file> <encoding>UTF-8</encoding> <encoder> <pattern>[%-5p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n</pattern> </encoder> </appender> <root level="trace"> <appender-ref ref="file"/> </root> </configuration>
注意点:唯一需要注意的是其中设置的pattern格式,在logback中是没有%l的,所以我们对于转换后的配置文件的输出格式pattern进行修改即可。
五、Logback的access模块
5.1、认识access模块
介绍:Logback-access模块与Servlet容器(如Tomcat、Jetty)继承,并提供了HTTP访问日志的功能,我们可以使用logback-access模块来替换tomcat的访问日志。
目的:当想对Tomcat日志进行同一管理的时候可使用这个模块,进行自定义日志输出等。
5.2、使用access模块
本次内容在Tomcat8.5.63中使用(10.0.2不行),对于Tomcat可去Tomcat官网下载获取。
当我们启动tomcat并访问localhost:8080网址下页面,点击访问几个页面时就会在logs目录下创建日志文件:
实际使用logback的access模块
第一步:将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下。
即tomcat解压目录的lib目录下放置两个jar包(都是1.17版本)
可去中央仓库下载或者到我的百度网盘中获取(链接:https://pan.baidu.com/s/1T5CJx1vR1621TDrCRsKr9Q 提取码:njy4 )
第二步: 修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加value标签
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
第三步:将准备好的logback-access.xml复制到$TOMCAT_HOME/conf/目录下
logback-access.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- always a good activate OnConsoleStatusListener --> <!-- 设置一个监听器 --> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> <!-- 添加一对键值对,LOG_DIR对应着指定路径 --> <property name="LOG_DIR" value="${catalina.base}/logs"/> <!-- 添加RollingFileAppender,按照天来进行分割文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 输出文件路径 --> <file>${LOG_DIR}/access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 指定文件名称(压缩包) --> <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern> </rollingPolicy> <encoder> <!-- 官网进行了简化使用一个名称即可代表指定格式: combined相当于"%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" --> <pattern>combined</pattern> </encoder> </appender> <appender-ref ref="FILE"/> </configuration>
其中pattern指定的名称可见官网(多个名称定义):https://logback.qos.ch/access.html#configuration
我们接着启动tomcat,并点击访问几个页面,之后来查看logs中生成的access.log文件:
对于输出的格式内容我们也可以进行更改调整。
总结
1、Logback有5个日志等级,默认日志等级为debug。组件同样有Logger、Appender、Encoder(封装了Layout)。—见第一章节
2、自定义配置文件通常使用logback.xml,其中常使用的Appender是RollingFileAppender(按时新增日志文件以及按文件大小拆分),LevelFilter可以设置过滤日志等级。—见第二章节Appender、Filter部分
3、logback中能够配置异步日志,大大提高性能。—见第二章节异步日志配置
4、在logback官网能够将log4j.properties转为logback.xml,不过需要注意的是log4j.properteis中的格式配置字符%l在logback中无效,需要更改。—见第4部分
5、Loback中的access模块能够替换serlvet容器(如Tomcat、Jetty)的访问日志,并且能够进行自定义格式。—见第5部分