На локальном сервере не было найдено ни одного приложения для регистратора, но такое же приложение отлично работает на производственном сервере - log4j - PullRequest
0 голосов
/ 10 сентября 2018

У нас есть два сервера. Один для QA, а другой - производственный сервер (размещен на AWS). Я использовал сервер "apache-tomcat-8.5.16" в обеих средах. Мы разработали загрузочное приложение Spring, и конфигурация Log4j одинакова для приложений, развернутых на обоих серверах.

logging.level.net.companyname= DEBUG
logging.level.com.google.api.ads.dfp.lib.client.DfpServiceClient.soapXmlLogger=WARN
logging.level.com.google.api.ads.dfp.lib.client.DfpServiceClient.requestInfoLogger=INFO

Тем не менее, на локальном сервере (используемом для обеспечения качества) мы получаем сообщение об ошибке «log4j: WARN Не удалось найти ни одного добавочного файла для регистратора (org.springframework.web.context.support.StandardServletEnvironment".

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Но на Производственном сервере мы без проблем получаем логи. Если это имеет значение, ниже приведена конфигурация pom.xml, связанная с log4j.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>

Даже конфигурации внутри файла "apache-tomcat-8.5.16 / conf / logging.properties" также одинаковы на обоих серверах.

Как получить журналы, которые мы получаем в производственной среде? Что еще будет иметь значение, если обе версии сервера tomcat будут одинаковыми и на них будет развернута одинаковая война с одинаковыми настройками конфигурации?

Спасибо.

Обновление: Я скачал файл war на локальный сервер для тестирования и даже там, log4j работает нормально. Что еще мне нужно проверить?

Спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

Это альтернативное и рекомендуемое решение. После ожидания в течение недели я подумал, почему я должен волноваться по поводу рамок, которые достигли конца жизни. Я обновил до log4j2 и предоставил файл log4j2.xml в classpath (в моем случае / src / main / resources, работающий в STS-Spring Tool Suite, приложение Spring.).

Однако действительная причина этого странного поведения до сих пор неизвестна.

Ниже приведен файл pom.xml, адаптированный только для зависимости log4j2 для многословия.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - ***CustomLog*** %msg ***/CustomLog***%n" />
        </Console>

        <File name="traceLoggerFile" fileName="logs/trace.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <File name="debugLoggerFile" fileName="logs/debug.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <File name="infoLoggerFile" fileName="logs/info.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
        <File name="errorLoggerFile" fileName="logs/errors.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>

    <Loggers>
        <Logger name="com.packageName" level="TRACE">
            <AppenderRef ref="traceLoggerFile" level="TRACE" />
            <AppenderRef ref="debugLoggerFile" level="DEBUG" />
            <AppenderRef ref="infoLoggerFile" level="INFO" />
            <AppenderRef ref="errorLoggerFile" level="ERROR" />
        </Logger>
        <Root level="DEBUG">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

В этой строке необходимо указать правильное имя пакета или имя класса

<Logger name="com.packageName" level="TRACE">

Буду рад, если кто-нибудь сможет найти истинную причину.

Спасибо.

...