• 常用的Java日志框架:Log4j、SLF4J和Logback


    日志是软件开发中不可或缺的一部分,它有助于记录应用程序的运行状态、调试问题和监控系统。Java中有多个流行的日志框架,如Log4j、SLF4J和Logback。

    一、Log4j

    1.1 什么是Log4j?

    Log4j是Apache基金会开发的一个开源日志框架,它提供了灵活且强大的日志记录能力。Log4j具有良好的性能和扩展性,可以通过配置文件进行详细定制。

    1.2 安装和配置Log4j

    1. 添加Maven依赖:

    1. <dependency>
    2. <groupId>log4jgroupId>
    3. <artifactId>log4jartifactId>
    4. <version>1.2.17version>
    5. dependency>

    2. 创建配置文件log4j.properties

    1. log4j.rootLogger=DEBUG, stdout, file
    2. # 控制台输出
    3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    5. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n
    6. # 文件输出
    7. log4j.appender.file=org.apache.log4j.RollingFileAppender
    8. log4j.appender.file.File=logs/app.log
    9. log4j.appender.file.MaxFileSize=10MB
    10. log4j.appender.file.MaxBackupIndex=10
    11. log4j.appender.file.layout=org.apache.log4j.PatternLayout
    12. log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n

    3. 使用Log4j记录日志:

    1. import org.apache.log4j.Logger;
    2. public class Log4jExample {
    3. private static final Logger logger = Logger.getLogger(Log4jExample.class);
    4. public static void main(String[] args) {
    5. logger.debug("This is a debug message");
    6. logger.info("This is an info message");
    7. logger.warn("This is a warn message");
    8. logger.error("This is an error message");
    9. }
    10. }

    1.3 Log4j核心概念

    1. Logger:负责记录日志。

    2. Appender:定义日志输出目的地(如控制台、文件)。

    3. Layout:定义日志的输出格式。

    1.4 Log4j高级特性

    1. 配置不同级别的日志:

    log4j.logger.com.example=DEBUG, exampleAppender
    

    2. 动态配置: 可以通过log4j.xml进行更详细的配置,支持热加载。

    二、SLF4J

    2.1 什么是SLF4J?

    SLF4J(Simple Logging Facade for Java)是一个为各种日志框架提供简单统一接口的API。它本身不记录日志,而是为日志框架提供一个抽象层。

    2.2 安装和配置SLF4J

    1. 添加Maven依赖:

    1. <dependency>
    2. <groupId>org.slf4jgroupId>
    3. <artifactId>slf4j-apiartifactId>
    4. <version>1.7.30version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.slf4jgroupId>
    8. <artifactId>slf4j-log4j12artifactId>
    9. <version>1.7.30version>
    10. dependency>

    2. 使用SLF4J记录日志:

    1. import org.slf4j.Logger;
    2. import org.slf4j.LoggerFactory;
    3. public class SLF4JExample {
    4. private static final Logger logger = LoggerFactory.getLogger(SLF4JExample.class);
    5. public static void main(String[] args) {
    6. logger.debug("This is a debug message");
    7. logger.info("This is an info message");
    8. logger.warn("This is a warn message");
    9. logger.error("This is an error message");
    10. }
    11. }

    2.3 SLF4J的优势

    1. 统一的API:支持多种日志框架,如Log4j、Logback、Java Util Logging等。

    2. 灵活性:可以在不同的日志实现之间轻松切换。

    3. 性能:SLF4J支持参数化消息,避免了不必要的字符串连接。

    2.4 常见用法

    1. 参数化日志:

    logger.info("User {} logged in", userName);
    

    2. 异常日志:

    1. try {
    2. // code
    3. } catch (Exception e) {
    4. logger.error("An error occurred", e);
    5. }

    三、Logback

    3.1 什么是Logback?

    Logback是由Log4j的作者开发的另一个开源日志框架。它是SLF4J的原生实现,提供了比Log4j更高效、更强大的日志记录功能。

    3.2 安装和配置Logback

    1. 添加Maven依赖:

    1. <dependency>
    2. <groupId>ch.qos.logbackgroupId>
    3. <artifactId>logback-classicartifactId>
    4. <version>1.2.3version>
    5. dependency>

    2. 创建配置文件logback.xml

    1. <configuration>
    2. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    3. <encoder>
    4. <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%npattern>
    5. encoder>
    6. appender>
    7. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    8. <file>logs/app.logfile>
    9. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    10. <fileNamePattern>logs/app.%d{yyyy-MM-dd}.logfileNamePattern>
    11. <maxHistory>30maxHistory>
    12. rollingPolicy>
    13. <encoder>
    14. <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%npattern>
    15. encoder>
    16. appender>
    17. <root level="debug">
    18. <appender-ref ref="STDOUT"/>
    19. <appender-ref ref="FILE"/>
    20. root>
    21. configuration>

    3. 使用Logback记录日志:

    1. import org.slf4j.Logger;
    2. import org.slf4j.LoggerFactory;
    3. public class LogbackExample {
    4. private static final Logger logger = LoggerFactory.getLogger(LogbackExample.class);
    5. public static void main(String[] args) {
    6. logger.debug("This is a debug message");
    7. logger.info("This is an info message");
    8. logger.warn("This is a warn message");
    9. logger.error("This is an error message");
    10. }
    11. }

    3.3 Logback核心概念

    1. Appender:定义日志的输出目标。

    2. Encoder:定义日志的输出格式。

    3. RollingPolicy:定义日志文件的滚动策略。

    3.4 Logback高级特性

    1. 条件日志:

    1. <if condition='event.level == "ERROR"'>
    2. <then>
    3. <appender-ref ref="FILE"/>
    4. then>
    5. if>

    2. 动态日志级别:

    1. import ch.qos.logback.classic.Level;
    2. import ch.qos.logback.classic.Logger;
    3. import org.slf4j.LoggerFactory;
    4. public class DynamicLogLevelExample {
    5. public static void main(String[] args) {
    6. Logger logger = (Logger) LoggerFactory.getLogger(DynamicLogLevelExample.class);
    7. logger.setLevel(Level.INFO);
    8. logger.debug("This won't be logged");
    9. logger.info("This will be logged");
    10. }
    11. }

    掌握Log4j、SLF4J和Logback是Java开发者必备的技能。Log4j提供了基础的日志记录功能,SLF4J提供了统一的日志接口,而Logback则是SLF4J的高效实现。

    黑马程序员免费预约咨询

  • 相关阅读:
    OpenShift 4 - 用 OpenShift DevSpaces 在线开发 Quarkus 云原生应用
    4.9 多协议标记交换MPLS
    【SpringBoot】多环境配置和启动
    星环科技数据安全管理平台 Defensor重磅发布
    CRM客户管理系统是什么?
    【解决问题】---- 解决 avue-crud 表格勾选数据翻页后界面保持选中
    科锐国际(计算机类),快手,CVTE,得物,蓝月亮,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推
    Windows PHP 将 WORD转PDF,执行完成后 释放进程
    AI安全入门-人工智能数据与模型安全
    NETRCA: AN EFFECTIVE NETWORK FAULT CAUSE LOCALIZATION之论文阅读
  • 原文地址:https://blog.csdn.net/Itmastergo/article/details/139828490