You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Mike Li (Jira)" <ji...@apache.org> on 2022/01/05 13:09:00 UTC

[jira] [Comment Edited] (LOG4J2-3295) Reconfiguration failure with an error

    [ https://issues.apache.org/jira/browse/LOG4J2-3295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17468423#comment-17468423 ] 

Mike Li edited comment on LOG4J2-3295 at 1/5/22, 1:08 PM:
----------------------------------------------------------

Ralph,

For the reason why we are switching from File appender to a rolling file appender, we just provide the option to users and they do whatever they want. The appenders definition that I put in the discussion is just a sample to describe the issue without all the other complex settings like max file number and max file size in rolling file appender.

 

For your suggestion on reconfiguring to default configuration and then do another reconfiguration, it's complex in the following areas:
 # We need to know at the point when we need to do this. Today we rely on log4j2 to automatically detect the config file change and do the reconfiguration behind the scene. If we need to configure to default configuration first, then do another reconfiguration, then we need to plug some custom code at the point when this need to be done. Please guide me to a sample if you have on your hand.
 # At the point when the config file is updated, we need to determine whether such a reconfiguration to default is absolutely necessary by detecting whether the current configuration has the same log file name as the new configuration and the appenders are not compatible. This might be another part that is difficult to implement. If you have any sample code to do the detection, also send to me.

 

Thanks a lot.


was (Author: JIRAUSER282723):
Ralph,

For the reason why we are switching from File appender to a rolling file appender, we just provide the option to users and they do whatever they want. The appenders definition that I put in the discussion is just a sample to describe the issue without all the other complex settings like max file number and max file size in rolling file appender.

 

For your suggestion on reconfiguring to default configuration and then do another reconfiguration, it's complex in the following areas:
 # We need to know at the point when we need to do this. Today we reply on log4j2 to automatically detect the config file change and do the reconfiguration behind the scene. If we need to configure to default configuration first, then do another reconfiguration, then we need to plug some custom code at the point when this need to be done. Please guide me to a sample if you have on your hand.
 # At the point when the config file is updated, we need to determine whether such a reconfiguration to default is absolutely necessary by detecting whether the current configuration has the same log file name as the new configuration and the appenders are not compatible. This might be another part that is difficult to implement. If you have any sample code to do the detection, also send to me.

 

Thanks a lot.

> Reconfiguration failure with an error
> -------------------------------------
>
>                 Key: LOG4J2-3295
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3295
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Configuration, Configurators
>    Affects Versions: 2.17.0
>            Reporter: Mike Li
>            Priority: Blocker
>
> Steps to recreate:
>  # start with log4j2.xml with following content:
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="DEBUG" monitorInterval="30">
>  
>     <Appenders>
>     <File name="FILE" fileName="c:\temp\product.log">
>         <PatternLayout>
>             <Pattern>ProductName:%-10p %d\{yyyy-MM-dd HH:mm:ss.SSS}
> {GMT} context:%x [%t] - %-50m - %M(%F:%L)%n</Pattern>
>         </PatternLayout>
>         
>     </File>
>     </Appenders>
>     <Loggers>
>         <Root level="INFO">
>             <AppenderRef ref="FILE"/>
>         </Root>
>     </Loggers>
> </Configuration>
>  
> 2. After the application is started and running, edit the log4j2.xml file with the following content, notice that the fileName in the WRAP appender is the same as that in the original FILE appender.
>  
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="DEBUG" monitorInterval="30" >
>     <Appenders>
>     <Async name="ASYNC" includeLocation="true" bufferSize="4096">
>         <AppenderRef ref="WRAP"/>
>     </Async>
>     <RollingFile name="WRAP" fileName="c:\temp\product.log" filePattern="c:\temp\product.log.%i">
>         <PatternLayout pattern="ProductName:%-7p %d\{yyyy-MM-dd HH:mm:ss.SSS}{GMT}
> context:%x [%t] - %-50m - %M(%F:%L)%n"/>
>         <Policies>
>             <SizeBasedTriggeringPolicy size="1048576"/>
>         </Policies>
>         <DefaultRolloverStrategy max="4"/>
>     </RollingFile>
>     </Appenders>
>     <Loggers>
>         <Root level="DEBUG">
>             <AppenderRef ref="ASYNC"/>
>         </Root>
>     </Loggers>
> </Configuration>
>  
> 3. Wait for the log4j to detect the change in 30 seconds to reconfigure. When the reconfigure starts, it reports an error. Here is the exception stack:
>  
> 2021-12-28 17:42:41,688 Log4j2-TF-1-ConfiguratonFileWatcher-4 ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile org.apache.logging.log4j.core.config.ConfigurationException: Configuration has multiple incompatible Appenders pointing to the same resource 'c:\temp\product.log'
>     at org.apache.logging.log4j.core.appender.AbstractManager.narrow(AbstractManager.java:169)
>     at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:217)
>     at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:146)
>     at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:62)
>     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:1107)
>     at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1032)
>     at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1024)
>     at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:643)
>     at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:243)
>     at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:289)
>     at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:626)
>     at org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:762)
>     at org.apache.logging.log4j.core.util.AbstractWatcher$ReconfigurationRunnable.run(AbstractWatcher.java:93)
>     at java.base/java.lang.Thread.run(Thread.java:831)



--
This message was sent by Atlassian Jira
(v8.20.1#820001)