2010-08-12 104 views
2

重新思考的IDEA!JDBC-appender Log4j

所以,我一直在想周末,不能让这一个去。我决定重新尝试让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(?); 
+4

用自行开发的日志框架替换大型应用程序中的log4j日志记录?男孩,这次你做错了什么? – 2010-08-12 11:34:47

+0

这个日志记录“简单”用于审核使用的功能类型。在其他类型的日志中仍然使用log4j。所以它不是那么大,可能是一个不好的解释:)。 – user373455 2010-08-12 11:39:14

+0

修正标题中的错字。 – 2010-08-12 11:44:18

回答

3

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

编辑:

我的建议是有一个名为附加器,它记录到数据库中。

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

编辑2:

,我认为它会一直不如让原来问题上的立场,并提出一个新的,但在这里不用。 :)

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

设置记录器,名称是获取记录器的重要位。

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

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

现在你可以用引用记录在java代码:通过设置记录器加至FALE,您添加该记录由<root>在配置中指定的默认记录器停止来自任何java文件的

。然后你像使用记录器一样,用usageLog.debug("Debug message");什么的。

编辑3:

PatternLayout javaDoc在ConversionPattern要使用的标志。

+0

不幸的是,由于各种原因,这不是一种选择,但我知道这通常是一个很好的选择。感谢您的回答! – user373455 2010-08-12 11:44:37

+1

@Fredrik_jakob,为什么它不是一个选项?也许对使用JDBCAppender/DBAppender/log4j存在一个误解,我们可以为您解决这个问题。重复使用经过验证的库和代码比试图推出自己的库更为简单。 – 2010-08-12 13:08:32

+0

我按照你的想法发布了一个关于Log4j的新问题。 我有点设法创建一个Java-logging-thingy,但我不能说我很满意,所以我准备好做这个想法,而不是尝试解决它的问题。 – user373455 2010-08-15 14:10:04