3

我正在使用 JBOSS 4.2.2 服务器来部署多个 Web 应用程序。每个应用程序都使用 Hibernate,并且每个应用程序都有单独的日志文件和单独的附加程序。现在对于一个应用程序的 Hibernate 日志记录语句应该进入该特定应用程序的日志文件。有人知道如何配置 log4j.xml 文件来实现这一点吗?

4

4 回答 4

2

在 JBoss 中,您可以使用此处描述的 TCL 过滤器。只需将过滤器添加到您要操作的配置部分。

示例(稍微改编自上述源代码,请参阅 Deploy Application As .war File部分):

<appender name="App1Log" class="org.apache.log4j.FileAppender">
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" />
    <param name="Append" value="false"/>
    <param name="File" value="${jboss.server.log.dir}/app1.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%8.8t][%20.20c] %m%n"/>
    </layout>
    <filter class="org.jboss.logging.filter.TCLFilter">
        <param name="AcceptOnMatch" value="true"/>
        <param name="DeployURL" value="app1-exp.war"/>
    </filter>
</appender>
于 2010-02-03T15:11:38.623 回答
0

如果您有多个应用程序,每个应用程序都在运行 hibernate,只需在应用程序 log4j.xml 文件中使用 hibernate 类的类路径(即 org.hibernate)创建一个休眠附加程序,这应该将输出定向到指定的日志文件。

如果这不起作用,请检查 hibernate 是否没有拾取已捆绑到任何库 jar 中的 log4j 属性文件。如果 hibernate 找不到 log4j.xml 文件,那么您应该在 system.out 中收到一条警告消息

卡尔

于 2009-03-11T21:48:23.327 回答
0
  1. 添加 NDC。日志仍然转到同一个文件,但该文件将更容易 grep。
  2. 更改 JBoss 类加载,以便每个应用程序都可以拥有自己的 log4j.xml
于 2009-11-08T08:53:10.197 回答
0

我不能 100% 确定我是否正确理解了您的问题。我假设您希望根据发出日志语句的应用程序将同一记录器的输出定向到不同的文件。

Log4J 提供了一个映射诊断上下文。在休眠代码运行之前,可以将此上下文设置为不同的值(取决于您的应用程序)。hibernate 发出的每个日志语句也包含 MDC 的内容。

有了它,您可以编写一个特殊的附加程序来检查 MDC 的内容并将日志消息写入不同的文件。

我在一个繁重的多线程应用程序中使用了这种方法,其中每个线程都生成自己的日志文件,并且效果很好。

于 2009-10-01T16:56:45.930 回答