Log4j 2 与 Log4j 1 的兼容性

API Compatibility

Log4j 2 通过提供包含这些方法的类的替代实现来提供对 Log4j 1 日志记录方法的支持。这些类可在随项目一起分发的 log4j-1.2-api jar 中找到。所有执行日志记录的调用都将导致传递到日志记录方法的数据被转发到 Log4j2 API,在此可以通过 Log4j 2 API 的实现对其进行处理。

Configuration Compatibility

Log4j 2 为 Log4j 1 配置文件提供实验性支持。 Log4j 1 发行版中提供的 Appender,布局和过滤器的配置将重定向到其 Log4j 2 副本-除了已实现的重写策略。这意味着,尽管这些组件的行为类似,但可能并不完全相同。例如,由 XMLLayout 生成的 XML 可能与 Log4j 1XMLLayout 生成的 XML 不完全匹配。

此外,Log4j 2 支持自定义 Log4j 1 Appender,过滤器和布局,但有一些限制。由于 Log4j 2 中可能不存在原始 Log4j 1 组件,因此扩展它们的自定义组件将失败。

由于对 Log4j 1 的支持是一项实验性功能,必须采取以下步骤之一才能启用它:

  • 将系统属性“ log4j1.compatibility”设置为“ true”。然后,Log4j 2 将 log4j.properties,log4j-test.properties,log4j.xml 和 log4j-test.xml 添加到在 Classpath 上搜索的配置文件中。

  • 将 Log4j 1 系统属性“ log4j.configuration”设置为 log4j 1 配置文件的位置。这些文件的文件 extensions 必须为“ .properties”或“ .xml”。

Supported Components

Appenders

  • AsyncAppender

  • ConsoleAppender

  • DailyRollingFileAppender

  • FileAppender

  • NullAppender

  • RewriteAppender (limited)

  • RollingFileAppender

  • SyslogAppender

Filters

  • DenyAllFilter

  • LevelMatchFilter

  • LevelRangeFilter

  • StringMatchFilter

Layouts

  • HtmlLayout

  • PatternLayout

  • SimpleLayout

  • TTCCLayout

  • XmlLayout

Rewrite Policies

  • MapRewritePolicy

  • PropertyRewritePolicy

不支持或未实现的组件

Appenders

  • JDBCAppender(无法 Map 到 Log4j 2 的 JdbcAppender)

  • JMSAppender

  • SMTPAppender

  • SocketAppender(要求使用 SerializedLayout,这有安全隐患)

  • SocketHubAppender(要求使用 SerializedLayout,这有安全风险)

  • TelnetAppender(安全风险)

Rewrite Policies

  • ReflectionRewritePolicy

  • 自定义重写策略,因为 LoggingEvent 当前为空操作。

Renderers

Log4j 2 当前将忽略渲染器。