将log4j.properties文件从Log4j版本1迁移到2的合适指南

原子潜艇

我目前正在从事一个大型项目,该项目仅使用log4j版本1(因为它是很久以前开发的),并且我们最近已考虑迁移到log4j版本2。尽管我已经替换了许多代码参考并添加了依赖项,该项目使用了几十个以log4j.properties文件形式的自定义配置文件。

我只是想知道是否有指南详细说明了如何在log4j.properties和log4j2.properties之间进行转换,因为似乎属性文件格式仍在使用中。由于该项目涵盖了各种各样的属性,因此这里有一个毯子转换器手册,因为我们希望避免尝试转换为xml格式,因为我们之前都没有使用过它。

游民

不,没有指南可以告诉您如何在Log4j 1属性和Log4j 2属性之间进行转换。实际上这将是相当复杂的,因为它必须完成两件事:

  1. 描述Log4j 2属性的语法,以及与Log4j 1属性的区别。
  2. 描述各种元素之间的配置差异,例如ConsoleAppender,RollingFileAppender等。

Log4j配置指南的确提供了属性语法的概述,尽管它可以使用一些更详细的说明。

老实说,我拒绝使用属性来实现配置,因为配置在Log4j 2中的工作方式非常不同。无论使用哪种配置语法,配置都将转换为节点定义的层次结构,每个节点定义都包含键/值属性。从本质上讲,属性文件不是分层的。要模拟,您必须创建属性名称,其中元素以点表示法表示。例如,appender.console表示这是控制台appender的配置,所有以其开头的字段都是属性或子节点。当定义类似RollingFileAppender之类的东西时,这变得非常麻烦(IMO)。在属性中,您具有:

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 2
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=100MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 5

与对应的XML

<RollingFile name="RollingFile" fileName="${filename}" filePattern="target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz">
  <PatternLayout pattern="%d %p %C{1.} [%t] %m%n"/>
  <Policies>
    <TimeBasedTriggeringPolicy interval="2" modulate="true" />
    <SizeBasedTriggeringPolicy size="100MB" />
  </Policies>
  <DefaultRolloverStrategy max="5"/>
</RollingFile>

同样,YAML和JSON本质上是分层的,因此也是配置的不错选择。在JSON中,它将是:

"RollingFile": {
  "name": "RollingFile,
  "fileName": "${filename}",
  "filePattern": "target/rolling2/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz",
  "PatternLayout": {
    "Pattern": "%d %p %C{1.} [%t] %m%n"
  },
  "Policies": {
    "TimeBasedTriggeringPolicy": {
      "interval": 2,
      "modulate": true,
    },
    "SizeBasedTriggeringPolicy": {
      "size": "100MB"
    }
  }
}

但是您会注意到,即使在这里,XML也可以比JSON占用更少的空间。这主要是因为在XML中,属性可以表示为元素上的属性或子元素。如果在XML示例中使用了子元素,则其大小基本上与JSON示例相同。

就是说,如果您将此处显示的属性语法与相应的XML或JSON进行比较,则应提供有关其他元素必须执行的操作的指南。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Log4j 2不再支持log4j.properties文件?

来自分类Dev

无法将事件从Log4J导入Flume

来自分类Dev

Log4j 2.如何获取log4j的调试消息?

来自分类Dev

从log4j 1.2迁移到log4j 2-如何获取所有附加程序列表和滚动文件策略

来自分类Dev

Log4j 2 JSON配置

来自分类Dev

从log4j 1.2迁移到log4j 2:LevelRangeFilter

来自分类Dev

Log4j 2未写入文件

来自分类Dev

混合log4j 1.x和log4j 2

来自分类Dev

将Log4J写入jTextArea

来自分类Dev

改造-Log4j

来自分类Dev

从log4j 1.2.17迁移后的log4j 2.2问题

来自分类Dev

安全/加密log4j文件

来自分类Dev

在从log4j 1.2到log4j 2的迁移中,使用DailyRollingFileAppender类怎么办?

来自分类Dev

从log4j迁移到log4j2-属性文件配置

来自分类Dev

是否将log4j与SWIG / JNI集成?

来自分类Dev

将LogStash Log4j配置升级到Log4j2

来自分类Dev

无法从YAML文件自动配置log4j 2

来自分类Dev

使用Log4j Bridge从log4j1迁移到log4j2

来自分类Dev

Log4j创建动态文件

来自分类Dev

将log4j.properties移出jar导致log4j警告(未生成日志)

来自分类Dev

从log4j 1.2迁移到log4j 2-如何获取所有附加程序列表和滚动文件策略

来自分类Dev

Log4j 2 JSON配置

来自分类Dev

禁止将log4j用于couchbase消息

来自分类Dev

将Log4J写入jTextArea

来自分类Dev

log4j不读取其log4j.properties文件

来自分类Dev

Mybatis log4j如何配置log4j将sql日志打印到文件

来自分类Dev

%c {1。}变为什么版本的log4j

来自分类Dev

Log4j无法登录文件

来自分类Dev

log4j无法写入文件