【问题标题】:Slf4j logging not logging to file in wildflySlf4j 日志记录未记录到 Wildfly 中的文件
【发布时间】:2016-08-30 20:47:30
【问题描述】:

我已经关注了父pom

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.9</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.7</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.7</version>
            </dependency>

services模块中的resources文件夹有如下logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">

    <property name="MY_HOME" value="C:\Users\" />

<!--
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${MY_HOME}/logs/mylog.log</File>
-->
 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
    </layout>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>C:/Users/logs/abc.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <FileNamePattern>C:/Users/logs/my.%d{yyyy-MM-dd}.log</FileNamePattern>
      <MaxHistory>30</MaxHistory>
    </rollingPolicy>

    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level - %msg%n</Pattern>
    </layout>
  </appender> 

  <root level="TRACE">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

在类中它被这样调用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...
...
  private static final Logger sl4jLogger = LoggerFactory.getLogger(ServiceBean.class);
    ...
    ...

        sl4jLogger.debug("debug : show up in logger");
        sl4jLogger.info("info : show up in logger");
        sl4jLogger.error("error : show up in logger");
        sl4jLogger.trace("trace : show up in logger");
        sl4jLogger.warn("warn : show up in logger");

控制台上只显示以下内容,但没有在任何地方创建日志文件。

12:33:07,262 INFO  [ServiceBean] (default task-63) info : show up in logger 

12:33:07,262 ERROR [ServiceBean] (default task-63) error : show up in logger

12:33:07,263 WARN  [ServiceBean] (default task-63) warn : show up in logger

AppServer jboss wildfly - 10.0.0

我还在 webapp/META-INF/ 文件夹中添加/尝试了几个不同版本的 jboss-deployment-structure.xml。 但这些都不起作用。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.slf4j" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

<!--<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="logging" />
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>-->


<!--
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.slf4j" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>
-->

<!--
<?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>
-->

    <!--
    <jboss-deployment-structure>
        <deployment>
            <exclusions>
                <module name="org.slf4j" />
                <module name="org.slf4j.impl" />
                <module name="org.slf4j.jcl-over-slf4j" />
                <module name="org.slf4j.ext" />
                <module name="org.apache.log4j" />
            </exclusions>
        </deployment>
    </jboss-deployment-structure>-->

该项目由几个差异模块组成。几场战争,jar,ejb。所有这些都包裹在耳朵里。是这个问题吗?

我错过了什么?

【问题讨论】:

    标签: logging log4j slf4j wildfly-10


    【解决方案1】:

    slf4j 记录器正在工作,它们只是没有绑定到您希望它们绑定到的日志管理器。当您包含 slf4j 依赖项时,您部署的可能是使用绑定到 JBoss 日志管理器的服务器提供的 slf4j 模块。您看到的日志消息由logging subsystem 控制。

    最好的选择是使用日志子系统来配置日志。如果您使用 Web 控制台或 CLI,您将能够在运行时进行更改,而无需重新启动服务器或重新部署您的应用程序。

    如果你真的想在你的部署中使用 logback,最简单的方法是从你的部署中exclude the logging subsystem。然后将使用您提供的依赖项,并且 slf4j 应该绑定到 logback。

    另一个选项是在日志子系统上将add-logging-api-dependencies 属性更改为false。这将停止将日志记录 API 添加到已部署的所有部署中。

    /subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
    

    【讨论】:

    • 我添加了 jboss-deployment-structure.xml 但这没有帮助。我更新了问题。
    • 听起来您正在使用 EAR,因此您还需要为每个子部署排除子系统。
    猜你喜欢
    • 2012-03-28
    • 2016-12-05
    • 2012-08-26
    • 2011-11-07
    • 1970-01-01
    • 2015-05-28
    • 2014-03-17
    • 2021-10-27
    • 2015-09-09
    相关资源
    最近更新 更多