Thanks a lot, Ralph! Let me ask one more question. For any further questions, I would create a new mail thread.
We also have a utility in hadoop that tries to add FileAppender at runtime, and also change the threshold of all appenders from root level. Is this doable with log4j2? I could not find Appender or AbstractAppender method to set filter/threshold to the given appender at runtime. IIUC, we can use something like "*setFilter(ThresholdFilter.**createFilter(Level.TRACE, null, null))*" to the builder class while creating the appender instance, but I am not sure if we can update the threshold for the existing appender. Here is the code reference (log4j1): https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/AdHocLogDumper.java#L71-L103 On Tue, Mar 21, 2023 at 5:48 PM Viraj Jasani <vjas...@apache.org> wrote: > I believe we can use "Configurator.reconfigure(uri)", however just wanted > to make sure if this is the only right way (stable API). > > > On Tue, Mar 21, 2023 at 4:57 PM Viraj Jasani <vjas...@apache.org> wrote: > >> Just a follow up on this, do we have replacement for >> "LogManager.resetConfiguration" in log4j2? >> >> >> On Sat, Mar 18, 2023 at 11:27 AM Viraj Jasani <vjas...@apache.org> wrote: >> >>> Ah looks like monitorinterval is supported as per the doc[1]: >>> Properties configuration files support the advertiser, monitorInterval, >>> name, packages, shutdownHook, shutdownTimeout, status, verbose, and dest >>> attributes. >>> >>> 1. >>> https://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax >>> >>> On Sat, Mar 18, 2023 at 11:14 AM Viraj Jasani <vjas...@apache.org> >>> wrote: >>> >>>> Thanks Ralph for the recommendations! >>>> >>>> > First, I strongly recommend you switch from properties to either XML, >>>> Yaml, or JSON. >>>> >>>> The reason why we would still like to stick to properties (at least for >>>> now during the migration) is that LOG4J2-3341 allows setting level and >>>> appender at once in the properties file. After migration, if there is any >>>> better way, we would consider migrating to xml or yaml for sure. Here is >>>> the old thread for the reference[1] after which both hbase and hadoop have >>>> decided to stick to properties for now. >>>> >>>> > Note that there are several variations of the initialize method. >>>> >>>> Sure I think we might be able to use, will explore: >>>> public static LoggerContext initialize(final String name, final >>>> ClassLoader loader, final URI configLocation) { >>>> return initialize(name, loader, configLocation, null); >>>> } >>>> >>>> Even with properties file, is it still possible to configure monitor >>>> interval? >>>> >>>> >>>> 1. https://lists.apache.org/thread/gvfb3jkg6t11cyds4jmpo7lrswmx28w3 >>>> >>>> On Fri, Mar 17, 2023 at 8:59 PM Viraj Jasani <vjas...@apache.org> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> Could you please help with log4j2 replacement for PropertyConfigurator >>>>> APIs configureAndWatch and configure? >>>>> >>>>> For instance, this is the logic we have that we need to migrate to >>>>> log4j2: >>>>> >>>>> >>>>> >>>>> protected void initLog() throws ServerException { >>>>> verifyDir(logDir); >>>>> LogManager.resetConfiguration(); >>>>> File log4jFile = new File(configDir, name + "-log4j.properties"); >>>>> if (log4jFile.exists()) { >>>>> PropertyConfigurator.configureAndWatch(log4jFile.toString(), 10 >>>>> * 1000); //every 10 secs >>>>> log = LoggerFactory.getLogger(Server.class); >>>>> } else { >>>>> Properties props = new Properties(); >>>>> try { >>>>> InputStream is = getResource(DEFAULT_LOG4J_PROPERTIES); >>>>> try { >>>>> props.load(is); >>>>> } finally { >>>>> is.close(); >>>>> } >>>>> } catch (IOException ex) { >>>>> throw new ServerException(ServerException.ERROR.S03, >>>>> DEFAULT_LOG4J_PROPERTIES, ex.getMessage(), ex); >>>>> } >>>>> PropertyConfigurator.configure(props); >>>>> log = LoggerFactory.getLogger(Server.class); >>>>> log.warn("Log4j [{}] configuration file not found, using default >>>>> configuration from classpath", log4jFile); >>>>> } >>>>> } >>>>> >>>>> >>>>>