java - Log4j 数据库附加程序

标签 java logging log4j

我希望 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/

相关文章:

java - 如何获取java中共享点项目的listItemId值

java - 具有排列的多个输入的 JOptionPane

我可以获得指向当前函数的指针吗?

python - 如何使用 Python 中传播的方法参数覆盖错误日志记录?

java - 典型的 log4j 布局

java - 如何进行简单的log4j配置?

java - 网页中的 GPS 位置

java - 使用hibernate读取大量数据时OutOfMemory

logging - 通过 HTTP 在 Web 服务器上拖尾文本文件

log4j - jboss 作为 7.1.1 最终日志记录