我目前正在从事一个大型项目,该项目仅使用log4j版本1(因为它是很久以前开发的),并且我们最近已考虑迁移到log4j版本2。尽管我已经替换了许多代码参考并添加了依赖项,该项目使用了几十个以log4j.properties文件形式的自定义配置文件。
我只是想知道是否有指南详细说明了如何在log4j.properties和log4j2.properties之间进行转换,因为似乎属性文件格式仍在使用中。由于该项目涵盖了各种各样的属性,因此这里有一个毯子转换器手册,因为我们希望避免尝试转换为xml格式,因为我们之前都没有使用过它。
不,没有指南可以告诉您如何在Log4j 1属性和Log4j 2属性之间进行转换。实际上这将是相当复杂的,因为它必须完成两件事:
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] 删除。
我来说两句