maven工程中如何使用slf4j打印日志

本文详细介绍了如何在Java项目中配置SLF4J与Log4j进行日志记录,包括pom.xml中依赖包的添加、logback.xml与log4j.properties的配置方式,以及通过示例代码展示不同级别的日志输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、pom.xml配置

加入依赖包

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

2、logback.xml配置(放到resources目录下)

<?xml version="1.0" encoding="UTF-8" ?>

<configuration scan="true" scanPeriod="3 seconds">
    <!--设置日志输出为控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{userId}] [%X{requestId}] %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!--设置日志输出为文件-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logFile.log</File>
        <rollingPolicy  class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logFile.%d{yyyy-MM-dd_HH-mm}.log.zip</FileNamePattern>
        </rollingPolicy>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss,SSS} [%thread] %-5level %logger{32} - %msg%n</Pattern>
        </layout>
    </appender>

    <root>
        <level value="DEBUG"/>
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
    </root>


</configuration>

3、log4j.properties配置(放到resources目录下)

# Global logging configuration 开发时候建议使用 debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4、demo

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

/***
 * @author lhl
 */
public class Log4jTestDemo {
    private static Logger logger = LoggerFactory.getLogger(Log4jTestDemo.class);

    /**
     * @param args
     */
    public static void main(String[] args) {
        // System.out.println("This is println message.");

        // 记录debug级别的信息
        logger.debug("This is debug message.");
        // 记录info级别的信息
        logger.info("This is info message.");
        // 记录error级别的信息
        logger.error("This is error message.");
    }
}

输出:

03-08
### SLF4J 日志门面 Java 使用教程 #### 一、SLF4J 简介 SLF4J 是 Simple Logging Facade for Java 的缩写,旨在为不同日志框架提供一个通用接口。通过这个接口,开发者可以在应用程序中编写日志记录逻辑而不必依赖特定的日志实现库[^2]。 #### 二、引入依赖 为了在项目中使用 SLF4J,需先添加相应的 Maven 或 Gradle 依赖项。以下是 Maven 配置示例: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <!-- 如果选用 Logback 作为实际的日志实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 对于 Gradle 用户,则应在其 `build.gradle` 文件内加入如下语句: ```groovy implementation 'org.slf4j:slf4j-api:1.7.30' // 若采用 Logback 实现 runtimeOnly 'ch.qos.logback:logback-classic:1.2.3' ``` #### 三、基本用法 一旦配置完成,就可以像下面这样创建 Logger 对象并调用相应的方法来输出信息了: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Example { private static final Logger logger = LoggerFactory.getLogger(Example.class); public void run() { String message = "This is a test."; // 记录调试级别消息 logger.debug("Debugging info: {}", message); // 打印警告级别的错误提示 try { int result = divideByZero(); } catch (ArithmeticException e) { logger.warn("Caught exception while dividing by zero", e); } // 输出严重程度更高的异常堆栈跟踪 try { throw new RuntimeException("Something went wrong!"); } catch (RuntimeException ex) { logger.error("Runtime error occurred.", ex); } } private int divideByZero() throws ArithmeticException { return 1 / 0; // This will cause an arithmetic exception. } } ``` 上述代码片段展示了如何利用占位符 `{}` 来安全地格式化字符串参数,从而避免潜在的安全风险以及性能损耗。 #### 四、常见问题及其解决办法 ##### 无法找到绑定 当运行时环境中不存在任何有效的 SLF4J 绑定时会抛出此类告警。这通常意味着缺少必要的桥接器 JAR 文件。确保至少存在一种适配器连接到所选的具体日志系统(比如 log4j-over-slf4j.jar, jcl-over-slf4j.jar)。同时确认版本兼容性良好[^3]。 ##### 不同模块间冲突 大型企业级应用可能集成了多个第三方组件,它们各自携带了自己的日志管理工具包。为了避免重复加载或相互干扰的情况发生,在构建过程中应当移除不必要的冗余依赖关系,并指定唯一的一套标准日志处理机制给整个工程使用。 ##### 性能考虑 尽管 SLF4J 提供了便捷的日志封装层,但在高并发场景下仍需要注意控制开销。建议仅针对重要事件启用较高级别的日志等级;另外可以借助异步模式进一步提升效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值