如何使用jboss-log4j.xml文件将Hibernate记录器语句指向不同日志文件中的不同应用程序

时间:2009-02-13 19:07:48

标签: hibernate logging jboss log4j

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

4 个答案:

答案 0 :(得分:2)

在JBoss中,您可以按照here所述使用TCL过滤器。只需将过滤器添加到要操作的配置部分即可。

示例(稍微改编自上面的源代码,请参阅部署应用程序为.war文件部分):

<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>

答案 1 :(得分:0)

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

如果这不起作用,请检查hibernate是否未获取已捆绑到任何库jar中的log4j属性文件。如果hibernate无法找到log4j.xml文件,那么您应该在system.out

中收到警告消息

卡尔

答案 2 :(得分:0)

如果我理解你的问题,我不能100%确定。我假设您希望将同一记录器的输出定向到不同的文件,具体取决于发出日志语句的应用程序。

Log4J提供Mapped Diagnostic context。在运行hibernate代码之前,可以将此上下文设置为不同的值(取决于您的应用程序)。然后,hibernate发出的每个日志语句也包含MDC的内容。

通过这种方式,您可以编写一个特殊的appender来检查MDC的内容,并将日志消息写入不同的文件。

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

答案 3 :(得分:0)

  1. 添加NDC。日志仍然会转到同一个文件,但文件将更容易grep。
  2. 更改JBoss类加载,以便每个应用程序都可以拥有自己的log4j.xml