我用ejb3+slf4j和maven 制作了一个新程序
要将SLF4J与LOG4J一起使用,我有
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
但我说不要把log4j的罐子放在我的耳朵里使用JBOSS 的罐子
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>apache-log4j-extras</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
Jboss有一个名为Jboss-log4j.xml 的配置文件
在根目录中说使用附加ASYNC
<root>
<appender-ref ref="ASYNC"/>
</root>
appender Async使用appender FILE
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Threshold" value="INFO"/>
<appender-ref ref="FILE"/>
</appender>
附加程序FILE是
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="false"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p [%c] %m%n"/>
</layout>
</appender>
这个appender正在处理这个文件中写入的许多内容。
但是我想要一个新的文件为我的服务
我添加了一个类别,类别的名称是包含我所有新开发的包的名称
<category name="com.mycompany.ti.minewsystem">
<priority value="DEBUG" />
<appender-ref ref="MYAPPENDER"/>
</category>
附加程序是
<appender name="MYAPPENDER" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.home.dir}/log/ws-mysystem.log"/>
<param name="Append" value="false"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p [%c] %m%n"/>
</layout>
</appender>
最后,我的EJB导入SLF4J
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
创建反记录器
private Logger logger = LoggerFactory.getLogger(MyEJB.class);
并使用
logger.debug("--------- HI! ------------------");
日志文件(ws-mysystem.Log)已创建,但仍为零字节:(
一切都在JBOSS 4.3 上的Red Hat和Java 6上
有人知道我的手术出了什么问题吗?
也许Slf4J和JBOSS有什么黑暗之处?或者EJB3.0和ClassLoaders?还是2012年和世界末日?
提前感谢
检查类加载器设置-JBoss中的统一类加载器默认情况下有点过于统一(我遇到了独立web上下文之间的类和资源泄漏)。尝试禁用统一类加载器并更改父级优先设置。