此 XML 配置的正确 Java 属性文件翻译是什么?

问题描述 投票:0回答:1

背景

我一直在使用 Java 属性文件搜索特定于配置 log4j2 的文档,但我能找到的只是一些相当基本的示例。我找到的大多数文档(如果存在)都展示了如何在 XML 文件中进行 log4j2 配置。更具体地说,我需要在 Java 属性文件中配置一个

DynamicThresholdFilter
过滤器。

我在 log4j2 手册中找到了这个 DynamicThresholdFilter XML 配置示例。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"
                          onMatch="ACCEPT" onMismatch="NEUTRAL">
    <KeyValuePair key="User1" value="DEBUG"/>
  </DynamicThresholdFilter>
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
      <BurstFilter level="INFO" rate="16" maxBurst="100"/>
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

我尝试将此配置转换为 Java 属性语法,但我还没有完全正确。

status = warn
name = MyApp
packages =

dynamicThresholdFilter.key = loginId
dynamicThresholdFilter.defaultThreshold = ERROR
dynamicThresholdFilter.onMatch = ACCEPT
dynamicThresholdFilter.onMismatch = NEUTRAL
dynamicThresholdFilter.Pairs.0.key = User1
dynamicThresholdFilter.Pairs.0.value = DEBUG

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = logs/app.log
appender.rolling.filePattern = logs/app-%d{MM-dd-yyyy}.log.gz
appender.rolling.filter.burst.type = BurstFilter
appender.rolling.filter.burst.level = INFO
appender.rolling.filter.burst.rate = 16
appender.rolling.filter.burst.maxBurst = 100
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

rootLogger.level = error
rootLogger.appenderRef.rolling.ref = RollingFile

问题

上述 XML 配置的正确 Java 属性转换是什么?

java log4j2 properties-file
1个回答
0
投票

2.x 中的属性配置工厂要求您为每个子组件(对应于复杂的 XML 元素)指定一个

type
属性。同时,您为子组件使用的前缀并不重要:

dynamic.type = DynamicThresholdFilter
dynamic.key = loginId
dynamic.defaultThreshold = ERROR
dynamic.onMatch = ACCEPT
dynamic.onMismatch = NEUTRAL
dynamic.p0.type = KeyValuePair
dynamic.p0.key = User1
dynamic.p0.value = DEBUG

备注:在 3.x 中,我们将切换到

jackson-dataformat-properties
,以在 XML 和属性之间提供更“标准”的映射(参见 PR#2170),但代价是为粉丝提供额外的依赖项属性格式。

在这种情况下,映射会更加简单,您只需为

empty
元素添加 type 属性即可:

DynamicThresholdFilter.key = loginId
DynamicThresholdFilter.defaultThreshold = ERROR
DynamicThresholdFilter.onMatch = ACCEPT
DynamicThresholdFilter.onMismatch = NEUTRAL
DynamicThresholdFilter.KeyValuePair[1].key = User1
DynamicThresholdFilter.KeyValuePair[1].value = DEBUG

log4j-config-properties
神器将从版本
3.0.0-beta2
开始可用。

© www.soinside.com 2019 - 2024. All rights reserved.