【问题标题】:How to configure Log4j to java Web application which uses Hibernate?如何将 Log4j 配置为使用 Hibernate 的 Java Web 应用程序?
【发布时间】:2015-04-20 09:58:07
【问题描述】:

我是 Log4j 的新手。通过遵循一些在线教程,我将 Log4j 集成到我的项目中。我正在使用 Exlipse。它是动态 web 项目并使用 Hibernate。我将 Log4j jarfile 添加到我的项目中,接下来我创建了 Log4j.xml 文件并放在 /src 文件夹下。我收到以下错误

log4j:ERROR Could not open [log4j.xml].
java.io.FileNotFoundException: log4j.xml (The system cannot find the file specified)

这是我的 xml 文件。

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 <log4j:configuration debug="true"  xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] %-5p %c{1}:%L - %m%n" />
    </layout>
</appender>

<appender name="file" class="org.apache.log4j.RollingFileAppender">
    <param name="append" value="false" />
    <param name="maxFileSize" value="10MB" />
    <param name="maxBackupIndex" value="10" />
    <param name="file" value="${catalina.home}/logs/ITS_Server.log" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] %-5p %c{1}:%L - %m%n" />
    </layout>
</appender>

<category name="org.hibernate">
    <priority value="DEBUG" />
</category>

<category name="java.sql">
    <priority value="debug" />
</category>

<logger name="org.hibernate">
    <level value="info"/> 
</logger>

<root>
    <level value="DEBUG" />
    <appender-ref ref="console" />
    <appender-ref ref="file" />

   </root>
 </log4j:configuration>

在 java 文件中,我将记录器称为

static Logger log = Logger.getLogger(HibernateUtil.class.getName());


static {
    try {
        DOMConfigurator.configure("log4j.xml");
 }
}

我哪里出错了,谁能帮帮我。

【问题讨论】:

  • 你能确保log4j xml文件存在于'src/main/resources/log4j.xml'这样的目录中吗?
  • @SaqibRezwan 现在可以看看我的文件夹结构吗
  • 我不确定。我所有的 Spring 项目结构都类似于 Eclipse 中的“Java 资源”->“src/main/resources”->log4j.properties。但是,由于许多原因(在 Eclipse 中),它可能看起来有所不同。您可以将项目文件夹(在硬盘中)中的文件路径检查为“src/main/resources/log4j.xml”吗?
  • @SaqibRezwan 我的日志系统现在工作正常我如何将所有与休眠信息相关的日志记录到文件中。查看我更新的 xml 文件。
  • 出了什么问题以及您是如何解决的?新问题/问题应该在一个新线程中。但是,在“Appender-ref ref”标签中使用rootLogger,并将“Level value”设为“INFO”。

标签: java xml hibernate logging log4j


【解决方案1】:

您的代码试图做的是手动加载 log4j 配置,但它无法从已部署的资源中找到该文件。

正确的方法是确保 log4j.xml 在您的 CLASSPATH 中。在 Eclipse 中,源文件夹将位于您的 CLASSPATH 中。所以,你可以把它放在那里。

为了保持文件井井有条,您可以在名为 resources 的 src(包)下创建一个源目录,并将 log4j.xml 放在那里。然后你可以避免调用DOMConfigurator.configure,log4j 会自动加载 log4j.xml。此外,请确保您将该资源文件夹作为构建路径中源文件夹的一部分。您可以通过右键单击资源文件夹 -> 构建路径 -> 用作源文件夹来做到这一点

编辑:

改变

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

如果用这个example测试没有帮助

编辑 2:

对于 Hibernate,您拥有最上面的 (org.hibernate),它将输出大量消息。那里的级别是INFO。

您可以将级别更改为错误以仅记录严重问题。将 org.hibernate 更改为 org.hibernate.SQL 将限制正在执行的 SQL DML 语句的消息类型。

在此处阅读更多信息 https://stackoverflow.com/a/436687/4388699https://stackoverflow.com/a/1978415/4388699

【讨论】:

  • 你到底是什么意思?我是否需要按名称资源创建一个文件夹。
  • 将 log4j.xml 复制到 Eclipse 项目的 src 文件夹中。在 IDE 中刷新项目。然后,注释掉.configure 调用
  • 是的,我按照你说的做了,但没用。日志未登录到文件中。
  • 是的,我到了true,但没有工作。我怀疑我的文件夹结构。对吗?
  • 将log4j.xml放到src的根目录下即可解决问题。如果您希望资源也位于 CLASSPATH 中,请右键单击项目 -> 属性 -> Java 构建路径 -> 在 Source 选项卡中添加资源文件夹
【解决方案2】:

将 log4j.xml 文件放在项目文件夹中,结构如下 'src/main/resources/log4j.xml'。

在 Eclipse 中它应该看起来像'Java Resources'->'src/main/resources'->'log4j.xml'

【讨论】:

猜你喜欢
  • 2015-01-28
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多