You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Emi <em...@encs.concordia.ca> on 2016/10/07 15:08:59 UTC

"
" cause html log file cannot be displayed correctly.

Hello,

Tried log4j2.7, when stop/reload tomcat, html log file shows wrong format.

This happens only when there are already previous records in the html 
log file.


Debug steps:
================
(1) run login and log one/two records in html format

(2) stop webapp
     reinstalled webapp
     start webapp

     or just reload webapp

(3) run login and log record

test.html will be shown as:


<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
<hr size="1" noshade="noshade">
Log session start time Fri Oct 07 10:42:05 EDT 2016<br>
<br>
<table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466" 
width="100%">
<tr>
<th>Time</th>
<th>Thread</th>
<th>Level</th>
<th>Logger</th>
<th>Message</th>
</tr>

<tr>
<td>237858</td>
<td title="http-bio-8080-exec-22 thread">http-bio-8080-exec-22</td>
<td title="Level"><font color="#339933">DEBUG</font></td>
<td title="ProcessLogin logger">ProcessLogin</td>
<td title="Message">2016-10-07 10:42:25 username: abc trying to login</td>
</tr>


</table>
<br>
</body></html>


<tr>
<td>344092</td>
<td title="http-bio-8080-exec-29 thread">http-bio-8080-exec-29</td>
<td title="Level"><font color="#339933">DEBUG</font></td>
<td title="ProcessLogin logger">ProcessLogin</td>
<td title="Message">2016-10-07 10:44:11 username: abc trying to login</td>
</tr>



"</table><br></body></html>" cause the html cannot be displayed correctly.


If this cannot be fixed, can someone let me know is there a way when 
reinstall webapp or reload webapp from tomcat, there will always a new 
log file generated?

Want to upgrade jars from 2.3 to new version; log4j2.3 never with this 
problem.

Thanks a lot!
--
. tomcat 7.0.70
. log4j2.xml
<RollingFile name="debug_html"
                    fileName="@log4j.debug.html@"
                    filePattern="@log4j.debug.html@-%i.html">
          <HTMLLayout charset="UTF-8" title="login_out_info" />

          <Policies>
             <SizeBasedTriggeringPolicy size="1 MB" />
             <OnStartupTriggeringPolicy/>
          </Policies>
</RollingFile>

Re: "
" cause html log file cannot be displayed correctly.

Posted by Emi <em...@encs.concordia.ca>.
Hi Gary,
>
> Can you please post your configuration file?

I've removed nonHtml section(s) from log4j2.xml file.


<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
    <Appenders>
       <Console name="Console" target="SYSTEM_OUT">
          <PatternLayout pattern="%rEx{short} %d{yyyy-MMM-dd 
HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
       </Console>

       <RollingFile name="debug_html"
                    fileName="@log4j.debug.html@"
                    filePattern="@log4j.debug.html@-%i.html">
          <HTMLLayout charset="UTF-8" title="login_out_info" />

          <Policies>
             <SizeBasedTriggeringPolicy size="1 MB" />
             <OnStartupTriggeringPolicy/>
          </Policies>
       </RollingFile>
    </Appenders>


    <Loggers>

    <Logger name="action1" level="DEBUG" additivity="false">
       <AppenderRef ref="debug_html"   />
    </Logger>
    <Logger name="action2" level="DEBUG" additivity="false">
       <AppenderRef ref="debug_html"   />
    </Logger>

    <logger name="com.opensymphony.xwork2" level="OFF" additivity="false"/>

    <Root level="error">
       <AppenderRef ref="Console"   />
       <AppenderRef ref="error_log" />
    </Root>

    </Loggers>
</Configuration>



--
There is also log4j.dtd file(this is standard, I guess) paste as well:

<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<!-- Authors: Chris Taylor, Ceki Gulcu. -->

<!-- Version: 1.2 -->

<!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
element. -->

<!ELEMENT log4j:configuration (renderer*, appender*,plugin*, 
(category|logger)*,root?,
                                (categoryFactory|loggerFactory)?)>

