Java JDBC appender Log4j

Java JDBC appender Log4j,java,jdbc,log4j,Java,Jdbc,Log4j,重新思考的想法 所以,这个周末我一直在想,不能放过这一次。我决定重新尝试让log4j工作的想法 我一直在做一些编码,并认为我得到了它的工作。除此之外,我真的不明白如何插入到记录器中。我创建了一个JDBC appender,SQL如下所示: <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="INSERT INT

重新思考的想法

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

LogBack提供开箱即用的服务。

只是为了确保;您不能使用log4j和jdbcapender或DBAppender吗? ()

编辑:

我的建议是使用一个命名的appender来记录数据库

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

编辑2:

我认为最好还是保留原来的问题,再问一个新的问题,但问题来了。:)

追加器必须包含有关数据库连接的信息,作为对连接的引用:
,或者通过指定
url
用户名
密码

设置记录器时,名称是获取记录器的重要位。通过将loggers additivity设置为fale,您可以阻止它将此日志添加到配置中由
指定的默认日志中:

<appender name="JDBC" class="org.apache.log4j.jdbcplus.JDBCAppender">
    [...]
</appender>
<logger name="myLogger" additivity="false">
    <appender-ref ref="JDBC"/>
    [...]
</logger>
从任何java文件。然后像往常一样使用记录器,使用
usageLog.debug(“调试消息”)或者什么的

编辑3:


请参阅转换模式中要使用的标志。

用自行开发的日志框架替换大型应用程序中的log4j日志记录?小子,这次你做错了什么?这个日志“简单地”用于审核所使用的功能类型。在其他类型的日志记录中仍然使用log4j。所以它不是那么大,可能是一个不好的解释:)。不幸的是,由于各种原因,这不是一个选择,但我知道这通常是一个很好的选择。谢谢你的回答@弗雷德里克·雅各布,为什么这不是一个选择?关于使用jdbcapender/DBAppender/log4j,可能有一个误解,我们可以为您澄清一下。重复使用一个经过验证的库和代码可能比尝试使用自己的库和代码要简单得多。我设法创建了一个Java日志记录工具,但我不能说我满意,所以我准备用这个想法来解决它的问题。谢谢!我让jdgbc appender工作,它将信息插入数据库。问题是我不知道如何将不同的信息输入数据库?因为我在SQL查询中有%m作为值,所以如果我这样做,所有列都将用“abc”填充:logger.log(“abc”);。
private static final Logger usageLog = Logger.getLog("myLogger");