当前位置: 首页 > news >正文

Java Maven Log4j 项目日志打印

Java Maven Log4j 项目日志打印

  • 1 依赖
  • 2 配置
  • 3 测试
    • 1 Log4j
    • 2 Lombok
    • 3 结果

SLF4J 是日志接口,代码中只依赖它,后续可切换 Log4j2 等实现(无需改代码)。
Logback 是 SLF4J 的默认实现,性能优于 Log4j,且内置 RollingFileAppender(滚动日志)。

1 依赖

依赖解释
SLF4J-1.7.36最后一个官方明确支持 JDK 1.8 的 1.7.x 版本,稳定无兼容问题。
Logback-1.2.11与 SLF4J 1.7.x 完全兼容,且原生支持 JDK 1.8 的所有特性,滚动日志功能不受影响。

Java 日志设计遵循 “面向接口编程” 思想,这两个依赖分别承担“日志标准”和“标准实现”的角色,解耦日志 API 与具体功能逻辑:

依赖名称角色核心职责类比(便于理解)
slf4j-api(SLF4J)日志门面(接口层)定义统一的日志操作接口(如 LoggerLoggerFactory),屏蔽底层实现差异相当于“日志界的 JDBC 规范”
logback-classic日志实现(功能层)实现 SLF4J 接口,提供日志打印、滚动、彩色输出等具体功能相当于“日志界的 MySQL 驱动”
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gohope</groupId><artifactId>TaskMission</artifactId><version>1.0.0</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- Java 通用工具 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.41</version></dependency><!-- 1. SLF4J 日志门面(JDK 1.8 兼容版本) --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version> <!-- 1.7.x 系列是 JDK 1.8 长期支持版本 --></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><!-- 2. Logback 日志实现(与 SLF4J 1.7.x 兼容,支持 JDK 1.8) --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version> <!-- 1.2.x 系列适配 JDK 1.8,无语法兼容问题 --></dependency></dependencies></project>

2 配置

项目Value
滚动策略TimeBasedRollingPolicy 是按时间滚动的核心,fileNamePattern 定义归档文件名(必须包含 %d 日期占位符)。
日志路径logs/app.log 是当前日志文件(始终写入最新日志),归档文件会自动生成 app-2025-11-12.log 格式。
日志保留maxHistory=30 表示保留 30 天历史日志,totalSizeCap=1GB 限制总日志大小(可选,防止磁盘溢出)。
文件编码显式指定 UTF-8 避免中文乱码。
编译验证使用 JDK 1.8 编译项目,不会出现 UnsupportedClassVersionError(Logback 1.2.11 和 SLF4J 1.7.36 的编译目标是 JDK 1.6+)。
功能验证启动项目后,logs 文件夹会正常生成 app.log(当前日志)和 app-2025-11-12.log(归档日志),滚动策略完全生效。
冲突处理如果项目中引入了其他日志框架(如 commons-logging、log4j),需通过 exclusion 排除,避免冲突:

需要在 src/main/resources 下创建 Logback 的配置文件 logback.xml(Logback 会自动识别该文件名),核心配置 按日期滚动日志。
完整配置文件(logback.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds"> <!-- 自动扫描配置文件变更(每60秒) --><!-- 1. 定义日志输出格式 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 控制台输出格式:时间 [线程名] 日志级别 类名 - 日志信息 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} [%file:%line] - %msg%n </pattern><charset>UTF-8</charset> <!-- 解决中文乱码 --></encoder></appender><!-- 2. 按日期滚动的文件日志(核心配置) --><appender name="FILE_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 2.1 日志文件保存路径(相对路径/绝对路径均可) --><file>logs/app.log</file><!-- 2.2 滚动策略:按日期滚动(一天一个文件) --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 归档日志文件名格式:app-2025-11-12.log(日期后缀) --><fileNamePattern>logs/app-%d{yyyy-MM}.log</fileNamePattern><!-- 日志保留天数:保留30天的历史日志,自动删除过期文件 --><maxHistory>60</maxHistory><!-- 可选:限制所有日志文件总大小(例如 1GB),防止磁盘占满 --><totalSizeCap>5GB</totalSizeCap></rollingPolicy><!-- 2.3 日志输出格式(文件中包含的字段) --><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} [%file:%line] - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 3. 全局日志级别(DEBUG/INFO/WARN/ERROR) --><!-- 级别说明:DEBUG < INFO < WARN < ERROR,只输出 >= 该级别的日志 --><root level="INFO"><appender-ref ref="CONSOLE"/> <!-- 同时输出到控制台 --><appender-ref ref="FILE_ROLLING"/> <!-- 输出到滚动日志文件 --></root><!-- 可选:单独配置某个包的日志级别(例如降低 Spring 框架的日志级别) --><logger name="org.springframework" level="WARN" additivity="false"><appender-ref ref="FILE_ROLLING"/></logger></configuration>

3 测试

1 Log4j

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LogTest1 {private static final Logger log = LoggerFactory.getLogger(LogTest1.class);public static void main(String[] args) {log.error("测试日志1 Log4j");}}

2 Lombok

import lombok.extern.slf4j.Slf4j;@Slf4j
public class LogTest2 {public static void main(String[] args) {log.error("测试日志2 Lombok");}}

3 结果

2025-11-12 17:39:17.348 [main] ERROR LogTest1 [LogTest1.java:10] - 测试日志1 Log4j
2025-11-12 17:39:21.675 [main] ERROR LogTest2 [LogTest2.java:6] - 测试日志2 Lombok

在这里插入图片描述

http://www.dtcms.com/a/600564.html

相关文章:

  • 面试:Spring中单例模式用的是哪种?
  • 长芯微LPS5820完全P2P替代NCP51820,LPS5820 是一款高速半桥驱动器,可用来驱动半 桥功率拓扑的 GaN 功率管。
  • Python 第三方库:PyTorch(动态计算图的深度学习框架)
  • 如果网站打开非常缓慢国内全屋定制十大名牌
  • 【操作系统】详解 分页与分段系统存储管理
  • flex:1
  • 【LeetCode经典题解】递归破解对称二叉树之谜
  • 电脑已连接网络无线自动重启
  • 创建Vue2和Vue3项目区别对比和对应示例演示
  • 《算法闯关指南:优选算法--位运算》--38.消失的两个数字
  • 建设银行网站背景图片wordpress 读写分离
  • 最简单的网站建设语音wordpress首页弹窗你
  • 哪里有建设哪里有我们wordpress如何做优化
  • Spring Boot 2.7.18(最终 2.x 系列版本)8 - 日志:Log4j2 基本概念;Log4j2 多环境日志配置策略
  • Vue 列表渲染完全指南:v-for 核心用法、key 原理及数据监测实战(附代码案例)
  • webrtc降噪-PriorSignalModelEstimator类源码分析与算法原理
  • 如何在电商上购物网站企业咨询管理是干嘛的
  • 重庆大型的网站建设企业社交网站定制
  • 门户网站设计运城市网站建设公司
  • 网站 公司备案与个人备案如何用群晖做自己的网站
  • 商务网站建设实训报告1500字炫酷文字制作网站
  • 给你一个网站你怎么做的网站建设的风格
  • 手机网站和微信网站有哪些opensearch wordpress
  • 餐饮公司网站建设的特点中山网站建设的公司
  • 青岛网站设计多少钱苏州工业园区两学一做教育网站
  • 做网站的备案外包服务公司排名
  • 做网站淮南请人开发一个app要多少钱
  • 个人做论坛网站需要哪些备案.net 企业网站源码
  • 广州手机网站定制信息一个app软件
  • 做网站莱芜短视频推广引流方案