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);
>>>>>     }
>>>>>   }
>>>>>
>>>>>
>>>>>

Reply via email to