Log4j数据库应用程序[英] Log4j database appender

本文是小编为大家收集整理的关于Log4j数据库应用程序的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

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

我需要自定义的"应用程序"参数.使用log4net在C#中,在我的代码中,我会这样添加:

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自定义字段/p>

基本上,我使用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> 

本文地址:https://www.itbaoku.cn/post/1574982.html

问题描述

I want log4j to log my errors in a MySql database, but the official documentation on this is pretty sparse (why?). Anyway, here's my attempt at a log4j.xml config file:

<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> 

I need the "Application" parameter to be custom. With log4net in C#, in my code I would add it like this:

log4net.GlobalContext.Properties["Application"] = applciation;

and add it like so in my xml config file:

<parameter>
    <parameterName value="?application" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{Application}" />
    </layout>
  </parameter>

I was wondering how can I do the same thing with log4j?

Thanks!

推荐答案

Ok I found how to do this thanks to this post: Log4J Custom Fields

Basically, I use the MDC to add my custom fields, like this:

MDC.put("Application", application);

And in my config file, I use %X{property_name} to get the value. like this:

<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>