ch.qos.logback.core.html.HTMLLayoutBase Maven / Gradle / Ivy
Show all versions of virtdata-lib-curves4 Show documentation
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.html;
import java.util.HashMap;
import java.util.Map;
import ch.qos.logback.core.Context;
import ch.qos.logback.core.CoreConstants;
import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
import ch.qos.logback.core.LayoutBase;
import ch.qos.logback.core.pattern.Converter;
import ch.qos.logback.core.pattern.ConverterUtil;
import ch.qos.logback.core.pattern.parser.Node;
import ch.qos.logback.core.pattern.parser.Parser;
import ch.qos.logback.core.spi.ScanException;
/**
* This class is a base class for HTMLLayout classes part of
* other logback modules such as logback-classic and logback-access.
*
*
* @author Sébastien Pennec
*/
public abstract class HTMLLayoutBase extends LayoutBase {
protected String pattern;
protected Converter head;
protected String title = "Logback Log Messages";
// It is the responsibility of derived classes to set
// this variable in their constructor to a default value.
protected CssBuilder cssBuilder;
// counter keeping track of the rows output
protected long counter = 0;
/**
* Set the ConversionPattern option. This is the string which controls
* formatting and consists of a mix of literal content and conversion
* specifiers.
*/
public void setPattern(String conversionPattern) {
pattern = conversionPattern;
}
/**
* Returns the value of the ConversionPattern option.
*/
public String getPattern() {
return pattern;
}
public CssBuilder getCssBuilder() {
return cssBuilder;
}
public void setCssBuilder(CssBuilder cssBuilder) {
this.cssBuilder = cssBuilder;
}
/**
* Parses the pattern and creates the Converter linked list.
*/
@Override
public void start() {
int errorCount = 0;
try {
Parser p = new Parser(pattern);
p.setContext(getContext());
Node t = p.parse();
this.head = p.compile(t, getEffectiveConverterMap());
ConverterUtil.startConverters(this.head);
} catch (ScanException ex) {
addError("Incorrect pattern found", ex);
errorCount++;
}
if (errorCount == 0) {
super.started = true;
}
}
protected abstract Map getDefaultConverterMap();
/**
* Returns a map where the default converter map is merged with the map
* contained in the context.
*/
public Map getEffectiveConverterMap() {
Map effectiveMap = new HashMap();
// add the least specific map fist
Map defaultMap = getDefaultConverterMap();
if (defaultMap != null) {
effectiveMap.putAll(defaultMap);
}
// contextMap is more specific than the default map
Context context = getContext();
if (context != null) {
@SuppressWarnings("unchecked")
Map contextMap = (Map) context.getObject(CoreConstants.PATTERN_RULE_REGISTRY);
if (contextMap != null) {
effectiveMap.putAll(contextMap);
}
}
return effectiveMap;
}
/**
* The Title option takes a String value. This option sets the
* document title of the generated HTML document.
*
*
* Defaults to 'Logback 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".
*/
@Override
public String getContentType() {
return "text/html";
}
/**
* Returns appropriate HTML headers.
*/
@Override
public String getFileHeader() {
StringBuilder sbuf = new StringBuilder();
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
sbuf.append("
");
sbuf.append(LINE_SEPARATOR);
sbuf.append(" ");
sbuf.append(title);
sbuf.append(" ");
sbuf.append(LINE_SEPARATOR);
cssBuilder.addCss(sbuf);
sbuf.append(LINE_SEPARATOR);
sbuf.append(" ");
sbuf.append(LINE_SEPARATOR);
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
return sbuf.toString();
}
public String getPresentationHeader() {
StringBuilder sbuf = new StringBuilder();
sbuf.append("
");
sbuf.append(LINE_SEPARATOR);
sbuf.append("Log session start time ");
sbuf.append(new java.util.Date());
sbuf.append("
");
sbuf.append(LINE_SEPARATOR);
sbuf.append(LINE_SEPARATOR);
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
buildHeaderRowForTable(sbuf);
return sbuf.toString();
}
private void buildHeaderRowForTable(StringBuilder sbuf) {
Converter c = head;
String name;
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
while (c != null) {
name = computeConverterName(c);
if (name == null) {
c = c.getNext();
continue;
}
sbuf.append("");
sbuf.append(computeConverterName(c));
sbuf.append(" ");
sbuf.append(LINE_SEPARATOR);
c = c.getNext();
}
sbuf.append(" ");
sbuf.append(LINE_SEPARATOR);
}
public String getPresentationFooter() {
StringBuilder sbuf = new StringBuilder();
sbuf.append("
");
return sbuf.toString();
}
/**
* Returns the appropriate HTML footers.
*/
@Override
public String getFileFooter() {
StringBuilder sbuf = new StringBuilder();
sbuf.append(LINE_SEPARATOR);
sbuf.append("");
return sbuf.toString();
}
protected void startNewTableIfLimitReached(StringBuilder sbuf) {
if (this.counter >= CoreConstants.TABLE_ROW_LIMIT) {
counter = 0;
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
sbuf.append("");
sbuf.append("");
sbuf.append(LINE_SEPARATOR);
buildHeaderRowForTable(sbuf);
}
}
protected String computeConverterName(Converter c) {
String className = c.getClass().getSimpleName();
int index = className.indexOf("Converter");
if (index == -1) {
return className;
} else {
return className.substring(0, index);
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy