You are correct that log4j-to-jul routes the log4j2 API to java.util.logging. When using log4j-to-jul you cannot use ANY other log4j modules except for log4j-api. You must configure Tomcat’s logging to handle all the logging for your application.
Ralph > On Jun 2, 2023, at 3:13 PM, Jason Guild <jason.gu...@alaska.gov> wrote: > > Hi All: > > I have a web application that uses log4j (v2.20) which runs inside Tomcat 9.x > on Java 8. > > Currently, the WEB-INF/log4j2.xml configuration file in the application sends > its output to a rolling file appender targeting a separate file on the file > system, but what I'd like to do is make all log4j output go to the regular > per-application log under ${catalina_base}/logs which is managed by the stock > Tomcat JULI implementation. > > We now have the log4j-to-jul module which can adapt log4j 2 output back to > java.util.logging. > Similar to my understanding of the purpose for log4j-to-slf4j, it seems that > log4j-to-jul is meant to be used as an implementation by itself for log4j-api > and without log4j-core. > > The application currently uses log4j-web to get the all the essential setup > for initializing log4j 2 under an application container. The log4j-web > library appears to have a hard dependency on log4j-core. > > After adding log4j-to-jul to the application classpath, I can see that it is > recognized: >> Multiple logging implementations found: >> Factory: org.apache.logging.log4j.core.impl.Log4jContextFactory, Weighting: >> 10 >> Factory: org.apache.logging.log4j.tojul.JULLoggerContextFactory, Weighting: >> 20 > > But then the following error is reported: >> ERROR StatusLogger LogManager returned an instance of >> org.apache.logging.log4j.tojul.JULLoggerContextFactory which does not >> implement org.apache.logging.log4j.core.impl.Log4jContextFactory. Unable to >> initialize Log4j. > > In org.apache.logging.core.config.Configurator, line 47 there is a > conditional that checks the return type of the logging implementation is-a > Log4jContextFactory. The problem is then that JULLoggerContextFactory > implements only LoggerContextFactory. > > I'd like to keep my tomcat container as stock as possible. Particularly, > continuing to use the built-in JULI per-application logging and *not* > switching the entire container to use log4j as its logging implementation. > > Can anyone suggest how I can use log4j-to-jul successfully for my use case? > > Thanks, > Jason > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-user-h...@logging.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org