重新思考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(?);
答案 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" />
或指定url
,username
和password
。
设置记录器,名称是获取记录器的重要位。通过设置记录器对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。