上一篇                     
               
			  java怎么用log输出
- 后端开发
- 2025-07-19
- 4792
 在Java中,使用
 
 
System.out.println()或`
Java日志基础用法
使用 System.out 直接输出
 
- 适用场景:快速调试或简单程序。
- 特点:无需依赖第三方库,但功能单一(无日志级别、格式控制等)。
- 示例代码: System.out.println("This is a debug message"); System.err.println("This is an error message");
- 缺点:无法灵活控制输出级别,不适合生产环境。
使用 java.util.logging(JDK内置)
 
-  适用场景:轻量级需求,无需引入第三方依赖。 
-  核心类: - Logger:日志记录器,按级别输出。
- FileHandler:将日志写入文件。
- SimpleFormatter:简单格式化工具。
 
-  示例代码:  import java.util.logging.; public class LogExample { private static final Logger logger = Logger.getLogger(LogExample.class.getName()); public static void main(String[] args) throws Exception { FileHandler fileHandler = new FileHandler("app.log", true); logger.addHandler(fileHandler); logger.setLevel(Level.INFO); logger.info("Program started"); logger.warning("A warning message"); } }
-  缺点:配置繁琐,功能不如第三方框架强大。 
主流日志框架对比
| 框架/工具 | 依赖轻量性 | 功能丰富度 | 性能 | 扩展性 | 推荐场景 | 
|---|---|---|---|---|---|
| System.out | YES | LOW | HIGH | NONE | 临时调试 | 
| java.util.logging | YES | MEDIUM | MEDIUM | 低(API固定) | 小型项目,无复杂需求 | 
| Log4j2 | NO(依赖多) | HIGH | HIGH | 高(支持多种Appender) | 大中型项目,需灵活配置 | 
| SLF4J + Logback | 中等(SLF4J轻量) | HIGH | HIGH | 高(兼容多框架) | 企业级项目,模块化设计 | 
Log4j2 详细用法(以配置文件为例)
依赖引入
<!-Maven 依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.20.0</version>
</dependency> 
配置文件(log4j2.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %c{1} %msg%n"/>
        </Console>
        <File name="FileLog" fileName="logs/app.log" append="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %c{1} %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="FileLog"/>
        </Root>
    </Loggers>
</Configuration> 
使用代码
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.trace("Trace message"); // 不会被输出(默认Level为INFO)
        logger.info("Info message");
        logger.error("Error message");
    }
} 
SLF4J + Logback 组合用法
依赖引入
<!-Maven 依赖 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.11</version>
</dependency> 
配置文件(logback.xml)
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration> 
使用代码
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.debug("Debug message");
        logger.info("Info message");
    }
} 
日志最佳实践
-  日志级别划分:  - TRACE:极细粒度,仅关键流程使用。
- DEBUG:调试信息,开发环境启用。
- INFO:核心业务逻辑记录。
- WARN:潜在问题警告。
- ERROR:异常或错误。
 
-  避免日志敏感信息: - 禁用敏感数据(如密码、密钥)的日志输出。
- 使用日志脱敏工具或替换值(如)。
 
-  性能优化:  - 异步日志:通过AsyncAppender提升性能(Log4j2/Logback)。
- 减少DEBUG及以上级别日志的生产环境使用。
 
- 异步日志:通过
-  多环境配置: - 通过配置文件区分开发、测试、生产环境。
- 示例:Log4j2 的log4j2-spring.xml支持 Spring 环境变量注入。
 
常见问题解答(FAQs)
问题1:如何选择合适的日志框架?
- 答案: 
  - 小型项目或临时调试:System.out或java.util.logging。
- 中型项目:Log4j2(功能全面,社区活跃)。
- 大型项目或企业级应用:SLF4J + Logback(灵活性高,性能优秀)。
 
- 小型项目或临时调试:
问题2:日志文件过大怎么办?
- 解决方案: 
  - 滚动策略:配置按时间或大小分割日志文件(如 Log4j2 的RollingFileAppender)。
- 压缩存档:旧日志自动压缩(如 .zip格式)。
- 清理策略:保留最近 N 天的日志,删除过期文件。
 
- 滚动策略:配置按时间或大小分割日志文件(如 Log4j2 的
 
  
			