繁体   English   中英

Wildfly / Slf4j集成问题

[英]Wildfly/Slf4j integration issues

我正在尝试将SLF4J集成到多层构建的struts应用程序中:

通讯模块,Web模块,服务模块等...

每个模块都使用下面定义的称为TraceurProxy的日志记录类:

   public class TraceurProxy {

        private Logger logger;

        public TraceurProxy(@SuppressWarnings("rawtypes") Class classe) {
            this.logger = LoggerFactory.getLogger(classe);
        }

        public boolean isDebugActive() {
            return this.logger.isDebugEnabled();
        }

        public boolean isInfoActive() {
            return this.logger.isInfoEnabled();
        }

        public boolean isWarnActive() {
            return this.logger.isWarnEnabled();
        }

        public boolean isErrorActive() {
            return this.logger.isErrorEnabled();
        }

    //  public boolean isFatalActive() {
    //      return this.logger.isFatalEnabled();
    //  }

        public void debug(Object object) {
            this.logger.debug(object.toString());
            TraceurHelper.defineCurrentEventCode(InformationHelper.EXTERNAL_TRACEUR_CODE);
            TraceurHelper.defineCurrentTempsEcoule("");
        }

        public void debug(Object object, Throwable throwable) {
            this.logger.debug(object.toString(), throwable);
            TraceurHelper.defineCurrentEventCode(InformationHelper.EXTERNAL_TRACEUR_CODE);
            TraceurHelper.defineCurrentTempsEcoule("");
        }

        public void info(Object object) {
            this.logger.info(object.toString());
            TraceurHelper.defineCurrentEventCode(InformationHelper.EXTERNAL_TRACEUR_CODE);
            TraceurHelper.defineCurrentTempsEcoule("");
        }

        public void info(Object object, Throwable throwable) {
            this.logger.info(object.toString(), throwable);
            TraceurHelper.defineCurrentEventCode(InformationHelper.EXTERNAL_TRACEUR_CODE);
            TraceurHelper.defineCurrentTempsEcoule("");
        }

    }

在应用程序的每个位置(每个模块)都将调用此类,以管理日志。

我现在面临的问题是,希望将日志从应用程序外部化以用于生产部署。 通过定义以下文件,我将logBack方法用作SLF4J标准的实现:

logback.xml

    <configuration debug="true" scan="true" scanPeriod="30 seconds">
    <property name="LOG_PATH" value="C:/logs"/>
    <property name="LOG_ARCHIVE" value="${LOG_PATH}/archive"/>
    <timestamp key="timestamp-by-second" datePattern="yyyyMMdd'T'HHmmss"/>
    <appender name="rollingFileLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <file>${LOG_PATH}/logfile-${timestamp-by-second}.log</file>
            <fileNamePattern>${LOG_ARCHIVE}/rollingfile.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>3MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <logger level="ALL" name="*.*.*">
        <appender-ref ref="rollingFileAppender" />
    </logger>
    <logger level="ALL" name="*.*.*">
        <appender-ref ref="rollingFileAppender" />
    </logger>
    <root level="ALL">
        <appender-ref ref="rollingFileLogger"/>
    </root>
    </configuration>

我出于维护目的将此配置文件放在项目类路径之外,并在eclipse中使用以下属性作为VM参数来通知Wildfly配置文件位置-Dlogback.configurationFile = C:/logs/Logback.xml ,但是在启动阶段之后,调用HTTP请求后没有任何结果,没有创建文件,没有添加日志。 就像Wildfly完全忽略了我的配置,只记录了server.log

这是我的依赖项:

           <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>
           <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.25</version>
           </dependency>

如前所述,我的应用程序体系结构包含许多项目,并且我将依赖项和TraceurProxy定义放在通用模块中,因为它被所有前端模块(例如Web模块)所使用。

在此先感谢您提供任何解决方案,我被阻止了。

我通过采取以下措施解决了这个问题。

  1. 我如下创建了jboss-deployment-structure.xml

     <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <sub-deployment name="pfi-web.war"> <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> </sub-deployment> </jboss-deployment-structure> 
  2. 我不得不将它放在EAR / META-INF文件夹下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM