使用jboss-as-7.1.1配置log4j

时间:2013-01-31 22:26:53

标签: log4j jboss7.x

我在这个论坛,jboss docs和互联网上已经阅读了很多东西,成功地将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,我将其添加到我的EAR的META-INF目录中
  2. 我按原样添加了一个log4j.xml,并打包在我耳朵的lib目录中的jar中。
  3. 从standalone.xml中删除了日志子系统和扩展模块=“org.jboss.as.logging”。
  4. 我没有更改在startup.sh中作为启动参数提供的logging.properties,因为我已经读过,这是jboss服务器在子系统启动之前将使用的日志记录。
  5. 尽管做了所有这些,我无法按照我的log4j配置让应用程序进行日志记录。

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

    帮助表示赞赏,

    好的,所以我创建了一个从SizeRotatingFileHandler.java扩展的类MyHandler.java,并重写了preWrite方法。 MyHandler.java位于包a.b.c中。我在模块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时,它说它找不到类a.b.c.MyHandler。我该如何解决这个错误?

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

3 个答案:

答案 0 :(得分:3)

我能够使用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>

答案 1 :(得分:1)

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

我不确定log4j是否会在你的EAR里面的JAR里面有一个log4j.xml。我认为EAR/META-INF对于你的log4j配置文件来说是一个更合适的地方。

在这种情况下,没有理由删除日志记录子系统。另外,我并不想说服你使用它,但你可以很容易地创建一个自定义处理程序来完成你想做的事情。您可以将其基于SizeRotatingFileHandler,然后只需在rename上添加后缀。

答案 2 :(得分: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中记录。