【问题标题】:JDBC-appender Log4jJDBC-appender Log4j
【发布时间】:2010-08-12 11:25:50
【问题描述】:

重新思考的想法!

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

【问题讨论】:

  • 用自研的日志框架替代大应用中的log4j日志?小子,你这次做错了什么?
  • 此日志记录“只是”用于审核所使用的功能类型。仍然在其他类型的日志记录中使用 log4j。所以它不是那么大,可能是一个不好的解释:)。

标签: java jdbc log4j


【解决方案1】:

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

编辑:

我的建议是有一个命名的附加程序来记录到数据库。

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

编辑 2:

我认为保留原来的问题并提出一个新问题会更好,但还是这样吧。 :)

附加程序必须包含有关数据库连接的信息,作为对连接的引用:&lt;param name="connector" value="name.of.existing.ConnectionHandler" /&gt; 或通过指定 urlusernamepassword

设置记录器,名称是获取记录器的重要部分。通过将记录器可加性设置为 fale,您可以阻止它将此记录添加到配置中 &lt;root&gt; 指定的默认记录器:

<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 中使用哪些标志。

【讨论】:

  • 不幸的是,由于各种原因,这不是一个选择,但我知道这通常是一个不错的选择。感谢您的回答!
  • @Fredrik_jakob,为什么不是一个选项?也许对使用 JDBCAppender/DBAppender/log4j 存在误解,我们可以为您澄清。重用经过验证的库和代码可能比尝试使用自己的库和代码要简单得多。
  • 我按照你的想法发布了一个关于 Log4j 的新问题。我设法创建了一个 Java-logging-thingy,但我不能说我很满意,所以我准备改用这个想法并尝试解决它的问题。
  • 谢谢!我让 jdgbc-appender 工作并将信息插入数据库。问题是我不知道如何将不同的信息输入数据库?因为我在 SQL 查询中将 %m 作为 VALUES,所以如果我这样做,所有列都将填充 'abc':logger.log("abc");。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多