2015-07-30 1 views
0

В linux имя пользователя задается переменной окружения $ USER.log4j создание динамического имени файла на основе того, кто зарегистрирован в linux

Скажем, у меня есть следующие LOG4J CONFIG

log4j.rootLogger=info, infoApp 
# this should contain only INFO messages 
log4j.appender.infoApp=org.apache.log4j.RollingFileAppender 
log4j.appender.infoApp.File=/mylogs/logs/app/app.info.log 
log4j.appender.infoApp.layout=org.apache.log4j.PatternLayout 
log4j.appender.infoApp.layout.ConversionPattern=%d [%-5p] %t -- %m%n 
log4j.appender.infoApp.MaxFileSize=10MB 
log4j.appender.infoApp.MaxBackupIndex=6 

Как я могу динамически добавлять имя пользователя для приложения, которое использует этот файл в имени файла, так что журналы user1 идут в/mylogs/журналы/приложение/приложения Журналы .user1.info.log и user2 входят в /mylogs/logs/app/app.user2.info.log?

Я использую log4j 1.2.14, но при необходимости может обновить. Log4j также используется другими библиотеками, исходный код которых я не хочу касаться. Мое приложение является автономным Java-приложением.

Если я изменяю имя файла в config на /mylogs/logs/app/app.${env.USER}.info.log (при условии, что я обновляюсь до log4j 2.3), он заменяет время развертывания на изменение файл log4j.properties. Я хочу, чтобы пользовательская подстановка выполнялась во время выполнения, поэтому одна и та же установка может использоваться несколькими пользователями.

Спасибо!

ответ

1

Во время выполнения, вы можете создать новую FileAppender и добавить его в корневой регистратор, т.е.

FileAppender fileAppender = new FileAppender(); 
    fileAppender.setFile("userxylog.log"); 
    .... 
    Logger.getRootLogger().addAppender(fileAppender) 
    .... 

это описано здесь https://logging.apache.org/log4j/1.2/apidocs/

+0

Спасибо за комментарий и извините за задержку. Я решил проблему, используя журнал, который имеет эту функцию в виде переменной $ USER (переменная среды, установленная в Linux для пользователя). благодаря – serverman