我希望 log4j 将我的错误记录在 MySql 数据库中,但关于这方面的官方文档非常少(为什么?)。 无论如何,这是我对 log4j.xml 配置文件的尝试:
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="jdbcAppender" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:mysql://my_host/my_database" />
<param name="Driver" value="com.mysql.jdbc.Driver" />
<param name="User" value="my_user_name" />
<param name="Password" value="my_passwod" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO errorlogs (Date, log_level, Application, Message, Exception) VALUES (TIMESTAMP(now()),'%p', ?? '%m', '%e' )"
/>
</layout>
</appender>
我需要自定义“应用程序”参数。在 C# 中使用 log4net,在我的代码中,我将像这样添加它:
log4net.GlobalContext.Properties["Application"] = applciation;
并像这样在我的 xml 配置文件中添加它:
<parameter>
<parameterName value="?application" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{Application}" />
</layout>
</parameter>
我想知道如何用 log4j 做同样的事情?
谢谢!
最佳答案
好的,感谢这篇文章,我找到了如何做到这一点:Log4J Custom Fields
基本上,我使用 MDC 添加自定义字段,如下所示:
MDC.put("Application", application);
在我的配置文件中,我使用 %X{property_name} 来获取值。像这样:
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO errorlogs (Date, log_level, Application, Message, Exception) VALUES (TIMESTAMP(now()),'%p', '%X{Application}' '%m', '%e' )"
/>
</layout>
关于java - Log4j 数据库附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444683/