Wildfly/Slf4j 集成问题

苏菲安·拉比

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

通用模块、网络模块、服务模块等...

每个模块都使用一个名为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 标准的实现:

登录文件

    <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定义放在common-module 中,因为它被所有前端模块(如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 文件夹下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有ZooKeeper的Spring Boot Security 4-安全集成问题

来自分类Dev

太阳系模拟器物理集成问题(虚幻引擎4,C ++)

来自分类Dev

带有ZooKeeper的Spring Boot Security 4-安全集成问题

来自分类Dev

EvanBetterAuthorizationSample集成问题

来自分类Dev

EvanBetterAuthorizationSample集成问题

来自分类Dev

CrashLytics Android集成问题

来自分类Dev

Golang与Couchbase集成问题

来自分类Dev

iOS PJSIP集成问题

来自分类Dev

滑动菜单集成问题

来自分类Dev

Maven Eclipse集成问题

来自分类Dev

iOS PJSIP集成问题

来自分类Dev

Android Studio和NDK集成问题

来自分类Dev

UIToolBar的iOS iAd集成问题

来自分类Dev

Apple Pay / Stripe集成问题

来自分类Dev

XCode 6.1的Chartboost集成问题

来自分类Dev

Hibernate搜索和Spring集成问题

来自分类Dev

python中的scipy quad集成问题

来自分类Dev

XCode 6.1的Chartboost集成问题

来自分类Dev

MVC中的Worldpay集成问题

来自分类Dev

Rasa网络聊天集成问题

来自分类Dev

ios应用中的FB集成问题

来自分类Dev

Google Analytic Report与Salesforce的集成问题

来自分类Dev

Android Studio和NDK集成问题

来自分类Dev

黄瓜-JVM Maven集成问题

来自分类Dev

Autofac Azure移动服务集成问题

来自分类Dev

引用中的Android Facebook集成问题

来自分类Dev

iOS Nextpeer Facebook集成问题

来自分类Dev

Google Analytics API集成问题

来自分类Dev

mongo-hadoop集成问题