Java基础快速入门:日志技术-Log4j入门与实践
2026/7/4 4:14:57 网站建设 项目流程

本文纲要

  1. 日志技术与输出语句的区别
  2. 日志体系结构与Log4j
  3. Log4j入门案例
  4. Log4j三大核心
    Logger记录器
    Appender输出源
    Layout布局
  5. 配置文件详解
  6. Log4j在项目中的应用

日志技术与输出语句的区别

在开发中,经常需要了解系统的运行情况。
以往我们通常在关键位置使用System.out.println()输出信息,但这种方式存在明显弊端:

  • 不易关闭:如果不再需要查看信息,必须修改代码删除输出语句。
  • 输出位置单一:信息只能展示在控制台,无法持久化到文件或数据库。
  • 性能影响:输出语句与业务代码运行在同一线程,可能影响性能。

日志技术(Log)则能很好地解决这些问题。

它不仅可以记录程序运行时的关键信息,还具备以下优势:

对比维度System.out 输出日志技术
是否需改代码需要修改代码只需修改配置文件
输出目的地仅控制台控制台、文件、数据库等
线程模型与业务代码同一线程多线程记录,减小性能影响
灵活控制无级别概念支持日志级别、格式、过滤

因此,现代Java开发中普遍采用日志框架替代直接输出。

日志体系结构与Log4j

Java日志体系包含两套主流接口和多种实现:

实现

接口

Commons Logging

Simple Logging Facade for Java

Log4j

java.util.logging

Logback

  • JCL (Jakarta Commons Logging):Apache 早期提供的日志接口,现更名为Commons Logging
  • SLF4J (Simple Logging Facade for Java):另一个流行的日志门面,提供了更简洁的 API,支持在运行时绑定具体的日志实现。

Log4j是 Apache 的一个开源日志实现,也是目前最常用的日志框架之一。

通过 Log4j 我们可以:

  • 控制日志输出目的地(控制台、文件等)
  • 控制每条日志的输出格式
  • 定义日志级别,精细管理日志生成
  • 全部通过配置文件灵活设置,无需修改代码

接下来的内容将以Log4j+SLF4J组合为例,展示如何在实际项目中使用日志。

Log4j入门案例

1 ) 开发流程

  1. 导入Log4j相关的jar
  2. 编写Log4j配置文件(log4j.properties
  3. 在代码中获取日志对象
  4. 按照日志级别记录日志信息

2 ) 项目结构

log4j-demo ├── lib │ ├── log4j-1.2.17.jar │ ├── slf4j-api-1.7.30.jar │ └── slf4j-log4j12-1.7.26.jar ├── src │ ├── log4j.properties │ └── com/wb/demo1 │ └── Log4JTest01.java

3 ) 配置文件

一个最简单的log4j.properties内容如下:

log4j.rootLogger=debug,my,fileAppender # 输出到控制台 ### log4j.appender.my=org.apache.log4j.ConsoleAppender log4j.appender.my.ImmediateFlush = true log4j.appender.my.Target=System.out log4j.appender.my.layout=org.apache.log4j.PatternLayout log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n # 输出到文件 log4j.appender.fileAppender=org.apache.log4j.FileAppender log4j.appender.fileAppender.ImmediateFlush = true log4j.appender.fileAppender.Append=true log4j.appender.fileAppender.File=D:/log4j-log.log log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n

4 ) 获取日志对象

推荐使用SLF4J的 API 获取日志对象,这样更换底层日志实现时无需修改业务代码。

packagecom.wb.demo1;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;publicclassLog4JTest01{//使用slf4j里面的api来获取日志的对象//好处:如果以后我们更换日志的实现类,那么下面的代码不需要跟着修改//推荐使用privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(Log4JTest01.class);publicstaticvoidmain(String[]args){//1.导入jar包//2.编写配置文件//3.在代码中获取日志的对象//4.按照日志级别设置日志信息LOGGER.debug("debug级别的日志");LOGGER.info("info级别的日志");LOGGER.warn("warn级别的日志");LOGGER.error("error级别的日志");}}

注意:直接使用 Log4j 的Logger.getLogger()方法也能获取对象,但这样会与具体实现耦合,不便于未来切换框架,因此不推荐。

运行main方法后,控制台和D:/log4j-log.log文件中都会输出相应级别的日志。
如果将根日志级别改为 info,则debug日志不会被输出。

Log4j三大核心

Log4j 主要围绕三个核心组件工作:Logger(记录器)、Appender(输出源)、Layout(布局)。

应用程序

Logger

Appender

Layout

输出目的地

1 ) Logger 记录器

Logger 负责捕获日志信息并决定哪些信息需要输出。
Log4j 定义了以下常用日志级别(从低到高):

级别含义
DEBUG用于开发过程中的调试信息
INFO用于输出重要的运行信息
WARN可能出现问题,但不影响程序继续运行
ERROR发生错误,但程序仍可继续运行
FATAL严重错误,会导致程序停止

规则:只输出不低于设定级别的日志。例如配置级别为INFO,则DEBUG不会被输出;若配置为ALL,则所有级别全部输出;配置为OFF,则关闭所有日志。

2 ) Appender 输出源

Appender 指定日志的输出目的地。常用的有:

Appender 类作用
ConsoleAppender输出到控制台
FileAppender输出到文件

配置时需要为每个 Appender 指定一个名字,例如my,fileAppender,名字可以随意命名。

示例:

# 控制台输出,命名为 my log4j.appender.my=org.apache.log4j.ConsoleAppender log4j.appender.my.ImmediateFlush = true log4j.appender.my.Target=System.out # System.out(黑)或 System.err(红) # 文件输出,命名为 fileAppender log4j.appender.fileAppender=org.apache.log4j.FileAppender log4j.appender.fileAppender.Append=true # true:追加, false:覆盖 log4j.appender.fileAppender.File=D:/log4j-log.log

4.3 Layout 布局
Layout 负责格式化日志输出内容。常用布局管理器:

布局类特点
PatternLayout灵活定制输出格式(最常用)
SimpleLayout仅包含日志级别和信息字符串
TTCCLayout包含时间、线程、类别等信息

PatternLayout通过ConversionPattern来定义格式,常用的占位符如下:

占位符含义
%p日志级别
%d日期时间
%t线程名
%c{1}类名(可指定精度)
%L行号
%m输出的日志信息
%n换行符

示例配置:

log4j.appender.my.layout=org.apache.log4j.PatternLayout log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n

配置文件详解

真实的log4j.properties通常包含三大部分:

第一部分:根 Logger 配置

log4j.rootLogger=debug,my,fileAppender
  • debug:全局日志级别,可写为OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL
  • my,fileAppender:指定使用的 Appender 名称,多个用逗号分隔。

第二部分:Appender 配置

myfileAppender为例,定义其类型、刷新模式、目标位置等属性。

第三部分:Layout 配置

为每个Appender绑定具体的Layout及输出格式。

完整示例就是前面提供的log4j.properties,通过修改它就能灵活调整日志行为,无需改动代码。

Log4j在项目中的应用

在实际 Web 项目(如一个 NIO 服务器)中使用 Log4j,遵循以下四步即可:

1 ) 导入 jar 包

log4j-1.2.17.jar,slf4j-api-1.7.30.jar,slf4j-log4j12-1.7.26.jar加入项目lib目录并添加为库。

2 ) 放置配置文件

log4j.properties拷贝到src目录下(必须是该名称)

3 ) 获取Logger对象

在需要日志的类中,通过SLF4J获取:

privatestaticfinalLoggerlogger=LoggerFactory.getLogger(当前类.class);

4 ) 记录日志

在关键业务逻辑处记录:

logger.info("已经处理了登录请求,准备给浏览器响应");

运行时,控制台和指定文件会同时输出日志信息,形如:

2025-03-07 10:15:30,123 main INFO HttpServer:25 - 已经处理了登录请求,准备给浏览器响应

这样我们就能够清晰追踪系统运行状况,并且可以根据环境灵活控制日志级别与输出位置。

总结

通过以上内容,我们了解了日志技术与传统输出的区别、Java日志体系结构、Log4j的核心组件以及实际项目中的应用方法。

掌握这些基础知识后,你就可以在项目中高效地运用日志技术,提升问题排查和系统监控的效率。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询