背景

在Java开发中,日志记录一个不可或缺的组成部分。为了满足不同需求,Java社区涌现出多个日志框架,其中包括SLF4J、Log4j、Log4j2和Logback。本文将比较这些框架,以及为什么项目选择使用它们。

SLF4J – 简单日志门面:

SLF4J 是一个为Java提供简单日志门面。它并不是一个具体的日志实现,而是提供了一个通用的API,允许开发者选择底层的日志框架。下面是一个简单的SLF4J使用示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4JExample {
    private static final Logger logger = LoggerFactory.getLogger(SLF4JExample.class);

    public static void main(String[] args) {
        logger.info("Hello, SLF4J!");
    }
}

slf4j不是一个真正意义的可用应用程序,他是一个接口
就像java接口性质一样,单纯集成slf4j 的话,执行比如log.info log.debug方法,只能在控制台打印日志,并不会在持久化到文件或者其他自定义介质上,slf4j至少需要一个实现层框架,比如log4j,logback

Log4j – 强大而古老的日志框架:

Log4j 是Java社区中最早的日志框架之一,提供了丰富的功能,包括异步日志、插件支持等。下面是一个Log4j的使用示例

import org.apache.log4j.Logger;

public class Log4jExample {
    private static final Logger logger = Logger.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.info("Hello, Log4j!");
    }
}

Log4j2 – Log4j的升级版:

Log4j2 是 Log4j 的升级版,解决了 Log4j 1.x 存在性能线程安全问题。它引入了新的特性,如异步日志、插件体系结构等。以下是一个Log4j2的使用示例

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4j2Example {
    private static final Logger logger = LogManager.getLogger(Log4j2Example.class);

    public static void main(String[] args) {
        logger.info("Hello, Log4j2!");
    }
}

Logback – Log4j的继任者:

Logback 是由 Log4j 的创始人开发的日志框架,旨在成为 Log4j 的继任者。它具有与 Log4j 相似功能,并被认为是更现代和性能更好选择。以下是一个Logback使用示例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackExample {
    private static final Logger logger = LoggerFactory.getLogger(LogbackExample.class);

    public static void main(String[] args) {
        logger.info("Hello, Logback!");
    }
}

比较

slf4j,log4j,log4j2,logback 时间线:log4j ->slf4j ->logback ->log4j2
在这里插入图片描述

在选择日志框架时,考虑项目需求性能易用性社区支持因素是很重要的。大多数现代Java应用程序选择使用 SLF4J 作为日志门面结合 Logback 或 Log4j2 作为底层实现,以提供较好的性能和灵活性。

Springboot集成slf4j、log4j2

Spring Boot默认使用SLF4J作为日志门面,并且通过classpath中的依赖关系,Log4j2会被自动识别成为默认的日志实现。下面是一个简单的示例:

1、添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2、创建Log4j2配置文件
src/main/resources目录下创建一个名为log4j2.xml文件用于配置Log4j2。以下是一个简单的配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

可以配置xml文件,使用 application.properties

logging.file.path=./logs
logging.level.root=info
logging.file.name=./logs/app.log

3、编写Spring Boot应用程序
创建一个简单的Spring Boot应用程序,使用SLF4J进行日志记录。例如,创建一个HelloController:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @GetMapping("/hello")
    public String hello() {
        logger.info("你好啊,我是log4j");
        return "Hello, world!";
    }
}

可以看到命令行打印出来了
在这里插入图片描述
由于我们application.properties 配置了日志的路径,所以在这个路径下也保存了一份日志,你也可以将日志保存到数据库或者其他地方
在这里插入图片描述

参考

https://blog.csdn.net/madness1010/article/details/128332275

原文地址:https://blog.csdn.net/weixin_43972437/article/details/134801064

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47160.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注