Bonjour,
Je suis confronté à un besoin que je n'arrive pas à résoudre avec Log4j2
Je souhaiterais pouvoir loguer sur un même package dans la console et dans un fichier et pouvoir modifier programmatiquement le niveau de chacun de ces loggers
Voici mon fichier de configuration :
Et mon code qui reprogramme le niveau de log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d{ISO8601} %-5level %30.30logger{1.}:%-3L - %m%n%throwable" /> </Console> <RollingFile name="RollingFile" fileName="/logs/TestLog.log" filePattern="/logs/$${date:yyyy-MM}/TestLog-%d{MM-dd-yyyy}-%i.log.gz"> <Policies> <TimeBasedTriggeringPolicy /> </Policies> <PatternLayout pattern="%d{ISO8601} %-5level %30.30logger{1.}:%-3L - %m%n%throwable" /> </RollingFile> </Appenders> <Loggers> <Logger name="com.test.test" level="error" additivity="true"> <AppenderRef ref="RollingFile" /> </Logger> <Logger name="com.test" level="error" additivity="false"> <AppenderRef ref="STDOUT" /> </Logger> <Root level="error"> </Root> </Loggers> </Configuration>
J'obtiens ceci dans le SystemOut et dans le fichier de log :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 package com.test.test; import java.io.File; import java.net.URI; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.Configurator; import org.apache.logging.log4j.core.config.LoggerConfig; public class TestLogging { private static final String LOGGER_FILE = "com.test.test"; private static final String LOGGER_CONSOLE = "com.test"; public static void reloadConfiguration(String log4jConfPath, String logFilePath) { // Init URI source = new File(log4jConfPath).toURI(); Configurator.initialize("contextLog4J", null, source); LogManager.getLogger().debug("1 - Logger configuration reloaded"); LogManager.getLogger().error("1 - Logger configuration reloaded"); // Update level on file appender LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfiguration(); LoggerConfig loggerConfig = config.getLoggerConfig(LOGGER_FILE); LoggerConfig loggerConfigRoot = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); loggerConfig.setLevel(Level.DEBUG); loggerConfigRoot.setLevel(Level.DEBUG); ctx.updateLoggers(); LogManager.getLogger().debug("2 - Logger configuration reloaded"); LogManager.getLogger().error("2 - Logger configuration reloaded"); // Update level on console appender ctx = (LoggerContext) LogManager.getContext(false); config = ctx.getConfiguration(); LoggerConfig loggerConfigConsole = config.getLoggerConfig(LOGGER_CONSOLE); loggerConfigConsole.setLevel(Level.DEBUG); ctx.updateLoggers(); LogManager.getLogger().debug("3 - Logger configuration reloaded"); LogManager.getLogger().error("3 - Logger configuration reloaded"); } }
Alors que je souhaiterais obtenir dans la console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 2014-06-06 11:09:44,041 ERROR c.t.t.TestLogging:25 - 1 - Logger configuration reloaded 2014-06-06 11:09:44,044 DEBUG c.t.t.TestLogging:36 - 2 - Logger configuration reloaded 2014-06-06 11:09:44,045 ERROR c.t.t.TestLogging:37 - 2 - Logger configuration reloaded 2014-06-06 11:09:44,045 DEBUG c.t.t.TestLogging:46 - 3 - Logger configuration reloaded 2014-06-06 11:09:44,045 ERROR c.t.t.TestLogging:47 - 3 - Logger configuration reloaded
Une idée de comment réaliser correctement cette reprogrammation à la volée avec Log4j2 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 2014-06-06 11:09:44,041 ERROR c.t.t.TestLogging:25 - 1 - Logger configuration reloaded 2014-06-06 11:09:44,045 ERROR c.t.t.TestLogging:37 - 2 - Logger configuration reloaded 2014-06-06 11:09:44,045 DEBUG c.t.t.TestLogging:46 - 3 - Logger configuration reloaded 2014-06-06 11:09:44,045 ERROR c.t.t.TestLogging:47 - 3 - Logger configuration reloaded
Merci
Partager