目标:我的应用程序应该包含ERROR和DEBUG级别的消息。必须通过JBoss管理控制台设置(切换)日志记录级别。应将日志记录写入标准JBoss日志文件和服务器控制台。
我尝试使用java.util.logging.Logger,但此记录器没有必要的级别。 我用slf4j切换到log4j。存在ERROR级别的消息。 DEBUG和System.out.println出现问题。 有趣的是,在测试阶段可以看到DEBUG等级。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Logger creation and configuration
*/
public class ResourcesLog {
@Produces
Logger getLog(InjectionPoint ip) {
String category = ip.getMember().getDeclaringClass().getName();
return LoggerFactory.getLogger(category);
}
}
或只是LOG = LoggerFactory.getLogger(MyClass.class); Pom文件:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.6</version>
</dependency>
可能包含不必要的内容。我不能将slf4j-simple和slf4j-api设置为“提供” - 出错了。这个libs应该在战争中吗?
WEb-INF中的jboss-deployment-structure.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.apache.log4j" />
<module name="org.jboss.logging" />
<module name="org.jboss.logging.jul-to-slf4j-stub" />
<module name="org.jboss.logmanager" />
<module name="org.jboss.logmanager.log4j" />
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
资源文件夹中的log4j.xml设置(在war中位于'WEB-INF / classes / log4j.xml'):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<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="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="Target" value="System.out"/>
<param name="Threshold" value="DEBUG"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<category name="org.mypackage">
<priority value="DEBUG"/>
</category>
<root>
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>
答案 0 :(得分:2)
由于您希望日志转到标准日志记录配置,并且您希望使用管理选项控制此配置,因此无需使用log4j。抛弃log4j.xml
和jboss-deployment-structure.xml
。此外,您只需要slf4j-api
,并且需要将其标记为已提供。
接下来,您需要在服务器上配置记录器。在CLI中,对于独立服务器
,它将是如下命令/subsystem=logging/logger=org.mypackage:add(level=DEBUG)
您还需要设置控制台处理程序和文件处理程序以允许调试消息。默认情况下,文件处理程序已设置为打印调试消息。要更改控制台处理程序以允许调试消息,请执行以下CLI命令。
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level,value=DEBUG)
这些更改也可以在Web控制台中进行。