Получить имя файла из полного пути в log4j2 xml - PullRequest
0 голосов
/ 19 сентября 2018

В моем файле log4j2.xml я получаю полный путь к файлу журнала, передавая системное свойство

-Dlogfilename = / home / user / logs / server

Конфигурация Log4j2:

<Property name="logFile">${sys:logfilename:-/home/user/logs/server}</Property>

В качестве дополнительного требования мне нужно получить имя файла журнала из указанного выше свойства, и я не могу передать новое системное свойство.Как я могу получить только имя файла из полного пути?У меня нет опыта работы с XML, за исключением его использования для передачи данных.

1 Ответ

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

Вы используете Поиск свойств системы неправильно.Вы должны указать поиск и ключ, который хотите найти следующим образом: ${sys:logfilename}

Вот простой пример:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class SomeClass {

    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        log.info("Here's some info!");
    }
}

Вот файл конфигурации log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <File name="File" fileName="logs/${sys:myProperty}"
            immediateFlush="false" append="false">
            <PatternLayout
                pattern="%-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File"  />
        </Root>
    </Loggers>
</Configuration>

Когда я запускаю этот код со следующим параметром JVM:

-DmyProperty=myFile.log

, он создает файл с именем «myFile.log», и файл содержит следующий вывод:

INFO  example.SomeClass - Here's some info!
...