java - Log4j2 - 如何将 XML 配置转换为 JDBC appender 的 .properties 格式

标签 java xml jdbc log4j configuration-files

如何将此 log4j2.xml 配置片段转换为 log4j2.properties 格式?

我不能在我的 maven + netbeans 项目中使用 XML 格式,因为我根本无法让 log4j2 解析和响应 log4j2.xml 文件 - 无论我将它放在项目中的什么位置,它都会被 log4j2 忽略。

但是 main/resource 中的 log4j2.properties 被解析并响应,所以我 - 必须 - 使用 .properties ...:

 <JDBC name="databaseAppender" tableName="LOGGING.APPLICATION_LOG">
   <ConnectionFactory class="log4j_tutorial.ConnectionFactory"
    method="getDatabaseConnection" />
   <Column name="EVENT_DATE" isEventTimestamp="true" />
   <Column name="LEVEL" pattern="%level" />
   <Column name="LOGGER" pattern="%logger" />
   <Column name="MESSAGE" pattern="%message" />
   <Column name="THROWABLE" pattern="%ex{full}" />
  </JDBC>

我通过官方 Apache Maven log4j 工件使用 log4j2 2.10.0。

什么是 -correct- log4j2.properties 配置才能 100% 等同于上述配置?

我几乎连续两天都在让 JDBC appender 工作,所以是时候寻求帮助了,methinks。

我当前的 log4j2.properties 文件可以正常输出到文件和控制台:

appender.file.type = File
appender.file.name = fileAppender
appender.file.fileName = verdi.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{YYYY-mm-dd HH:mm:ss.SSS} %-5p %c{1} - %m %n

appender.out.type = Console
appender.out.name = out
appender.out.layout.type = PatternLayout
appender.out.layout.pattern = %d{YYYY-mm-dd HH:mm:ss.SSS} %-5p %c{1} - %m %n

rootLogger.level = INFO
rootLogger.appenderRef.file.ref = fileAppender
rootLogger.appenderRef.out.ref = out

我实际上只是想在 log4j2.properties 文件中添加一个 JDBC appender - 数据库表已经创建,并且我已经根据文档实现了 ConnectionSource 接口(interface),并且它由连接池数据源支持,根据文档。然而,官方的 Apache 文档非常模糊,而且非常稀疏,没有确切的细节,尤其是在配置方面。

我找不到关于指定 JDBC appender 中应包含哪些元素的官方列表,以及如何在 log4j2.properties 文件中指定上述明显的 XML 层次结构。我能找到的所有 JDBC appender 配置示例都是 -ALWAYS- log4j2.xml/XML based examples only.

或者我应该放弃,而是花几天/几周的时间来尝试让 log4j XML 配置正常工作?

谢谢!

最佳答案

我试图做同样的事情,但我真的很惊讶地发现在任何地方都没有 JDBCAppender 属性配置的例子。

我确实发现,由于我在 OSGI 下使用 PAX 日志记录,我可以通过设置 org.ops4j.logging.log4j2.config.file 来引用 XML 配置文件。让它工作后,我现在回过头来找出属性方法,所以我认为这就是您要找的东西:

appender.file.type = File
appender.file.name = fileAppender
appender.file.fileName = verdi.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = %d{YYYY-mm-dd HH:mm:ss.SSS} %-5p %c{1} - %m %n

appender.out.type = Console
appender.out.name = out
appender.out.layout.type = PatternLayout
appender.out.layout.pattern = %d{YYYY-mm-dd HH:mm:ss.SSS} %-5p %c{1} - %m %n

appender.db.type = Jdbc
appender.db.name = dbAppender
appender.db.tableName = LOGGING.APPLICATION_LOG
appender.db.cf.type = ConnectionFactory
appender.db.cf.class = log4j_tutorial.ConnectionFactory
appender.db.cf.method = getDatabaseConnection
appender.db.col1.type = Column
appender.db.col1.name = EVENT_DATE
appender.db.col1.isEventTimestamp = true
appender.db.col2.type = Column
appender.db.col2.name = LEVEL
appender.db.col2.pattern = %level
appender.db.col3.type = Column
appender.db.col3.name = LOGGER
appender.db.col3.pattern = %logger
appender.db.col4.type = Column
appender.db.col4.name = MESSAGE
appender.db.col4.pattern = %message
appender.db.col5.type = Column
appender.db.col5.name = THROWABLE
appender.db.col5.pattern = %ex{full}

rootLogger.level = INFO
rootLogger.appenderRef.file.ref = fileAppender
rootLogger.appenderRef.out.ref = out
rootLogger.appenderRef.db.ref = dbAppender

我还没有尝试过这个确切的配置,因为我使用的是 DataSource 而不是 ConnectionFactory,但我认为这在理论上应该可行。希望对您有所帮助。

编辑:如果需要数据源而不是连接工厂,则按要求添加数据源定义行:

appender.db.datasource.type = DataSource
appender.db.jndiName = osgi:service/dsName

关于java - Log4j2 - 如何将 XML 配置转换为 JDBC appender 的 .properties 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942539/

相关文章:

java - 查找错误并进行比较

java - 更改 MultiKeyMap 的每个值 (Apache Commons)

XML::Twig purge 在 perl 程序中不释放系统内存

java - 同步访问数据库?

java - 在Java中,多个线程想要操作一个对象,如何让一个对象操作该对象,而其他线程等待工作完成?

sql - 如何通过 "nodes"命令在 SQL XML 查询中使用命名空间?

java - 使用 jaxb 从 xml 元素列表中提取值

Java 类型映射到 Java SQL 类型 Util

java - 这会导致内存泄漏吗?

java - 使用翻译api后出现错误