Я создал сервлет для изменения уровня журнала во время выполнения, и ниже приведен фрагмент кода, который выполняет повторную инициализацию.
String propertyFile = request.getParameter("log4jproperties");
Properties log4jProperties = new Properties();
log4jProperties.load(new StringReader(propertyFile));
LogManager.resetConfiguration();
PropertyConfigurator.configure(log4jProperties);
logger.info("Hello at info");
logger.error("Hello at error");
System.out.println("Configured Succesfully ");
Я установил флаг отладки в true.
-Dlog4j.debug
Когда я изменяю уровень журнала, я вижу, что повторная инициализация log4j выполняется с новыми свойствами, которые я передал всервлет.Я также вижу, что сообщения журнала "Hello" в сервлете, соответствующие уровню журнала, передаются в свойствах.
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4jProperties.size()18
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsing for [root] with value=[ERROR,Portal,console].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Level token is [ERROR].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Category root set to ERROR
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsing appender named "Portal".
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsing layout options for "Portal".
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Setting property [conversionPattern] to [[%d{MM/dd/yy HH:mm:ss.SSS }] %t [%p]%m%n].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: End of parsing for "Portal".
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Setting property [maxFileSize] to [100MB].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Setting property [maxBackupIndex] to [20].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Setting property [file] to [/applogs/MemberPortal/MemberPortal.log].
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: setFile called: /applogs/MemberPortal/MemberPortal.log, true
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: setFile ended
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsed "Portal" options.
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsing appender named "console".
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Parsing layout options for "console".
[10/11/18 15:14:14:487 EDT] 000001ab SystemOut O log4j: Setting property [conversionPattern] to [[%d{MM/dd/yy HH:mm:ss.SSS }] %t %c %r [%p]%m%n].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: End of parsing for "console".
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsed "console" options.
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsing for [com.BCBSTN.OpenToken] with value=[ERROR,OpenToken,console].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Level token is [ERROR].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Category com.BCBSTN.OpenToken set to ERROR
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsing appender named "OpenToken".
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsing layout options for "OpenToken".
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Setting property [conversionPattern] to [[%d{MM/dd/yy HH:mm:ss.SSS }] %t [%p]%m%n].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: End of parsing for "OpenToken".
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Setting property [maxFileSize] to [100MB].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Setting property [file] to [/applogs/OpenToken/OpenToken.log].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Setting property [maxBackupIndex] to [20].
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: setFile called: /applogs/OpenToken/OpenToken.log, true
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: setFile ended
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsed "OpenToken" options.
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Parsing appender named "console".
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Appender "console" was already parsed.
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Handling log4j.additivity.com.BCBSTN.OpenToken=[false]
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Setting additivity for "com.BCBSTN.OpenToken" to false
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O log4j: Finished configuring.
[10/11/18 15:14:14:488 EDT] 000001ab SystemOut O [10/11/18 15:14:14.488 ] WebContainer : 2 com.bcbst.mp.updateotherinsurance.controller.ResetLog4jSettings 500736 [ERROR]Hello at error
[10/11/18 15:14:14:489 EDT] 000001ab SystemOut O Configured Succesfully
Вот файл журнала, который я передал сервлету в качестве параметра.
# Console Configuration
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{MM/dd/yy HH:mm:ss.SSS }] %t %c %r [%p]%m%n
#Member Portal Rolling File Configuration
log4j.appender.Portal=org.apache.log4j.RollingFileAppender
log4j.appender.Portal.File=/applogs/MemberPortal/MemberPortal.log
log4j.appender.Portal.MaxFileSize=100MB
log4j.appender.Portal.MaxBackupIndex=20
log4j.appender.Portal.layout=org.apache.log4j.PatternLayout
log4j.appender.Portal.layout.ConversionPattern = [%d{MM/dd/yy HH:mm:ss.SSS }] %t [%p]%m%n
#Open Token Rolling File Configuration
log4j.appender.OpenToken=org.apache.log4j.RollingFileAppender
log4j.appender.OpenToken.File=/applogs/OpenToken/OpenToken.log
log4j.appender.OpenToken.MaxFileSize=100MB
log4j.appender.OpenToken.MaxBackupIndex=20
log4j.appender.OpenToken.layout=org.apache.log4j.PatternLayout
log4j.appender.OpenToken.layout.ConversionPattern = [%d{MM/dd/yy HH:mm:ss.SSS }] %t [%p]%m%n
# Root Configuration - All packages
# Always keep this configuration
log4j.rootLogger=DEBUG,Portal,console
# OPEN TOKEN is a shared jar , needs restart of JVM to effect changes in log configuration #
log4j.logger.com.BCBSTN.OpenToken=DEBUG,OpenToken,console
log4j.additivity.com.BCBSTN.OpenToken=false
Журналы в банке поставщика находятся на уровне DEBUG.Что я не понимаю, так это то, почему изменения уровня журнала не выбираются банкой динамически.
Мне нужно изменить файл "customlogFile" и перезапустить сервер, чтобы изменения вступили в силу.
-Dlog4j.configuration=file:/customlogFile.properties
Сервлет объединен в войну, а вендор jar и log4j развернуты на сервере.(поэтому я считаю, что загрузчик классов, который загружает классы в jar и сервлете, может отличаться).
Может кто-нибудь помочь мне выяснить, почему изменения уровня журнала не учитываются регистратором в банке.Что мне не хватает.