JDBC-appender Log4j

时间:2010-08-12 11:25:50

标签: java jdbc log4j

重新思考IDEA!

所以,我周末一直在思考,不能放过这个。我决定重新尝试让log4j工作。

我一直在做一些编码,并认为我得到了它的工作。除此之外,我真的不明白如何插入记录器。我已经创建了一个JDBC-appender,SQL看起来像这样:

    <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" 
          value="INSERT INTO audit (timestamp, user, operation, source, resourceRange, additionalInfo) VALUES ('%d{yyyy-MM-dd H:mm:s,SSS}','%m', '%m', '%m', '%m', '%m')"
        /> 
    </layout> 

这是对的吗?所有值都具有VARCHAR数据类型。

但是,对我来说真正的问题是如何在Java代码中记录它? 无法真正理解要插入哪些值以获取插入数据库的正确值。

 logger.log(?);

2 个答案:

答案 0 :(得分:3)

只是为了确保;你不能使用log4j并使用JDBCAppender或DBAppender? (Log to a database using log4j

编辑:

我的建议是拥有一个登录数据库的命名appender。

通过关闭可加性(log4j.additivity.database=false),它不会将日志语句“推送”到根记录器,从而将该数据保留在默认日志文件/控制台之外。 Logger.getLogger("database");可以从源代码中的不同位置检索指定的记录器。

编辑2:

我认为最好让原来的问题站起来,然后问一个新的问题,但是这里有。 :)

appender必须包含有关数据库连接的信息,作为对连接的引用:<param name="connector" value="name.of.existing.ConnectionHandler" />或指定urlusernamepassword

设置记录器,名称是获取记录器的重要位。通过设置记录器对fale的可加性,可以阻止它将此记录添加到配置中由<root>指定的缺省记录器中:

<appender name="JDBC" class="org.apache.log4j.jdbcplus.JDBCAppender">
    [...]
</appender>
<logger name="myLogger" additivity="false">
    <appender-ref ref="JDBC"/>
    [...]
</logger>

现在,您可以使用以下命令引用java代码中的记录器:

private static final Logger usageLog = Logger.getLog("myLogger");

来自任何java文件。然后你就像使用usageLog.debug("Debug message");或其他东西一样使用记录器。

编辑3:

请参阅PatternLayout javaDoc,了解在ConversionPattern中使用哪些标志。

答案 1 :(得分:0)

LogBack提供开箱即用的logging to a database