Ошибка журнала доступа - PullRequest
0 голосов
/ 06 марта 2020

У меня странная проблема с журналом доступа. Сообщения в журнале доступа отображаются частично правильно, когда я запускаю приложение как jar. Однако, когда я отлаживаю приложение в IDE, я не вижу этой проблемы.

Я использую Undertow и его AccessLogHandler следующим образом -

Undertow.builder().setHandler(new AccessLogHandler(new RequestLimitingHandler(new RequestLimit(1000, 1000), getRestEasyServlet(config)), new Slf4jAccessLogReceiver(LoggerFactory.getLogger("com.pkg.logging")), "combined", Server.class.getClassLoader()))

package com.pkg.logging;
import org.slf4j.Logger;

import io.undertow.server.handlers.accesslog.AccessLogReceiver;

public class Slf4jAccessLogReceiver implements AccessLogReceiver {
    private final Logger logger;

    public Slf4jAccessLogReceiver(final Logger logger) {
        this.logger = logger;
    }

    @Override
    public void logMessage(String message) {
        logger.info(message);
    }
}

Ниже приведены сообщения, когда я запускаю это приложение в виде баночки -

2020-03-05 15:40:31,298 INFO [XNIO-1 task-1] class=logging %h %l %u %t "POST /entities/176ce8d1-ded8-3cbd-b18a-bfb3c0a7b1ea HTTP/1.1" %s %b "%{i,Referer}" "%{i,User-Agent}"

2020-03-05 15:40:41,625 INFO [XNIO-1 task-2] class=logging %h %l %u %t "POST /entities/176ce8d1-ded8-3cbd-b18a-bfb3c0a7b1ea HTTP/1.1" %s %b "%{i,Referer}" "%{i,User-Agent}"

Как я уже сказал когда я запускаю тот же код сервера из IDE и замечаю журналы, я не вижу этой проблемы.

Ниже приведены используемые мной версии lib -

compile group: 'io.undertow', name: 'undertow-core', version: '2.0.14.Final'
compile group: 'io.undertow', name: 'undertow-servlet', version: '2.0.14.Final'
compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.6.1.Final'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.1'

JDK - 11

Ниже приведен файл log4j2 -

<Configuration status="DEBUG">
    <Properties>
        <Property name="logPath">${env:logPath:-/home/}</Property>
    </Properties>
    <Appenders>
        <RollingRandomAccessFile name="File" fileName="${logPath}/yjava_jetty.out"
                                 filePattern="${logPath}server-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout alwaysWriteExceptions="false">
                <Pattern>\{"t":"%d","l":"%p","th":"%t","cl":"%c{1}",%m%enc{%throwable{100}}{JSON}"\}%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="500 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="AccessLog" fileName="${logPath}/access"
                                 filePattern="${logPath}/access-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <!--<Pattern>%d %p [%t] class=%c{1} %m%throwable{10}%n</Pattern>-->
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
            <DefaultRolloverStrategy  max="4">
                <Delete basePath="${logPath}" maxDepth="2">
                    <IfFileName glob="access-*.log.gz" />
                    <IfLastModified age="4h" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="com.pkg.logging" level="INFO" additivity="false">
            <AppenderRef ref="AccessLog"/>
        </Logger>
        <Logger name="io.undertow.request.dump" level="INFO" additivity="false">
            <AppenderRef ref="AccessLog"/>
        </Logger>
        <Root level="INFO" additivity="false">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

...