Не удается заставить файл loggin работать с Log4j2 Slf4j в приложении Spring Java 8 - PullRequest
0 голосов
/ 05 мая 2020

У меня есть приложение java spring 5, которое я развертываю на Tomcat 8.5.15. Сейчас я пытаюсь обновить фреймворк логирования до Log4J2, я также использую Slf4J. Проблема в том, что я не могу войти в файл (хотя он создает файл). Он просто регистрируется в консоли, почему? Это многомодульный проект maven. В основном «pom» я использую эти зависимости (например):

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.13.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
            <version>1.7.30</version>
        </dependency>

Вот log4j2. xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Properties>
        <Property name="basePath">logs</Property>
    </Properties>

    <Appenders>
        <RollingFile name="fileLogger" fileName="logs/app-info.log" filePattern="logs/app-info-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>

        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout   pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="foobar" level="debug" additivity="true">
            <appender-ref ref="fileLogger" level="debug" />
        </Logger>
        <Root level="debug" additivity="false">
            <appender-ref ref="console" />
        </Root>
    </Loggers>
</Configuration>

EDIT Здесь это вторая версия конфигурации (это создает файл с небольшим содержанием, но не из моего кода .. из тестового материала "DefaultTestContextBootstrapper" ...) Журнал заканчивается здесь: mymodule / logs / app-info.log

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">   
    <Appenders>
        <RollingFile name="fileLogger" fileName="logs/app-info.log" filePattern="logs/app-info-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>

        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout   pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>        
        <Root level="info" additivity="false">
            <appender-ref ref="fileLogger" />
        </Root>
    </Loggers>
</Configuration>

В коде java я пытаюсь логировать вот так:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
..
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("....");

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Измените fileName и filePattern. Вы указали абсолютный путь, поэтому файл журнала создается по адресу [System root]/logs/

КАК ЕСТЬ

fileName="logs/app-info.log"
filePattern="logs/app-info-%d{yyyy-MM-dd}.log"

TO-BE Случай 1. Использование относительный путь Если вы укажете относительный путь, то журнал будет сохранен в [project root directory]/LOG_FILE_DIR/LOG_FILE_NAME.log

fileName="./LOG_FILE_DIR/LOG_FILE_NAME.log"
filePattern="./LOG_FILE_DIR/LOG_FILE_NAME.log.gz"

Случай 2. Использование абсолютного пути Если вы укажете абсолютный путь, то журнал будет сохранен в C:/LOG_FILE_DIR/LOG_FILE_NAME.log

fileName="./LOG_FILE_DIR/LOG_FILE_NAME.log"
filePattern="C:/LOG_FILE_DIR/LOG_FILE_NAME.log.gz"
0 голосов
/ 15 мая 2020

Проблема была в том, что мои maven poms не были идеальными. Я объявил log4j2 в root pom, но не в модулях, поэтому jar-файлы (log4j2 ...) не были в пути к классам окончательного файла войны, но log4j (1) был там, поэтому мне пришлось получить избавиться от этой зависимости от пары помпонов. Затем я использовал эту конфигурацию для работы ( log4j2.yml ):

configuration:
  name: Default
  properties:
    property:
      - name: log-path
        value: /logs
      - name: archive
        value: ${log-path}/archive
  appenders:
    Console:
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      name: Console-Appender
      target: SYSTEM_OUT
    File:
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      fileName: ${log-path}/amc.log
      name: File-Appender
    RollingFile:
      DefaultRolloverStrategy:
        max: '30'
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      Policies:
        SizeBasedTriggeringPolicy:
          size: 1 MB
      fileName: ${log-path}/rollingfile.log
      filePattern: ${archive}/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz
      name: RollingFile-Appender
  loggers:
    logger:
      additivity: 'false'
      appender-ref:
        - level: info
          ref: Console-Appender
        - level: info
          ref: File-Appender
        - level: info
          ref: RollingFile-Appender
      level: debug
      name: se.su.it.courseservice
    root:
      appender-ref:
        ref: File-Appender
      level: info
...