【问题标题】:Jboss EAP 6.4 - configure slf4j-log4j12Jboss EAP 6.4 - 配置 slf4j-log4j12
【发布时间】:2017-02-06 06:12:52
【问题描述】:

我的战争中有以下 pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>          
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <scope>provided</scope>
</dependency>       

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>          
    <scope>provided</scope>
</dependency>

而我的 log4j.properties 如下:

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=DEBUG, stdout

# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate=INFO

# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.type=TRACE

问题是当我将 log4j.properties 放在 src/main/resources 中时,它不会在控制台上打印任何内容。 如果我从上面的目录中删除 log4j.properties,它会打印 info 日志。

发生了什么事?

【问题讨论】:

    标签: logging jboss slf4j


    【解决方案1】:

    EAP 6 有自己的日志子系统,称为 JBoss LogManager,并通过为您提供 log4j slf4j 和一些其他日志框架的模拟 .jar 来“鼓励”您使用它。这些模拟 .jar 将在运行时位于您的类路径中。他们基本上将所有日志消息转发到在您的standalone.xml 的日志子系统中配置的 JBoss LogManager。

    我实际上喜欢这种方法,因为它将所有日志记录配置统一在一个地方。顺便打包你的 log4j.properties 可能会消除在运行时更改日志配置的选项。

    如果你仍然想使用真正的 log4j,你将不得不做一些工作:

    • 通过 jboss-deployment-structure.xml 排除“假”slf4j 和 log4j
    • 改为打包真正的实现(只需将 maven 范围从提供更改为编译)
    • 通过设置系统属性org.jboss.as.logging.per-deployment=false 阻止 JBoss LogManager 修改您的部署

    编辑:jboss-deployment-structure.xml 可能如下所示:

    <jboss-deployment-structure>
      <deployment>
        <exclusions>
          <module name="org.apache.log4j" />
          <module name="org.slf4j" />
        </exclusions>
      </deployment>
    </jboss-deployment-structure>
    

    如果您有耳朵,您可能还必须为每个子部署排除这些。

    【讨论】:

    • 感谢您的回答。有没有使用 java 使用 JBoss LogManager 的示例链接?
    • 哦,这很简单,只需像往常一样使用 slf4j。您可以将依赖项删除到 log4j,还应该删除 log4j.properties。现在您的日志消息应该出现在 jboss 的标准日志中。如果您想配置 JBoss LogManager,请查看the configuration of the logging subsystem - 它的概念与 log4j 非常相似。
    猜你喜欢
    • 2019-02-17
    • 2023-04-07
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2015-11-19
    • 2018-09-16
    相关资源
    最近更新 更多