<!-- The "threshold" attribute takes a level value below which -->
<!-- all logging statements are disabled. -->

<!-- Setting the "debug" enable the printing of internal log4j logging   -->
<!-- statements. -->

<!-- By default, debug attribute is "null", meaning that we not do touch -->
<!-- internal log4j logging settings. The "null" value for the threshold -->
<!-- attribute can be misleading. The threshold field of a repository    
  -->
<!-- cannot be set to null. The "null" value for the threshold attribute -->
<!-- simply means don't touch the threshold field, the threshold field   
-->
<!-- keeps its old value.                                                -->

<!ATTLIST log4j:configuration
   xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/"
   threshold (all|trace|debug|info|warn|error|fatal|off|null) "null"
   debug                    (true|false|null)  "null"
   reset                    (true|false) "false"
 >

<!-- renderer elements allow the user to customize the conversion of  -->
<!-- message objects to String.                                       -->

<!ELEMENT renderer EMPTY>
<!ATTLIST renderer
   renderedClass  CDATA #REQUIRED
   renderingClass CDATA #REQUIRED
 >

<!-- Appenders must have a name and a class. -->
<!-- Appenders may contain an error handler, a layout, optional 
parameters -->
<!-- and filters. They may also reference (or include) other appenders. -->
<!ELEMENT appender (errorHandler?, param*,
       rollingPolicy?, triggeringPolicy?, connectionSource?,
       layout?, filter*, appender-ref*)>
<!ATTLIST appender
   name         CDATA     #REQUIRED
   class     CDATA    #REQUIRED
 >

<!ELEMENT layout (param*)>
<!ATTLIST layout
   class        CDATA    #REQUIRED
 >

<!ELEMENT filter (param*)>
<!ATTLIST filter
   class        CDATA    #REQUIRED
 >

<!-- ErrorHandlers can be of any class. They can admit any number of -->
<!-- parameters. -->

<!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)>
<!ATTLIST errorHandler
    class        CDATA   #REQUIRED
 >

<!ELEMENT root-ref EMPTY>

<!ELEMENT logger-ref EMPTY>
<!ATTLIST logger-ref
   ref CDATA #REQUIRED
 >

<!ELEMENT param EMPTY>
<!ATTLIST param
   name        CDATA   #REQUIRED
   value        CDATA    #REQUIRED
 >


<!-- The priority class is org.apache.log4j.Level by default -->
<!ELEMENT priority (param*)>
<!ATTLIST priority
   class   CDATA    #IMPLIED
   value      CDATA #REQUIRED
 >

<!-- The level class is org.apache.log4j.Level by default -->
<!ELEMENT level (param*)>
<!ATTLIST level
   class   CDATA    #IMPLIED
   value      CDATA #REQUIRED
 >


<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named category. -->
<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
<!ATTLIST category
   class         CDATA   #IMPLIED
   name        CDATA    #REQUIRED
   additivity    (true|false) "true"
 >

<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named logger. -->
<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
   name        CDATA    #REQUIRED
   additivity    (true|false) "true"
 >


<!ELEMENT categoryFactory (param*)>
<!ATTLIST categoryFactory
    class        CDATA #REQUIRED>

<!ELEMENT loggerFactory (param*)>
<!ATTLIST loggerFactory
    class        CDATA #REQUIRED>

<!ELEMENT appender-ref EMPTY>
<!ATTLIST appender-ref
   ref CDATA #REQUIRED
 >

<!-- plugins must have a name and class and can have optional parameters -->
<!ELEMENT plugin (param*, connectionSource?)>
<!ATTLIST plugin
   name         CDATA        #REQUIRED
   class     CDATA  #REQUIRED
 >

<!ELEMENT connectionSource (dataSource?, param*)>
<!ATTLIST connectionSource
   class        CDATA  #REQUIRED
 >

<!ELEMENT dataSource (param*)>
<!ATTLIST dataSource
   class        CDATA  #REQUIRED
 >

<!ELEMENT triggeringPolicy ((param|filter)*)>
<!ATTLIST triggeringPolicy
   name         CDATA  #IMPLIED
   class     CDATA  #REQUIRED
 >

