05、logback(日志实现框架)(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 05、logback(日志实现框架)(二)

三、实际应用


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部分

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
271 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
74 5
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
301 3
|
27天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
35 1
|
2月前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
39 2
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
126 1
|
2月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
6天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
16天前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1684 14