All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.log4j.HTMLLayout Maven / Gradle / Ivy

There is a newer version: 6.1.2
Show newest version
/*
 * 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.
 */

package org.apache.log4j;

import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.LocationInfo;
import org.apache.log4j.helpers.Transform;

/**
 * This layout outputs events in a HTML table.
 *
 * Appenders using this layout should have their encoding set to UTF-8 or
 * UTF-16, otherwise events containing non ASCII characters could result in
 * corrupted log files.
 *
 * @author Ceki Gülcü
 */
public class HTMLLayout extends Layout {

    protected final int BUF_SIZE = 256;
    protected final int MAX_CAPACITY = 1024;

    static String TRACE_PREFIX = "
    "; // output buffer appended to when format() is invoked private StringBuffer sbuf = new StringBuffer(BUF_SIZE); /** * A string constant used in naming the option for setting the the location * information flag. Current value of this string constant is * LocationInfo. * *

* Note that all option keys are case sensitive. * * @deprecated Options are now handled using the JavaBeans paradigm. This * constant is not longer needed and will be removed in the * near term. * */ public static final String LOCATION_INFO_OPTION = "LocationInfo"; /** * A string constant used in naming the option for setting the the HTML document * title. Current value of this string constant is Title. */ public static final String TITLE_OPTION = "Title"; // Print no location info by default boolean locationInfo = false; String title = "Log4J Log Messages"; /** * The LocationInfo option takes a boolean value. By default, it is set * to false which means there will be no location information output by this * layout. If the the option is set to true, then the file name and line number * of the statement at the origin of the log statement will be output. * *

* If you are embedding this layout within an * {@link org.apache.log4j.net.SMTPAppender} then make sure to set the * LocationInfo option of that appender as well. */ public void setLocationInfo(boolean flag) { locationInfo = flag; } /** * Returns the current value of the LocationInfo option. */ public boolean getLocationInfo() { return locationInfo; } /** * The Title option takes a String value. This option sets the document * title of the generated HTML document. * *

* Defaults to 'Log4J Log Messages'. */ public void setTitle(String title) { this.title = title; } /** * Returns the current value of the Title option. */ public String getTitle() { return title; } /** * Returns the content type output by this layout, i.e "text/html". */ public String getContentType() { return "text/html"; } /** * No options to activate. */ public void activateOptions() { } public String format(LoggingEvent event) { if (sbuf.capacity() > MAX_CAPACITY) { sbuf = new StringBuffer(BUF_SIZE); } else { sbuf.setLength(0); } sbuf.append(Layout.LINE_SEP + "" + Layout.LINE_SEP); sbuf.append(""); sbuf.append(event.timeStamp - LoggingEvent.getStartTime()); sbuf.append("" + Layout.LINE_SEP); String escapedThread = Transform.escapeTags(event.getThreadName()); sbuf.append(""); sbuf.append(escapedThread); sbuf.append("" + Layout.LINE_SEP); sbuf.append(""); if (event.getLevel().equals(Level.DEBUG)) { sbuf.append(""); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append(""); } else if (event.getLevel().isGreaterOrEqual(Level.WARN)) { sbuf.append(""); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append(""); } else { sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); } sbuf.append("" + Layout.LINE_SEP); String escapedLogger = Transform.escapeTags(event.getLoggerName()); sbuf.append(""); sbuf.append(escapedLogger); sbuf.append("" + Layout.LINE_SEP); if (locationInfo) { LocationInfo locInfo = event.getLocationInformation(); sbuf.append(""); sbuf.append(Transform.escapeTags(locInfo.getFileName())); sbuf.append(':'); sbuf.append(locInfo.getLineNumber()); sbuf.append("" + Layout.LINE_SEP); } sbuf.append(""); sbuf.append(Transform.escapeTags(event.getRenderedMessage())); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); if (event.getNDC() != null) { sbuf.append( ""); sbuf.append("NDC: " + Transform.escapeTags(event.getNDC())); sbuf.append("" + Layout.LINE_SEP); } String[] s = event.getThrowableStrRep(); if (s != null) { sbuf.append(""); appendThrowableAsHTML(s, sbuf); sbuf.append("" + Layout.LINE_SEP); } return sbuf.toString(); } void appendThrowableAsHTML(String[] s, StringBuffer sbuf) { if (s != null) { int len = s.length; if (len == 0) return; sbuf.append(Transform.escapeTags(s[0])); sbuf.append(Layout.LINE_SEP); for (int i = 1; i < len; i++) { sbuf.append(TRACE_PREFIX); sbuf.append(Transform.escapeTags(s[i])); sbuf.append(Layout.LINE_SEP); } } } /** * Returns appropriate HTML headers. */ public String getHeader() { StringBuilder sbuf = new StringBuilder(); sbuf.append( "" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + title + "" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("


" + Layout.LINE_SEP); sbuf.append("Log session start time " + new java.util.Date() + "
" + Layout.LINE_SEP); sbuf.append("
" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); if (locationInfo) { sbuf.append("" + Layout.LINE_SEP); } sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); return sbuf.toString(); } /** * Returns the appropriate HTML footers. */ public String getFooter() { StringBuilder sbuf = new StringBuilder(); sbuf.append("
TimeThreadLevelCategoryFile:LineMessage
" + Layout.LINE_SEP); sbuf.append("
" + Layout.LINE_SEP); sbuf.append(""); return sbuf.toString(); } /** * The HTML layout handles the throwable contained in logging events. Hence, * this method return false. */ public boolean ignoresThrowable() { return false; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy