Java日志框架Log4j全面指南

需积分: 9 3 下载量 103 浏览量 更新于2024-10-01 收藏 22KB TXT 举报
"Java 中的 log4j 是一个强大的日志记录框架,广泛应用于各种 Java 应用程序中。本文档旨在详细介绍如何在 Java 项目中使用 log4j,包括配置、不同级别的日志记录以及如何自定义输出格式。通过理解和掌握 log4j 的基本概念和实践技巧,开发者可以更好地管理和调试他们的代码。" 在 Java 开发中,log4j 是一个不可或缺的日志工具,它提供了灵活的日志记录机制,可以帮助开发人员跟踪代码执行过程中的问题,进行调试和性能分析。要使用 log4j,我们需要理解以下几个关键组件: 1. **Logger**: Logger 是 log4j 的核心组件,用于记录日志信息。每个类都可以拥有一个 Logger 实例,通常我们可以通过 `Logger.getLogger(String name)` 方法获取。如果未指定名称,那么默认会返回名为全类名的 Logger。Root Logger 是所有 Logger 的父类,可以通过 `Logger.getRootLogger()` 获取,它是全局的,可以记录所有未指定特定 Logger 的日志。 2. **Appender**: Appender 负责将日志信息输出到指定的地方,如控制台(ConsoleAppender)、文件(RollingFileAppender)或其他输出设备。例如,我们可以设置 `log4j.appender.stdout` 来定义控制台 Appender,并通过 `log4j.appender.R` 定义滚动文件 Appender。 3. **Layout**: Layout 决定了日志信息的格式。常见的 Layout 类型有 PatternLayout 和 SimpleLayout。PatternLayout 允许开发者自定义输出格式,例如 `log4j.appender.stdout.layout.ConversionPattern` 可以定义输出格式,如 `%5p[%t](%F:%L)-%m%n` 表示输出级别、线程名、文件名和行号、消息及换行符。 4. **日志级别**: log4j 支持多种日志级别,包括 DEBUG、INFO、WARN、ERROR 和 FATAL,它们按照严重性递增排序。开发过程中可以根据需要设置日志级别,例如 `log4j.rootLogger=debug, stdout, R` 表示根 Logger 的日志级别为 DEBUG,同时输出到控制台和文件。 5. **配置文件**: log4j 的配置通常通过 log4j.properties 或 log4j.xml 文件完成。XML 配置文件更便于读写,而 properties 文件则更简洁。配置文件包含了 Loggers、Appenders 和 Layouts 的详细信息。 实际应用中,开发者可以根据需求调整日志级别,选择合适的 Appender 和 Layout,以及定制日志文件的存储路径和大小限制。例如,RollingFileAppender 可以在文件大小超过设定值时自动创建新的日志文件。通过合理的配置,log4j 能够帮助开发者实现高效、有序的日志管理,提高开发效率,同时方便后期的问题排查和系统监控。 掌握 Java 中 log4j 的使用是每个 Java 开发者必备的技能,它不仅能提供清晰的代码执行轨迹,还有助于优化性能,确保系统的稳定运行。通过深入理解 log4j 的核心概念和实践,开发者可以更加游刃有余地处理各种日志相关的任务。

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.5/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/hadoop-3.3.1/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap') at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:394) at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:370) at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:60) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:708) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.hadoop.util.RunJar.run(RunJar.java:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

2023-06-03 上传