Maven中log日志不显示问题

本文详细介绍了如何在Maven项目中配置Log4j2.xml和log4j.properties文件,分别展示了对应的依赖配置,适用于不同日志记录需求的场景。

如果是log4j2.xml

maven中配置如下
<dependency>
     <groupId>org.apache.logging.log4j</groupId>
     <artifactId>log4j-slf4j-impl</artifactId>
     <version>2.11.1</version>
</dependency>

如果是log4j.properties

maven中配置如下
<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
     <version>1.7.25</version>
</dependency>
<think>我们将在Java Maven项目中集成日志功能。通常,我们会使用SLF4J作为日志门面,并搭配具体的日志实现库(如Logback、Log4j2等)。这里以使用SLF4J和Logback为例,因为Logback是SLF4J的原生实现,性能较好且配置灵活。 步骤: 1. 在Maven项目的pom.xml中添加依赖。 2. 创建Logback的配置文件(logback.xml)并放置在资源目录下(src/main/resources)。 3. 在代码中使用SLF4J API进行日志记录。 下面详细说明: ### 1. 添加Maven依赖 在pom.xml中添加以下依赖: ```xml <dependencies> <!-- SLF4J API --> <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> </dependencies> ``` 注意:版本号请根据实际情况选择最新的稳定版本。 ### 2. 创建Logback配置文件 在src/main/resources目录下创建logback.xml文件,内容如下: ```xml <configuration> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件输出,每天滚动 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天滚动 --> <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 保留30天的日志 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 设置日志级别 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 这个配置定义了两个输出:控制台和文件。文件日志会按天滚动,并保留30天。日志级别设置为INFO,意味着会输出INFO、WARN、ERROR级别的日志。 ### 3. 在代码中使用日志 在Java类中,我们可以通过SLF4J的LoggerFactory获取Logger实例,然后使用它记录日志。 示例代码: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger logger = LoggerFactory.getLogger(MyClass.class); public void doSomething() { logger.debug("This is a debug message."); logger.info("This is an info message."); logger.warn("This is a warning message."); logger.error("This is an error message."); } } ``` ### 4. 解释 - 我们使用SLF4J作为日志门面,这样以后如果需要更换日志实现,代码无需改动。 - Logback作为日志实现,提供了灵活的配置和良好的性能。 - 在配置文件中,我们配置了控制台和文件两种输出方式,并且文件输出按天滚动,避免单个日志文件过大。 - 在代码中,我们通过LoggerFactory获取Logger实例,然后使用同级别的方法记录日志。根据配置,DEBUG级别的日志会输出,因为根日志级别是INFO。 ### 5. 运行 运行项目,你将在控制台看到日志输出,同时在项目根目录下的logs文件夹中会生成日志文件(如myapp.log)。 ### 注意事项 - 确保配置文件logback.xml在classpath下(即src/main/resources目录),Maven会将其复制到target/classes目录。 - 如果使用IDE(如IntelliJ IDEA或Eclipse),确保资源目录被正确识别。 ### 常见问题 - 如果日志没有输出,请检查配置文件的位置和内容是否正确,以及依赖是否成功导入。 - 如果出现多个日志实现冲突,可以使用Maven的依赖排除功能。 这样,我们就完成了在Java Maven项目中集成日志的功能。 §§相关问题§§: 1. 如何在Spring Boot项目中配置Logback日志? 2. 如何将同级别的日志输出到同的文件中? 3. 如何使用MDC(Mapped Diagnostic Context)来记录请求相关的信息(如请求ID)? 4. 如何配置日志的异步写入以提高性能? </think> ### Java Maven 项目集成日志解决方案 在 Java Maven 项目中集成日志系统,推荐使用 **SLF4J + Logback** 组合: - **SLF4J**:日志门面(抽象层),提供统一接口 - **Logback**:具体实现,性能优于 Log4j #### 步骤 1:添加 Maven 依赖 在 `pom.xml` 中添加: ```xml <dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.12</version> </dependency> <!-- Logback 实现 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.5.3</version> </dependency> </dependencies> ``` #### 步骤 2:创建日志配置文件 在 `src/main/resources` 下创建 `logback.xml`: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件输出 (每天滚动) --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 日志级别设置 --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> <!-- 级别日志 --> <logger name="com.example" level="DEBUG" /> </configuration> ``` #### 步骤 3:在代码中使用日志 示例类 `Main.java`: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Main { // 创建日志记录器 private static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) { logger.trace("This is a TRACE message"); logger.debug("This is a DEBUG message"); logger.info("Application started"); // 默认输出 logger.warn("This is a WARNING"); logger.error("This is an ERROR", new Exception("Test error")); try { int result = 10 / 0; } catch (Exception e) { logger.error("Division error occurred", e); } } } ``` #### 代码解释: 1. **依赖配置**: - `slf4j-api` 提供通用日志接口 - `logback-classic` 是 SLF4J 的本地实现 2. **logback.xml 核心配置**: - `appender`:定义日志输出目标(控制台/文件) - `rollingPolicy`:文件滚动策略(按日期分割) - `pattern`:日志格式模板 - `logger`:/类级别的日志级别控制 3. **Java 代码使用**: - 通过 `LoggerFactory.getLogger()` 获取日志实例 - 使用 `trace/debug/info/warn/error` 分级记录 - 支持异常堆栈记录(`logger.error(msg, throwable)`) #### 日志输出示例: ``` 2024-05-20 14:30:25 [main] INFO com.example.Main - Application started 2024-05-20 14:30:25 [main] WARN com.example.Main - This is a WARNING 2024-05-20 14:30:25 [main] ERROR com.example.Main - This is an ERROR java.lang.Exception: Test error at com.example.Main.main(Main.java:12) ``` #### 最佳实践: 1. 在开发环境使用 `DEBUG` 级别,生产环境用 `INFO` 2. 敏感信息避免记录明文密码等机密数据 3. 使用 `MDC` (Mapped Diagnostic Context) 记录请求ID 4. 大型项目按模块拆分日志文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值