Any particular reason for not using a configuration file?

On Wed, Nov 30, 2016 at 5:31 AM, Tarun Sharma <tarun.k.sha...@oracle.com>
wrote:

> Hi,
>
>
>
> While upgrading from 1.2.17 to 2.5, I have come across a major
> difference.  Please see following code snippets.
>
>
>
> Log4j1.2.17
>
> private  static final Logger LOGGER = Logger.getLogger(TestLog.class);
>
> public static void main(String args[])
> {
>     Properties p = new Properties();
>     p.setProperty("log4j.debug","true");
>     p.setProperty("log4j.rootLogger","info,cfg");
>     p.setProperty("log4j.appender.cfg","org.apache.log4j.
> ConsoleAppender");
>     p.setProperty("log4j.appender.cfg.layout","org.apache.log4j.
> PatternLayout");
>     PropertyConfigurator.configure(p);
>     LOGGER.info("INFO"); //logs on console
>     LOGGER.warn("warn");  //logs on console
>     LOGGER.error("error");  //logs on console
> }
>
>
>
> Log4j2 v2.5
>
>
>
> private static final Logger LOGGER = LogManager.getLogger(TestLog.class);
>
>     public static void main(String[] args)
>     {
>         PropertiesConfigurationFactory factory = new
> PropertiesConfigurationFactory();   // This line and the try catch below
> replace the
>         Properties cfg = new Properties();
>         cfg.setProperty("name", "config");
>         cfg.setProperty("status", "debug");
>         cfg.setProperty("appenders","console");
>         cfg.setProperty("appender.console.type","Console");
>         cfg.setProperty("appender.console.name","Console");
>         cfg.setProperty("appender.console.layout.type","PatternLayout");
>         cfg.setProperty("rootLogger.level","info");
>         cfg.setProperty("rootLogger.appenderRefs","console");
>         cfg.setProperty("rootLogger.appenderRef.console.ref","Console");
>         try {
>             ConfigurationSource configSrc = createConfigurationSource(cfg);
>               //PropertyConfigurator.configure(cfg); from log4j1.2
>
>             Configuration conf = factory.getConfiguration(configSrc);
>             System.setProperty("Log4jContextSelector",
> "org.apache.logging.log4j.core.selector.BasicContextSelector");
>             LoggerContext ctx = Configurator.initialize(conf);
>             ContextAnchor.THREAD_CONTEXT.set(ctx);
>         }
>         catch (IOException io)
>         {
>
>         }
>
>         LOGGER.info("INFO");  // does not print
>         LOGGER.warn("warn");    // does not print
>         LOGGER.error("error");  //prints to console
>     }
>
>     private static ConfigurationSource createConfigurationSource(Properties
> cfg) throws IOException {
>
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
>         cfg.store(out, null);
>         InputStream in = new ByteArrayInputStream(out.toByteArray());
>         return new ConfigurationSource(in);
>     }
> }
>
>
>
>
>
> So, In log4j2 , the Logger which is initialized as private static final,
> is not aware of the configurations, but in logj1.x, It is.
>
>
>
> Is there any way to make log4j2 code behave as log4j1.x did?
>
>
>
> Best Regards,
>
> Tarun
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.stal...@magine.com
Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com

Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.

Reply via email to