4

我已经在这个论坛、jboss 文档和互联网上阅读了很多内容,以成功获得 log4j 配置以与 jboss 一起使用 7.1.1,我不想在 jboss 中使用日志记录子系统。我想使用我自己的 log4j 配置。我的 jboss 服务器配置为独立模式。以下是我根据文档配置 log4j 所做的:

  1. 根据https://docs.jboss.org/author/display/AS71/How+To#HowTo-HowdoIuselog4j.propertiesorlog4j.xmlinsteadofusingtheloggingsubsystemconfiguration%3F定义一个 jboss-deployment-structure.xml ,我在 META-INF 中添加了这个我的 EAR 目录
  2. 我按原样添加了一个 log4j.xml,并打包在我耳朵的 lib 目录中的一个 jar 中。
  3. 从standalone.xml 中删除了日志子系统和扩展模块=“org.jboss.as.logging”。
  4. 我没有更改在 startup.sh 中作为启动参数提供的 logging.properties,因为我已经读过这是 jboss 服务器在子系统启动之前将使用的日志记录。

尽管做了所有这些,但我无法让应用程序按照我的 log4j 配置进行记录。

我使用我自己的 log4j 配置而不是日志记录子系统的原因是能够为 size-rotating-file-handler 使用自定义滚动文件附加程序,因为我希望旋转的文件具有附加到文件名的时间戳。

帮助表示赞赏,

好的,所以我创建了一个从 SizeRotatingFileHandler.java 扩展的类 MyHandler.java 并覆盖了 preWrite 方法。MyHandler.java 在包 abc 中我在模块 a/b/c 下创建了一个子目录,并在 c 目录中添加了一个仅包含 Myhandler.class 文件的 jar。我添加了一个 module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="a.b.c">
     <resources>
           <resource-root path="RotatingHandler.jar"/>
          <!-- Insert resources here -->
     </resources>
     <dependencies>
          <module name="org.jboss.logging"/>
     </dependencies>
</module>

然后在standalone.xml中我为自定义处理程序添加了一个条目

<custom-handler name="FILE3" class="a.b.c.MyHandler" module="a.b.c">
        <level name="INFO"/>
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="srveree.log"/>
    </custom-handler>

当我启动 Jboss 时,它说它找不到类 abcMyHandler。如何解决此错误?

更新:我解决了这个错误。模块内部的包结构有问题。但是,我仍然要回到原来的问题,即使用 jboss-as-7.1.1.Final 配置 log4j。

4

3 回答 3

4

我能够用 jboss 配置 log4j。事实证明,您需要为主部署中的每个子部署单独添加排除项。例如,我的耳朵里面有 jar 和 war 文件。所以我在 jboss-deployment-structure.xml 中为它们中的每一个添加了单独的条目并且它起作用了。

<sub-deployment name="your-subdeployment.jar">
    <exclusions>
        <module name="org.apache.log4j"/>
        <module name="org.slf4j" />
        <module name="org.apache.commons.logging"/>
        <module name="org.log4j"/>  
        <module name="org.jboss.logging"/>
    </exclusions>
</sub-deployment>
于 2013-02-06T14:52:38.857 回答
1

您没有指出的一件事是您是否也在EAR/lib文件夹中添加了 log4j 库。我想你可能有,或者你应该看到其他错误。

log4j.xml老实说,我不确定 log4j 是否会在您的 EAR 中包含一个 JAR。我认为这EAR/META-INF将是您的 log4j 配置文件更合适的位置。

在这种情况下,没有真正的理由删除日志子系统。另外,我并不是要说服您使用它,但您可以相当轻松地创建自定义处理程序来执行您想要执行的操作。您可以基于SizeRotatingFileHandler,然后在rename上添加一个后缀。

于 2013-02-01T01:36:32.187 回答
0

考虑在您的standalone.xml 中进行配置

<subsystem xmlns="urn:jboss:domain:logging:1.1">

这里可以设置

<console-handler name="CONSOLE">
            <level name="DEBUG"/>
...
        <logger category="com.myCompany">
            <level name="DEBUG"/>
        </logger>
...

意味着:您在 com.myCompany 包中的类中的记录器应该从 DEBUG 级别记录。

于 2013-08-16T14:14:56.673 回答