Log4j ведение журнала в отдельных файлах - PullRequest
1 голос
/ 27 сентября 2011

У меня есть приложение, которое прослушивает определенный порт для выполнения своей задачи. Это приложение может работать на нескольких экземплярах, указав разные порты в аргументе.

MyApp-1211.bat содержит

java MyApp 1211

MyApp-1311.bat содержит

java MyApp 1311

MyApp-1411.bat содержит

java MyApp 1411

Это приложение ведет журнал в файл. Проблема во всех трех экземплярах журнала в один файл, myApp.log. Есть ли способ сказать log4j использовать разные журналы? как:

myApp-port1211.log  
myApp-port1311.log  
myApp-port1411.log  

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Конечно можно. Одним из способов может быть создание нескольких файлов конфигурации (log4j.xml / log4j.properties) - по одному на порт соответственно процессу. После загрузки файла конфигурации вы можете выбрать правильный, основываясь на текущем номере порта:

PropertyConfigurator.configure("log4j-" + port + ".properties");

Создайте соответствующие файлы конфигурации: log4j-1211.properties , log4j-1311.properties , ...

Альтернативой может быть настройка регистрации файлов во время выполнения через код Java:

String logFilename = "./myApp-port" + port + ".log";
Layout layout = new PatternLayout("%d{ISO8601} %-5p [%t] %c{1}: %m%n");
FileAppender fileAppender = new FileAppender(layout, logFilename, false);
fileAppender.setThreshold(Level.DEBUG);
Logger.getRootLogger().addAppender(fileAppender);
0 голосов
/ 27 сентября 2011

Если вы собираетесь загрузить файл конфигурации свойств самостоятельно, как это предлагается в других ответах, не забудьте отключить инициализацию по умолчанию для log4j, добавив env. определение переменной в командной строке вашей программы:

-Dlog4j.defaultInitOverride=true
0 голосов
/ 27 сентября 2011

Вы можете ссылаться на системные свойства в log4j.xml следующим образом:

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
                <!-- The active file to log to -->
                <param name="file" value="mylog${MY_PARAM}.log" />
</appender>

Теперь вам просто нужно вставить свой параметр в системные свойства либо программно System.setProperty("MY_PARAM", args[0]) в ваш метод main(), либо когда выпод управлением Java:

java -DMY_PARAM=1234 MyApp 1234

Очевидно, что вы можете избежать дублирования, если вы запускаете приложение из летучей мыши или сценария оболочки, как:

java -DMY_PARAM=%1 MyApp %1

Подробности см. В следующих ссылках:

http://wiki.apache.org/logging-log4j/Log4jXmlFormat

Использование системных переменных среды в конфигурации xml log4j

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...