tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ankit Agarwal <ankit_agar...@yahoo.com.INVALID>
Subject Re: Using Log4J2 2.8 (via the 1.2 API Bridge) for Tomcat8 Internal Logging - RollingFileAppender does not (cannot?) create new Log File
Date Tue, 11 Apr 2017 16:28:24 GMT
Hi Cris,
1. No worries. All thoughts and questions are welcome because it helps me think too :)
2. You can replace the java.utils.logging entirely with Log4J in Tomcat. See the link I posted
in my very first email. The Tomcat documentation provides the steps.The only problem is that
Tomcat only supports the Log4J 1.x API. It doesn't natively support Log4J2 so we have to use
the 1.x -> 2.x Bridge and some things do not work. E.g., I've found that the bridge does
not support the "Delete" directive within the "DefaultRolloverStrategy", hence I have to delete
the old zipped Tomcat logs with a script myself -  More likely this is because "Delete" is
a Log4J2 construct that Tomcat doesn't know about yet
I'm replacing the internal logging of Tomcat so, e.g., the catalina log files and the localhost
log files are written by Log4J instead of the standard java.util.logging
Log4J2 works great within the WARs I deploy.
3. The problem is that, for me when the first log-able event occurs after the old log file
is zipped, a new log file is not created by the Tomcat Log4J. Instead nothing is logged and
operations just fail. E.g., once the old log file has been zipped, if I try to deploy a new
WAR, it just fails because there is no place to log messages (since the new log file was not
created).
Once I restart Tomcat, everything works fine. It seems that the Tomcat Log4J only rolls over
to a new file (i.e., creates it) on startup and not while its running.

Ankit


    On Tuesday, April 11, 2017 7:41 AM, "Berneburg, Cris J. - US" <cberneburg@caci.com>
wrote:
 

 Ankit

-----Original Message-----
From: Ankit Agarwal [mailto:ankit_agarwal@...] 
Sent: Monday, April 10, 2017 3:24 PM
To: users@tomcat.apache.org
Subject: Using Log4J2 2.8 (via the 1.2 API Bridge) for Tomcat8 Internal Logging - RollingFileAppender
does not (cannot?) create new Log File

> Hi,
>
> I’m using Log4J2 (2.8) via the 1.2 API Bridge for Tomcat 8 internal logging.
>
> I followed the instructions here:
> https://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j
> <https://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j>
> - With the exception that I also copied the Bridge JAR into the Tomcat8 lib directory
>
> I have configured Log4J2 with this XML file
>
> <?xml version="1.0" encoding="utf-8"?>
> <Configuration status="info">
>      <Properties>
>          <Property name="logDirectory">${sys:catalina.base}/logs</Property>
>          <Property name="systemName">CMS</Property>
>          <Property name="componentName">Tomcat</Property>
>          <Property name="serverIpAddress">${env:PUBLIC_IP_ADDRESS}</Property>
>          <!-- <Property name="layout">%d [%t] %-5p %c- %m%n</Property>
-->
>          <Property name="layout">%d{DATE} "%d{ISO8601}" "${systemName}" "${componentName}"
"%X{clientIpAddress}" "%X{clientTcpPort}" "%X{username}" "%X{sessionId}" "%X{sessionAuthenticationId}"
"%X{sessionAuthenticationToken}" "${serverIpAddress}" "%T" "%t" "%X{apiName}" "%X{apiSystemActionType}"
"%X{apiSystemItemType}" "%x" "%l" "%p" "%m"%n%n</Property>
>      </Properties>
>      <Appenders>
>          <Console name="CONSOLE" target="SYSTEM_OUT">
>                <PatternLayout pattern="${layout}"/>
>          </Console>
>          <RollingFile name="CATALINA" fileName="${logDirectory}/catalina.log"
filePattern="${logDirectory}/catalina-%i.log.gz">
>                <PatternLayout pattern="${layout}"/>
>                <Policies>
>                    <SizeBasedTriggeringPolicy size=“100 MB" />
>                </Policies>
>                <DefaultRolloverStrategy max="20" />
>          </RollingFile>
>          <RollingFile name="LOCALHOST" fileName="${logDirectory}/localhost.log"
filePattern="${logDirectory}/localhost-%i.log.gz">
>                <PatternLayout pattern="${layout}"/>
>                <Policies>
>                    <SizeBasedTriggeringPolicy size="100 MB"/>
>                </Policies>
>                <DefaultRolloverStrategy max="20" />
>          </RollingFile>
>          <RollingFile name="MANAGER" fileName="${logDirectory}/manager.log" filePattern="${logDirectory}/manager-%i.log.gz">
>                <PatternLayout pattern="${layout}"/>
>                <Policies>
>                    <SizeBasedTriggeringPolicy size="100 MB"/>
>                </Policies>
>                <DefaultRolloverStrategy max="20" />
>          </RollingFile>
>          <RollingFile name="HOST-MANAGER" fileName="${logDirectory}/host-manager.log"
filePattern="${logDirectory}/host-manager-%i.log.gz">
>                <PatternLayout pattern="${layout}"/>
>                <Policies>
>                    <SizeBasedTriggeringPolicy size="100 MB"/>
>                </Policies>
>                <DefaultRolloverStrategy max="20" />
>          </RollingFile>
>      </Appenders>
>      <Loggers>
>          <Root level="info">
>                <AppenderRef ref="CATALINA"/>
>          </Root>
>          <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
level="info" additivity="false">
>                <AppenderRef ref="LOCALHOST"/>
>          </Logger>
>          <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]"
level="info" additivity="false">
>                <AppenderRef ref="MANAGER"/>
>          </Logger>
>          <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]"
level="info" additivity="false">
>                <AppenderRef ref="HOST-MANAGER"/>
>          </Logger>
>      </Loggers>
> </Configuration>
>
> All 4 RollingFile Appenders are configured identically (except for
> the log filename).
>
> The problem I’m running into is that when the
> SizeBasedTriggeringPolicy is executed, the current log file is
> zipped. However, a new log file is not created.
>
> As a result, the Tomcat8 stops logging.
>
> If I restart Tomcat8, then a new file is created and the Tomcat8
> functions normally, but only until this new log file reaches its
> limit and is zipped up. Then once again, the problem repeats itself.
>
> Does the 1.2 API Bridge / Tomcat 8 not support the
> SizeBasedTriggeringPolicy?
>
> Do I have any options other than restarting the Tomcat8? Will the
> TimeBasedTriggeringPolicy work and is that my only option?
>
> Since the Log4J2 being used in Tomcat8 has no problem creating the
> required files on restart, I don’t think its a permissions issue.
>
> I’d appreciate any thoughts and pointers.
>
> Thanks,
> Ankit

3 things:

1. Sorry, I cannot answer your questions directly cuz I'm kind of newbie in this arena.

2. Are you allowed to overwrite what log files that Tomcat would generate anyway?  We use
Log4J2 to create custom log files and leave the Tomcat-generated ones alone.  Maybe our configuration
is a little wacky.  :-)

3. In my (very limited) experience, Log4J2 creates a new log file only when the first log-able
event actually happens.  IOW, it won't create an empty log file without actually having something
to log.

Please let us know what you learn and how you progress in solving the issue!

--
Cris Berneburg
CACI Lead Software Engineer


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org



   
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message