<!ELEMENT rollingPolicy (param*)>
<!ATTLIST rollingPolicy
   name         CDATA  #IMPLIED
   class     CDATA  #REQUIRED
 >


<!-- If no priority element is specified, then the configurator MUST not -->
<!-- touch the priority of root. -->
<!-- The root category always exists and cannot be subclassed. -->
<!ELEMENT root (param*, (priority|level)?, appender-ref*)>


<!-- 
==================================================================== -->
<!--                       A logging 
event                                -->
<!-- 
==================================================================== -->
<!ELEMENT log4j:eventSet (log4j:event*)>
<!ATTLIST log4j:eventSet
   xmlns:log4j             CDATA #FIXED "http://jakarta.apache.org/log4j/"
   version                (1.1|1.2) "1.2"
   includesLocationInfo   (true|false) "true"
 >


<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?,
                        log4j:locationInfo?, log4j:properties?) >

<!-- The timestamp format is application dependent. -->
<!ATTLIST log4j:event
     logger     CDATA #REQUIRED
     level      CDATA #REQUIRED
     thread     CDATA #REQUIRED
     timestamp  CDATA #REQUIRED
     time       CDATA #IMPLIED
 >

<!ELEMENT log4j:message (#PCDATA)>
<!ELEMENT log4j:NDC (#PCDATA)>

<!ELEMENT log4j:throwable (#PCDATA)>

<!ELEMENT log4j:locationInfo EMPTY>
<!ATTLIST log4j:locationInfo
   class  CDATA    #REQUIRED
   method CDATA    #REQUIRED
   file   CDATA    #REQUIRED
   line   CDATA    #REQUIRED
 >

<!ELEMENT log4j:properties (log4j:data*)>

<!ELEMENT log4j:data EMPTY>
<!ATTLIST log4j:data
   name   CDATA    #REQUIRED
   value  CDATA    #REQUIRED
 >



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Re: "
" cause html log file cannot be displayed correctly.

Posted by Gary Gregory <ga...@gmail.com>.
Emi,

Can you please post your configuration file?

Thank you,
Gary

On Tue, Oct 11, 2016 at 9:39 AM, Emi <em...@encs.concordia.ca> wrote:

> Hi Gary,
>
> org.apache.logging.log4j.core.layout.HtmlLayout.getHeader()
> writes more header bytes before it gets to:
>
> <body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
> Looking at the code I do not see how an HTML file written by Log4j 2.7 can
> start with a body tag.
>
> Can you verify that only Log4j 2.7 is on the classpath?
>
>
> All *log* related jars under WEB-INF/lib used to be:
>
> commons-logging-1.2.jar
> log4j-1.2-api-2.3.jar
> log4j-api-2.3.jar
> log4j-core-2.3.jar
> log4j-jcl-2.3.jar
> log4j-web-2.3.jar
>
>
>
>
> (1) Install new jars, WEB-INF/lib now shows:
> commons-logging-1.2.jar
> log4j-1.2-api-2.7.jar
> log4j-api-2.7.jar
> log4j-core-2.7.jar
> log4j-jcl-2.7.jar
> log4j-web-2.7.jar
>
>
>
> (2) start tomcat7;  log user login;
>
>      debug.html displays correctly as shown below:
>
>
> <html>
> <head>
> <meta charset="UTF-8"/>
> </head>
> <body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
> <hr size="1" noshade="noshade">
> Log session start time Tue Oct 11 12:26:50 EDT 2016<br>
> <br>
> <table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466"
> width="100%">
> <tr>
> <th>Time</th>
> <th>Thread</th>
> <th>Level</th>
> <th>Logger</th>
> <th>Message</th>
> </tr>
>
> <tr>
> <td>30382</td>
> <td title="http-bio-8080-exec-9 thread">http-bio-8080-exec-9</td>
> <td title="Level"><font color="#339933">DEBUG</font></td>
> <td title="ProcessLogin logger">ProcessLogin</td>
> <td title="Message">2016-10-11 12:27:12 login successfully</td>
> </tr>
>
>
>
>
> (3) http://hostname:8080/manager/html
>       Click button "Reload"
>
>
>
> (4) login again
>
>      debug.html shows wrong format. "<td>237137</td>" is not shown under
> table anymore.
>
>     Here is the html contents:
>
> <html>
> <head>
> <meta charset="UTF-8"/>
> <title>login_out_info</title>
> <style type="text/css">
> </style>
> </head>
> <body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
> <hr size="1" noshade="noshade">
> Log session start time Tue Oct 11 12:26:50 EDT 2016<br>
> <br>
> <table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466"
> width="100%">
> <tr>
> <th>Time</th>
> <th>Thread</th>
> <th>Level</th>
> <th>Logger</th>
> <th>Message</th>
> </tr>
>
> <tr>
> <td>30382</td>
> <td title="http-bio-8080-exec-9 thread">http-bio-8080-exec-9</td>
> <td title="Level"><font color="#339933">DEBUG</font></td>
> <td title="ProcessLogin logger">ProcessLogin</td>
> <td title="Message">2016-10-11 12:27:12 login successfully</td>
> </tr>
>
> </table>
> <br>
> </body></html>
>
> <tr>
> <td>237137</td>
> <td title="http-bio-8080-exec-2 thread">http-bio-8080-exec-2</td>
> <td title="Level"><font color="#339933">DEBUG</font></td>
> <td title="ProcessLogin logger">ProcessLogin</td>
> <td title="Message">2016-10-11 12:30:39 login successfully</td>
> </tr>
>
> ==================================================
>
> "</table><br></body></html>" is added, but there is no <table> for
> <TR><TD>237137....
>
> Any help?
>
> Thanks a lot!
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418">

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode={{linkCode}}&tag=garygregory-20&linkId={{link_id}}">Spring
Batch in Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Re: "
" cause html log file cannot be displayed correctly.

Posted by Emi <em...@encs.concordia.ca>.
Hi Gary,
> org.apache.logging.log4j.core.layout.HtmlLayout.getHeader()
> writes more header bytes before it gets to:
>
> <body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
> Looking at the code I do not see how an HTML file written by Log4j 2.7 
> can start with a body tag.
>
> Can you verify that only Log4j 2.7 is on the classpath?
>

All *log* related jars under WEB-INF/lib used to be:

commons-logging-1.2.jar
log4j-1.2-api-2.3.jar
log4j-api-2.3.jar
log4j-core-2.3.jar
log4j-jcl-2.3.jar
log4j-web-2.3.jar




(1) Install new jars, WEB-INF/lib now shows:
commons-logging-1.2.jar
log4j-1.2-api-2.7.jar
log4j-api-2.7.jar
log4j-core-2.7.jar
log4j-jcl-2.7.jar
log4j-web-2.7.jar



(2) start tomcat7;  log user login;

      debug.html displays correctly as shown below:


<html>
<head>
<meta charset="UTF-8"/>
</head>
<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
<hr size="1" noshade="noshade">
Log session start time Tue Oct 11 12:26:50 EDT 2016<br>
<br>
<table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466" 
width="100%">
<tr>
<th>Time</th>
<th>Thread</th>
<th>Level</th>
<th>Logger</th>
<th>Message</th>
</tr>

<tr>
<td>30382</td>
<td title="http-bio-8080-exec-9 thread">http-bio-8080-exec-9</td>
<td title="Level"><font color="#339933">DEBUG</font></td>
<td title="ProcessLogin logger">ProcessLogin</td>
<td title="Message">2016-10-11 12:27:12 login successfully</td>
</tr>




(3) http://hostname:8080/manager/html
       Click button "Reload"



(4) login again

      debug.html shows wrong format. "<td>237137</td>" is not shown 
under table anymore.

     Here is the html contents:

<html>
<head>
<meta charset="UTF-8"/>
<title>login_out_info</title>
<style type="text/css">
</style>
</head>
<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
<hr size="1" noshade="noshade">
Log session start time Tue Oct 11 12:26:50 EDT 2016<br>
<br>
<table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466" 
width="100%">
<tr>
<th>Time</th>
<th>Thread</th>
<th>Level</th>
<th>Logger</th>
<th>Message</th>
</tr>

<tr>
<td>30382</td>
<td title="http-bio-8080-exec-9 thread">http-bio-8080-exec-9</td>
<td title="Level"><font color="#339933">DEBUG</font></td>
<td title="ProcessLogin logger">ProcessLogin</td>
<td title="Message">2016-10-11 12:27:12 login successfully</td>
</tr>

</table>
<br>
</body></html>

<tr>
<td>237137</td>
<td title="http-bio-8080-exec-2 thread">http-bio-8080-exec-2</td>
<td title="Level"><font color="#339933">DEBUG</font></td>
<td title="ProcessLogin logger">ProcessLogin</td>
<td title="Message">2016-10-11 12:30:39 login successfully</td>
</tr>

==================================================

"</table><br></body></html>" is added, but there is no <table> for 
<TR><TD>237137....

Any help?

Thanks a lot!

Re: "
" cause html log file cannot be displayed correctly.

Posted by Gary Gregory <ga...@gmail.com>.
Emi,

This is odd, in 2.7, the method

org.apache.logging.log4j.core.layout.HtmlLayout.getHeader()

writes more header bytes before it gets to:

<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">

Looking at the code I do not see how an HTML file written by Log4j 2.7 can
start with a body tag.

Can you verify that only Log4j 2.7 is on the classpath?

Thank you,
Gary


On Fri, Oct 7, 2016 at 8:08 AM, Emi <em...@encs.concordia.ca> wrote:

> Hello,
>
> Tried log4j2.7, when stop/reload tomcat, html log file shows wrong format.
>
> This happens only when there are already previous records in the html log
> file.
>
>
> Debug steps:
> ================
> (1) run login and log one/two records in html format
>
> (2) stop webapp
>     reinstalled webapp
>     start webapp
>
>     or just reload webapp
>
> (3) run login and log record
>
> test.html will be shown as:
>
>
> <body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">
> <hr size="1" noshade="noshade">
> Log session start time Fri Oct 07 10:42:05 EDT 2016<br>
> <br>
> <table cellspacing="0" cellpadding="4" border="1" bordercolor="#224466"
> width="100%">
> <tr>
> <th>Time</th>
> <th>Thread</th>
> <th>Level</th>
> <th>Logger</th>
> <th>Message</th>
> </tr>
>
> <tr>
> <td>237858</td>
> <td title="http-bio-8080-exec-22 thread">http-bio-8080-exec-22</td>
> <td title="Level"><font color="#339933">DEBUG</font></td>
> <td title="ProcessLogin logger">ProcessLogin</td>
> <td title="Message">2016-10-07 10:42:25 username: abc trying to login</td>
> </tr>
>
>
> </table>
> <br>
> </body></html>
>
>
> <tr>
> <td>344092</td>
> <td title="http-bio-8080-exec-29 thread">http-bio-8080-exec-29</td>
> <td title="Level"><font color="#339933">DEBUG</font></td>
> <td title="ProcessLogin logger">ProcessLogin</td>
> <td title="Message">2016-10-07 10:44:11 username: abc trying to login</td>
> </tr>
>
>
>
> "</table><br></body></html>" cause the html cannot be displayed correctly.
>
>
> If this cannot be fixed, can someone let me know is there a way when
> reinstall webapp or reload webapp from tomcat, there will always a new log
> file generated?
>
> Want to upgrade jars from 2.3 to new version; log4j2.3 never with this
> problem.
>
> Thanks a lot!
> --
> . tomcat 7.0.70
> . log4j2.xml
> <RollingFile name="debug_html"
>                    fileName="@log4j.debug.html@"
>                    filePattern="@log4j.debug.html@-%i.html">
>          <HTMLLayout charset="UTF-8" title="login_out_info" />
>
>          <Policies>
>             <SizeBasedTriggeringPolicy size="1 MB" />
>             <OnStartupTriggeringPolicy/>
>          </Policies>
> </RollingFile>
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory