В log4j2 используйте динамическое имя файла - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь создать динамическое имя файла для log4j. Я следую за документацией, но все еще получаю ошибки. Я пробовал разные типы, но путь к файлу по-прежнему недействителен?

Похоже, проблема в переменной logserverdir. Я пытался установить путь к файлу динамически, но у меня нет доступа к системным переменным (так как это веб-сервер). У меня есть доступ к коду и я пытаюсь вызвать System setProperties.

У меня есть следующее:

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

<File name="MainApiCommonsAppenderApi" fileName="/usr/local/pfs/logs/${main:0}/log4j_api_commons.log">
            <PatternLayout pattern="%d [%t] [%X{mdcLogSessionId} - %X{mdcLog}] %-5p - %C{1}.%M(%F:%L) - %m%n"/>     
        </File>

А затем код:

import org.apache.logging.log4j.core.lookup.MainMapLookup;

        System.setProperty("logserverdir", APPSERVERID);
        final String [] args = {
                "APPSERVERID"
        };
        MainMapLookup.setMainArguments(args);

Это ошибка:

[3/20/19 11:53:14:423 EDT] 00000075 SystemOut     O 2019-03-20 11:53:14,421 server.startup : 2 ERROR FileManager (/usr/local/pfs/logs/${main:0}/log4j_api_commons.log) java.io.IOException: The filename, directory name, or volume label syntax is incorrect. java.io.IOException: The filename, directory name, or volume label syntax is incorrect.
    at java.io.WinNTFileSystem.canonicalize0(Native Method)
    at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:439)
    at java.io.File.getCanonicalPath(File.java:629)
    at java.io.File.getCanonicalFile(File.java:654)
    at org.apache.logging.log4j.core.util.FileUtils.makeParentDirs(FileUtils.java:134)
    at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:286)
    at org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory.createManager(FileManager.java:274)
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:112)
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
    at org.apache.logging.log4j.core.appender.FileManager.getFileManager(FileManager.java:112)
    at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:86)
    at org.apache.logging.log4j.core.appender.FileAppender$Builder.build(FileAppender.java:51)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
    at com.ca.apps.shared.rest.init.ApplicationConfigurationLoader.<clinit>(ApplicationConfigurationLoader.java:77)
    at com.ca.apps.shared.rest.init.ApplicationConfigurationLoader.<clinit>(ApplicationConfigurationLoader.java)
    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1899)
...