2013-01-31 136 views
3

我一直在阅读很多关于这个论坛,jboss文档和互联网上成功获取log4j配置以使用jboss作为7.1.1,我不想使用jboss中的日志子系统。我想使用我自己的log4j配置。我的jboss服务器配置为独立模式。下面是我做的log4j配置为基于Docs软件以便得到:使用jboss-as-7.1.1配置log4j

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

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

我使用我自己的log4j配置而不是日志子系统的原因是能够使用自定义滚动文件appender进行大小旋转文件处理程序,因为我希望旋转后的文件具有时间戳附加到文件名。

帮助理解,

好了,我创建从SizeRotatingFileHandler.java延伸的类MyHandler.java和我重写预写方法。 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的原始问题。

回答

2

我能够用jboss配置log4j。事实证明,您需要分别为主要部署中的每个子部署添加排泄。例如,我有一个耳朵里面有瓶子和战争档案。所以我在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

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

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

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

+0

谢谢你的回应James。是的,EAR/lib目录中有一个log4j-1.2.17.jar。另外我也尝试将log4j.xml放在EAR/META-INF目录中,但它仍然没有从那里读取日志配置。 – TYS

+0

对SizeRotatingFileHandler的引用很有趣,我试着扩展SizeRotatingFileHandler并仅覆盖preWrite方法。但是我不知道如何获取当前日志文件的句柄。 – TYS

+0

我不确定通过获取当前日志文件的句柄来遵循你的意思。 –

0

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

这里考虑您的standalone.xml配置可以设置

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

方式:你在你们班记录它们在包装com.myCompany应该从日志级别的DEBUG。