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

JAVA Log 日志级别和使用技巧

一、主流日志框架

1. Logback (推荐)

Spring Boot默认日志框架

2. Log4j2

高性能日志框架

3. SLF4J + Logback (最常用组合)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyClass {private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
}

二、日志级别详解

日志级别从低到高:

级别描述使用场景
TRACE最详细的跟踪信息方法进入退出、详细流程跟踪
DEBUG调试信息开发阶段的调试信息
INFO重要的运行信息系统启动、关键业务流程
WARN警告信息不影响系统运行的异常情况
ERROR错误信息需要关注的处理错误
FATAL致命错误导致系统崩溃的错误

级别关系:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

三、配置示例

1. Logback配置 (logback-spring.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.SSS} [%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}.%i.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 异步日志 --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="FILE"/><queueSize>512</queueSize></appender><!-- 日志级别配置 --><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="ASYNC"/></root><!-- 包级别日志 --><logger name="com.example.service" level="DEBUG"/><logger name="org.springframework" level="WARN"/>
</configuration>

2. Log4j2配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><RollingFile name="File" fileName="logs/app.log"filePattern="logs/app-%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>

四、使用技巧和最佳实践

1. 正确的日志记录方式

@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);public User getUserById(Long id) {// 使用占位符,避免字符串拼接logger.debug("查询用户信息, userId: {}", id);try {User user = userRepository.findById(id);if (user != null) {logger.info("成功查询用户: {}", user.getUsername());} else {logger.warn("用户不存在, userId: {}", id);}return user;} catch (Exception e) {logger.error("查询用户失败, userId: {}", id, e);throw new RuntimeException("查询用户失败", e);}}// 使用条件判断提升性能public void processData(List<String> data) {if (logger.isDebugEnabled()) {logger.debug("处理数据, 数据量: {}, 内容: {}", data.size(), data);}// 复杂处理逻辑...}
}

2. 异常日志记录

public class ExceptionHandlingExample {// 不好的方式 - 丢失堆栈信息public void badExceptionLogging() {try {// 业务代码} catch (Exception e) {logger.error("操作失败: " + e.getMessage()); // 错误!}}// 好的方式 - 完整异常信息public void goodExceptionLogging() {try {// 业务代码} catch (BusinessException e) {logger.warn("业务异常, 用户ID: {}, 操作: {}", userId, operation, e);} catch (Exception e) {logger.error("系统异常, 用户ID: {}, 操作: {}", userId, operation, e);}}
}

3. 性能敏感场景的日志优化

public class PerformanceSensitiveClass {public void highPerformanceMethod() {// 使用lambda延迟计算,避免不必要的字符串构建logger.debug("处理请求参数: {}", () -> buildExpensiveLogMessage());// 或者使用条件判断if (logger.isDebugEnabled()) {logger.debug("详细数据: {}", expensiveDataToString());}}private String buildExpensiveLogMessage() {// 构建复杂的日志消息return "expensive message";}
}

五、环境特定的日志配置

application.yml (Spring Boot)

logging:level:com.example: DEBUGorg.springframework: WARNfile:name: logs/app.logpattern:console: "%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n"file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
  1. 选择合适的日志级别:生产环境用INFO,开发环境用DEBUG

  2. 使用占位符:避免不必要的字符串拼接

  3. 合理记录异常:总是传递异常对象给logger

  4. 性能考虑:在循环或高性能代码中使用条件判断

  5. 使用MDC:便于日志追踪和排查问题

  6. 异步日志:在高并发场景下使用异步日志提升性能

  7. 日志轮转:配置合理的日志文件大小和保存时间

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

相关文章:

  • 通达信--公式系统(答疑)
  • 自己做的网站怎么在局域网中访问公司网站如何优化
  • Spring注解篇:@RequestBody详解!
  • 漫画网站建设教程视频室内3d设计软件
  • 用项目实战案例讲清“交换机与路由器”的核心区别
  • 域名转出过程网站能打开吗网站模板怎么使用
  • 内部类的实现
  • 【Git】【Sourcetree】安装与使用教程
  • 怎样用vps做网站企业邮箱免费版注册
  • 大型网站开发费用邯郸做网站的博客
  • 做一家公司网站要注意哪些在线做网站黄
  • 前端写一个密码登录,验证码登录,注册模板
  • TypeScript 面试题及详细答案 100题 (51-60)-- 类(Class)
  • 湖北省建设工程质量安全协会网站建设局主要负责什么
  • 针对跨学科环境挑战的大语言模型微调
  • 视频网站开发前景如何网站做最优是什么意思
  • SpringCloud-网关
  • 弹窗网站制作器做网站需要一些什么东西
  • 并发编程深度解析:从读写锁到TCP Socket并发读写
  • Linux1020 GBLIC安装mysql
  • 东莞网站建设环保设备wordpress模板 众筹
  • 高水平大学建设大学网站华为网站建设招聘
  • 如何系统化掌握 iOS 26 App 耗电管理,多工具协作
  • iOS 应用代上架流程,多工具组合与使用 开心上架 跨平台自动化上传指南
  • 【Leetcode hot 100】70.爬楼梯
  • 手机娱乐网站制作国内漂亮网站欣赏
  • 怎么做短链接网站诺诚软件开发
  • 【JUnit实战3_04】第二章:探索 JUnit 的核心功能(四)
  • 如何用ps做网站ui网站制作公司北京华网
  • 深入理解Lua闭包机制:从原理到mpv实战(深度!)