有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JDBCappender 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(?);

共 (2) 个答案

  1. # 2 楼答案

    只是为了确保;不能使用log4j和jdbcapender或DBAppender吗? (Log to a database using log4j

    编辑:

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

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

    编辑2:

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

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

    设置记录器时,名称是获取记录器的重要部分。通过将loggers additivity设置为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,了解在转换模式中使用哪些标志