Java 无法找到附加程序

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31918027/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 11:46:29  来源:igfitidea点击:

Unable to locate appender

javaloggingconfigurationslf4jlog4j2

提问by Antara Roy

I am trying to migrate from log4j 1to log4j 2in a spring web application. When I build it I get the following error:

我正在尝试从Spring Web 应用程序迁移log4j 1log4j 2。当我构建它时,我收到以下错误:

2015-08-10 16:26:36,222 DEBUG Built Plugin[name=AppenderRef] OK from factory method.
2015-08-10 16:26:36,222 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for builder factory method...
2015-08-10 16:26:36,222 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger. Going to try finding a factory method instead.
2015-08-10 16:26:36,223 DEBUG Still building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for factory method...
2015-08-10 16:26:36,223 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig$RootLogger.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
2015-08-10 16:26:36,224 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(name="null", name="INFO", name="null", ={appFileAppender}, ={}, Configuration(/Applications/tomcat/webapps/ROOT/WEB-INF/classes/log4j2.xml), null)
2015-08-10 16:26:36,225 DEBUG Built Plugin[name=root] OK from factory method.
2015-08-10 16:26:36,225 DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for builder factory method...
2015-08-10 16:26:36,227 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggersPlugin. Going to try finding a factory method instead.
2015-08-10 16:26:36,228 DEBUG Still building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for factory method...
2015-08-10 16:26:36,228 DEBUG Found factory method [createLoggers]: public static org.apache.logging.log4j.core.config.Loggers org.apache.logging.log4j.core.config.LoggersPlugin.createLoggers(org.apache.logging.log4j.core.config.LoggerConfig[]).
2015-08-10 16:26:36,229 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.LoggersPlugin for element Loggers with params(={app, analyticsLogger, dpLogger, trackingPixelLogger, filteredLogsLogger, trackingOffersPurchasingLogger, ifbLogger, trackingOffersUdidLogger, trackingOffersHeadersLogger, apLogger, s3AdminLogger, bookPackLogger, accumulatorLogger, appDownloadLogger, botDetectionLogger, fourGLogger, urlShortenerLogger, TrackingAllLogger, otiHeadersLogger, postpaidErrorTrackingLogger, root})
2015-08-10 16:26:36,230 DEBUG Built Plugin[name=loggers] OK from factory method.
2015-08-10 16:26:36,235 ERROR Unable to locate appender appFileAppender for logger
2015-08-10 16:26:36,237 ERROR No appender named fourGFileAppender was configured

Following jars are added to classpath:

以下 jars 被添加到类路径:

  1. log4j-slf4j-impl-2.3.jar
  2. log4j-core-2.3.jar
  3. log4j-api-2.3.jar
  4. slf4j-api-1.7.12.jar
  5. commons-logging-1.1.1.jar
  6. apache-log4j-extras-1.1.jar
  1. log4j-slf4j-impl-2.3.jar
  2. log4j-core-2.3.jar
  3. log4j-api-2.3.jar
  4. slf4j-api-1.7.12.jar
  5. commons-logging-1.1.1.jar
  6. apache-log4j-extras-1.1.jar

And my log4j2.xmllooks like:

我的log4j2.xml样子:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">

    <Appenders>

        <RollingFile name="appFileAppender" fileName="/tmp/portal-fe.log"
                     filePattern="/tmp/portal-fe.%d{yyyy-MM-dd}.log.gz">
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss} [%p] | [%t] [%X{requestId}] [%X{x_msisdn}] [%X{x_rat}] [%X{x_forwarded_for}] [%X{circle}] [%C{1}:%L] %m%n"/>
        </RollingFile>


        <RollingFile name="analyticsFileAppender" fileName="/tmp/ops_bc_log"
                     datePattern="'-'yyyyMMdd">
            <PatternLayout
                    pattern="%d{yyyy/MM/dd HH:mm:ss} %m%n"/>
        </RollingFile>

        <Async name="ASYNC">
            <AppenderRef ref="appFileAppender"/>
        </Async>

        <Async name="ASYNC_2">
            <AppenderRef ref="analyticsFileAppender"/>
        </Async>

    </Appenders>

    <Loggers>

        <Logger name="app" level="debug">
            <AppenderRef ref="ASYNC"/>
        </Logger>

        <Logger name="analyticsLogger" level="info">
            <AppenderRef ref="ASYNC_2"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="appFileAppender"/>
        </Root>
    </Loggers>

</Configuration>

采纳答案by Remko Popma

Your RollingFile configuration needs to specify what triggers a rollover. You do this by adding a <Policy>element. See the RollingFile manual entryfor details.

您的 RollingFile 配置需要指定触发翻转的内容。您可以通过添加<Policy>元素来完成此操作。有关详细信息,请参阅RollingFile 手册条目

I believe adding this snippet before the closing </RollingFile>tag should fix the issue:

我相信在结束</RollingFile>标记之前添加这个片段应该可以解决这个问题:

<Policies>
  <TimeBasedTriggeringPolicy />
</Policies>

For the analyticsFileAppender RollingFile appender you configured a datePatternwhere you meant to say filePattern. Below is the fixed config snippet.

对于 analyticsFileAppender RollingFile appender,你配置了一个datePattern你想说的地方filePattern。下面是固定的配置片段。

<RollingFile name="analyticsFileAppender" fileName="/tmp/ops_bc_log"
             filePattern="'-'yyyyMMdd">
  <PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss} %m%n"/>
  <Policies>
    <TimeBasedTriggeringPolicy />
  </Policies>
</RollingFile>

回答by Ankur Mahajan

First, remove the Async appender, and point the appender-ref of the AsyncLogger to the ProcessorLoggingFile directly. Second, you must add includeLocation="true" on the AsyncLogger.

首先,移除Async appender,将AsyncLogger的appender-ref直接指向ProcessorLoggingFile。其次,您必须在 AsyncLogger 上添加 includeLocation="true"。

Having an async appender in addition to an async logger does not help and in this case might be what prevents the includeLocation from working correctly.

除了异步记录器之外,还有一个异步 appender 并没有帮助,在这种情况下,可能会阻止 includeLocation 正常工作。

EDIT:CHECK THISquestion for more help.

编辑:检查这个问题以获得更多帮助。