JBossAS6.1不会使用log4j appenders-可能是一个bug?

JBossAS6.1不会使用log4j appenders-可能是一个bug?,jboss,log4j,jboss6.x,jboss-logging,Jboss,Log4j,Jboss6.x,Jboss Logging,我想在JBoss6.1部署中使用log4j appenders。当我很难让它工作时,我编写了一些测试代码,并注意到org.apache.log4j.Logger.getLogger(String)正在返回一个org.jboss.logmanager.log4j.BridgeLogger类型的对象 所以我想我有两个选择: (1) 尝试让getLogger调用返回apache log4j类型而不是JBoss BridgeLogger,或者 (2) 接受JBoss正在进行某种桥接,并让它使用我编写的需

我想在JBoss6.1部署中使用log4j appenders。当我很难让它工作时,我编写了一些测试代码,并注意到org.apache.log4j.Logger.getLogger(String)正在返回一个org.jboss.logmanager.log4j.BridgeLogger类型的对象

所以我想我有两个选择: (1) 尝试让getLogger调用返回apache log4j类型而不是JBoss BridgeLogger,或者 (2) 接受JBoss正在进行某种桥接,并让它使用我编写的需要它使用的log4j Appender

因此,尝试这些选项中的第一个: Logger.getLogger()委托LogManager.getLogger(字符串),它执行以下操作:

return getLoggerRepository().getLogger(String);
RepositorySelector在LogManager中是静态的,设置如下:

Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
repositorySelector = new DefaultRepositorySelector(h);
但是LogManager有一个setRepositorySelector,所以我得出的结论是JBoss启动过程中有东西在调用setRepositorySelector。为了测试这一点,我从测试日志代码中调用了setRepositorySelector(将其设置为默认的RepositorySelector,就像LogManager的静态初始值设定项那样),然后检查返回的记录器类型——它仍然是org.jboss.LogManager.log4j.BridgeLogger

现在我来谈谈我的第二个选择: 我想要的就是能够使用log4j appender——deploy/jboss-logging.xml文件中有很多注释掉的log4j appender,所以我想它们必须得到支持。因此,我把一个放在下面:

<log4j-appender name="MYTEMPFILE" class="org.apache.log4j.RollingFileAppender">
    <error-manager>
        <only-once/>
    </error-manager>

    <level name="DEBUG"/>

    <properties>
        <property name="file">${jboss.server.home.dir}/log/serverx.log</property>
        <property name="maximumFileSize">20480000</property>
        <property name="maxBackupIndex">5</property>
    </properties>

    <formatter>
        <pattern-formatter pattern="%d %-5p [%c] (%t) %m%n"/>
    </formatter>

</log4j-appender>
<!-- tried this too
<logger category="com.myco">
   <level name="DEBUG"/>
   <handlers>
      <handler-ref name="MYTEMPFILE"/>
   </handlers>
</logger>
-->
...
<root-logger>
    <!-- Set the root logger priority via a system property, with a default value. -->
    <level name="${jboss.server.log.threshold:DEBUG}"/>
    <handlers>
        <handler-ref name="MYTEMPFILE"/>
        <handler-ref name="CONSOLE"/>
        <handler-ref name="FILE"/>
    </handlers>
</root-logger>

${jboss.server.home.dir}/log/serverx.log
20480000
5.
...
通过该更改,我不仅无法获取serverx.log文件,而且无法将任何内容写入server.log(server.log在没有上述更改的情况下被填充)

我已经阅读了很多关于jboss-deployment-structure.xml的内容,并排除了log4j依赖项,但我对讨论的内容了解不够,不知道它是否与我的问题相关。我怀疑这与此无关

我甚至尝试部署这个听起来很相关的补丁: 但没有区别

有人吗

谢谢,
Paul

为了在应用程序的log4j.jar没有保存在EAR或WAR中的情况下使用您自己的log4j.xml,您必须执行以下操作

  • 设置环境变量:
    -Dlog4j.configuration=log4j.xml
  • 您必须在
    \server\default\deployers\jboss logging.deployer\META-INF\logmanager jboss beans.xml
    中注释给定的行


  • 希望这对您有用

    为了使用您自己的log4j.xml,如果您的应用程序的log4j.jar没有保存在EAR或WAR中,您必须执行以下操作

  • 设置环境变量:
    -Dlog4j.configuration=log4j.xml
  • 您必须在
    \server\default\deployers\jboss logging.deployer\META-INF\logmanager jboss beans.xml
    中注释给定的行


  • 希望这对您有用

    那么,如果您不输入任何内容,而只是使用注释掉的log4j appender,那么一切是否都有效?你能照亮或显示注释掉的appender和你的appender的区别吗?嗨。我可以在server.log中看到我希望看到的所有内容。但是,我需要使用log4j appender(因为我有自己的appender,它有额外的功能)。在deploy/jboss日志中,所有log4j appender定义都被注释掉了。但事实上,他们在那里给了我希望,我应该能够添加我的log4j appender,它将被jboss日志的log4j桥使用。我不确定你是否阅读了我的详细评论。我问如果使用被注释掉的log4j appender会发生什么。但是基本上你不想使用log4j appender,而是你自己的定制appender,这就是问题所在。在这种情况下,您需要将它们部署到根类路径中,我想……对不起,我没有领会您的意思。jboss-logging.xml中已经存在的注释掉的log4j appender对我来说都不是很有用。该列表包括:SMTP、SYSLOG、JMS、JMX和TRAP_LOG。我尝试取消对SYSLOG的注释,但在/var/log/messages中没有得到任何结果。在我的示例中,appender类是一个标准的log4j appender。我只是用它来试着让我的配置正确,并看到它被使用。实际上,我将使用我自己的类(它扩展了org.apache.log4j.AppenderSkeleton,但这与这里无关,因为我只是尝试在这里使用一个普通的旧RollingFileAppender)。那么,如果您不放入任何内容,而只使用注释掉的log4j Appender,一切都可以正常工作吗?你能照亮或显示注释掉的appender和你的appender的区别吗?嗨。我可以在server.log中看到我希望看到的所有内容。但是,我需要使用log4j appender(因为我有自己的appender,它有额外的功能)。在deploy/jboss日志中,所有log4j appender定义都被注释掉了。但事实上,他们在那里给了我希望,我应该能够添加我的log4j appender,它将被jboss日志的log4j桥使用。我不确定你是否阅读了我的详细评论。我问如果使用被注释掉的log4j appender会发生什么。但是基本上你不想使用log4j appender,而是你自己的定制appender,这就是问题所在。在这种情况下,您需要将它们部署到根类路径中,我想……对不起,我没有领会您的意思。jboss-logging.xml中已经存在的注释掉的log4j appender对我来说都不是很有用。该列表包括:SMTP、SYSLOG、JMS、JMX和TRAP_LOG。我尝试取消对SYSLOG的注释,但在/var/log/messages中没有得到任何结果。在我的示例中,appender类是一个标准的log4j appender。我只是用它来试着让我的配置正确,并看到它被使用。实际上,我将使用我自己的类(它扩展了org.apache.log4j.AppenderSkeleton,但这与本文无关,因为我只是在这里尝试使用一个普通的旧RollingFileAppender)。