Log4j2:Properties格式下配置ColumnMapping列类型的疑问
解决Log4j2 Properties配置中ColumnMapping的类型参数冲突问题
问题描述
我想为ColumnMapping指定列类型参数,但type参数已经被用来声明当前配置项为ColumnMapping类型。我的Properties配置如下:
appender.message_appender.columnMappings[1].type = ColumnMapping appender.message_appender.columnMappings[1].name = journal_id appender.message_appender.columnMappings[1].type = java.lang.Integer # 不能有两个type参数
我不知道该怎么把columnMappings[1]的类型设为int。而XML格式可以这样实现:
<Jdbc name="databaseAppender" tableName="dsLogEntry" ignoreExceptions="false"> <DataSource jndiName="java:/comp/env/jdbc/TestDataSourceAppender" /> <ColumnMapping name="journal_id" type="java.lang.Integer"/> <MessageLayout /> </Jdbc>
解决方案
在Log4j2的Properties格式配置中,无需单独声明type=ColumnMapping——因为columnMappings本身就是ColumnMapping类型的列表,Log4j2会自动推断数组中每个元素的组件类型。直接移除多余的type=ColumnMapping配置,保留用于指定列数据类型的type参数即可:
appender.message_appender.columnMappings[1].name = journal_id appender.message_appender.columnMappings[1].type = java.lang.Integer
如果需要将日志事件中的特定字段映射到该列,还可以添加pattern参数指定字段来源(比如MDC中的journal_id):
appender.message_appender.columnMappings[1].name = journal_id appender.message_appender.columnMappings[1].type = java.lang.Integer appender.message_appender.columnMappings[1].pattern = %X{journal_id}
内容的提问来源于stack exchange,提问作者Грищенков Георгий
相关产品推荐
相关产品推荐

