Thanks  Jochen. Your reply is all i need.

Regards,
Raj

On Fri, Aug 10, 2018 at 3:09 PM, Jochen Wiedmann <jochen.wiedm...@gmail.com>
wrote:

> Hi,
>
> On Fri, Aug 10, 2018 at 10:48 AM Rajvinder Pal <rajvinder....@gmail.com>
> wrote:
> >
> > Hi,
> >
> > I have a query regarding log4j2 initialization from external location.
> Why
> > cannot  i initialize log4j2 by specifying System Property in Application
> > server as
> >
> > log4j.configurationFile : file:///d:/log4j2.xml
> >
> > and get Logger in Java files.
> >
> > Why do i need log4j-web-2.9.1.jar? what extra functionality does this jar
> > provide? I  Just want to understand if first way is sufficient for a web
> > application.
> >
>
> as far as I am concerned, there is absolutely no reason, why you
> shouldn't simply use log4j2-core, and log4j2-api in a web application,
> like you should do in any other application. There are a few things to
> consider, though:
>
> - Assuming, that you want your log4j configuration per web app: Make
> sure, that the log4j files are in WEB-INF/lib. Do *not* use the
> containers libraries, if there are any. And, do *not* add the log4j
> jars to the containers class path, for example by putting them into
> <TOMCAT_HOME>/lib, or whatever.
> - You should use a ServletContextInitializer to add log4j. This could
> look roughly like the following:
>
>    private LoggerContext loggerContext;
>    public void contextInitialized(ServletContext pContext) {
>       final String log4jXmlPath = System.getProperty("log4j.
> configurationFile");
>       final File log4jXmlFile = new File(log4jXmlPath);
>       try (InputStream in = new FileInputStream(log4jXmlFile)) {
>           ConfigurationSource cs = new ConfigurationSource(in,
> log4jXmlFile);
>           loggerContext = Configurator.initialize(cs,
> Thread.currentThread.getContextClassLoader());
>      }
>   }
>   public void contextDestroyed(ServletContext pContext) {
>     loggerContext.close();
>   }
>
> - It is another matter, how to access the loggerContext to create
> loggers. In particular, something like this won't work:
>
>     private static final Logger log = LogManager.getLogger(MyClass);
>
>   because this cannot access the loggerContext. (That is, perhaps,
> something that log4j-web does for you. So, this still
>   might be your best option.)
>
>   My typical approach to work around that problem would be to have
> loggers injected by Guice, or Spring, and make
>   sure that the respective framework uses the loggerContext when
> creating those loggers.
>
> Jochen
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>
>

Reply via email to