【问题标题】:Cant get Log4j Database logging working无法让 Log4j 数据库日志记录工作
【发布时间】:2015-09-07 03:56:15
【问题描述】:

我正在尝试将 log4j 数据库日志配置到 maven Web 项目中,但无法使其正常工作。如果有人能指出我做错了什么,将不胜感激。

我创建了一个 maven web 项目并将其部署在 jboss wildfly 中。

我已经添加了这两个依赖项。

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.36</version>
    </dependency>

我已经在资源下添加了 log4j.properties 文件。

log4j.rootLogger = DEBUG, DB

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DB.URL=jdbc:mysql://localhost:3306/pos_test

log4j.appender.DB.driver=com.mysql.jdbc.Driver

log4j.appender.DB.user=root
log4j.appender.DB.password=password

log4j.appender.DB.sql=INSERT INTO myLogs VALUES('%X{User}','%d{yyyy-MM-dd HH:mm:ss}','%C','%p','%m')

log4j.appender.DB.layout=org.apache.log4j.PatternLayout

在我的代码中,我尝试按如下方式记录,

logger.info("Testing info");
logger.debug("Testing Debug");

我使用以下 sql 来创建数据库表。

CREATE TABLE myLogs (             
   USER_ID  varchar(20) NOT NULL,     
   LOG_DATE  date NOT NULL,           
   LOGGER  varchar(50) NOT NULL,      
   LEVEL  varchar(10) NOT NULL,       
   MESSAGE  varchar(1000) NOT NULL   
);

日志中没有错误,并且记录器信息也没有打印在服务器日志上。

日志信息仍然没有添加到数据库中。

我在这里缺少什么?

问候,

【问题讨论】:

    标签: java maven logging log4j


    【解决方案1】:

    对我来说概念上你做的一切都是对的。

    我对wildfly了解不多,但我会尝试以下:

    1. 确保您的整个日志记录配置已正确部署。 有多种方法可以做到这一点:

      • 使用您最喜欢的工具(winrar 或其他工具)打开您的 WAR/EAR,并查看日志记录属性文件是否确实存在于正确的位置(对于 WAR,WEB-INF\classes)。

      • log4j 依赖项也是如此 - 它应该正确打包到“lib”文件夹中

    2. 尝试任何不同的附加程序,比如控制台附加程序或文件附加程序。只是为了确保它有效。甚至可能同时使用两个附加程序(log4j 允许这样做)

    3. 也许您确实有一些错误,但它们没有被日志记录系统截获,因为您使用的唯一附加程序是 db appender,并且出现了问题。

    4. 您对日志系统的特定调用是否真的会导致调用 db appender?确保它将调试 log4j 的最佳方法 - 相信我,这并不难,这很容易理解 :)

    希望对你有帮助

    标记

    【讨论】:

    • 嗨,马克感谢您的回复。配置文件和jar在正确的位置。我如何尝试拥有多个附加程序,但它没有工作。我尝试使用控制台和数据库附加程序,但控制台没有打印输出。
    • 我尝试让 log4j.properties 文件仅使用控制台附加程序。还是不行。
    • 我认为这意味着您的配置没有被处理。最好的方法是从这里调试。只需进入日志调用并查看实际使用了哪些附加程序。尝试显式使用根记录器进行调试......也许你正在使用弹簧或其他东西?如果它只是一个 webapp 和 log4j,请阅读这篇文章,它可能会有所帮助:codejava.net/coding/…
    • 嗨,马克感谢您提供的信息。我正在使用带有 log4j 的普通 Web 应用程序。但我没有使用任何 servlet。我有几个类可以使用 rest easy 公开一个 rest api。这可能是 log4j 属性文件没有被拾取的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2023-03-14
    • 2011-06-17
    • 2011-02-20
    • 2013-11-08
    • 2020-12-07
    • 1970-01-01
    相关资源
    最近更新 更多