作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在 Java 中更改 log4j 的 htmllayout(第 5 列 - 时间、线程、级别、类别、消息)。
我的 log4j.properties 是:
log4j.rootLogger=DEBUG, Console, File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File =${logfilename}
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.Title=HTML Layout Example
log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#[%d{MMM dd HH:mm:ss}] %-5p (%F:%L) - %m%n
log4j.appender.File.Threshold=INFO
log4j.appender.Console.Threshold=DEBUG
我想更改“TIME”列的名称并在那里显示当前时间。谁能帮我怎么做?
最佳答案
我找到了一个有效的解决方案。
package com.mypackage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.spi.LoggingEvent;
/**
* This HTML Log Formatter is a simple replacement for the standard Log4J HTMLLayout formatter and
* replaces the default timestamp (milliseconds, relative to the start of the log) with a more readable
* timestamp (an example of the default format is 2008-11-21-18:35:21.472-0800).
* */
public class MyLayout
extends org.apache.log4j.HTMLLayout
{
// RegEx pattern looks for <tr> <td> nnn...nnn </td> (all whitespace ignored)
private static final String rxTimestamp = "\\s*<\\s*tr\\s*>\\s*<\\s*td\\s*>\\s*(\\d*)\\s*<\\s*/td\\s*>";
//* The timestamp format. The format can be overriden by including the following
* property in the Log4J configuration file:
*
* log4j.appender.<category>.layout.TimestampFormat
*
* using the same format string as would be specified with SimpleDateFormat.
*
*/
private String timestampFormat = "yyyy-MM-dd-HH:mm:ss.SZ"; // Default format. Example: 2008-11-21-18:35:21.472-0800
private SimpleDateFormat sdf = new SimpleDateFormat(timestampFormat);
public MyLayout()
{
super();
}
/** Override HTMLLayout's format() method */
public String format(LoggingEvent event)
{
String record = super.format(event); // Get the log record in the default HTMLLayout format.
Pattern pattern = Pattern.compile(rxTimestamp); // RegEx to find the default timestamp
Matcher matcher = pattern.matcher(record);
if (!matcher.find()) // If default timestamp cannot be found,
{
return record; // Just return the unmodified log record.
}
StringBuffer buffer = new StringBuffer(record);
buffer.replace(matcher.start(1), // Replace the default timestamp with one formatted as desired.
matcher.end(1),
sdf.format(new Date(event.timeStamp)));
return buffer.toString(); // Return the log record with the desired timestamp format.
}
/** Setter for timestamp format. Called if log4j.appender.<category>.layout.TimestampFormat property is specfied */
public void setTimestampFormat(String format)
{
this.timestampFormat = format;
this.sdf = new SimpleDateFormat(format); // Use the format specified by the TimestampFormat property
}
/** Getter for timestamp format being used. */
public String getTimestampFormat()
{
return this.timestampFormat;
}
}
关于java - 如何更改 log4j 中的 htmllayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12583374/
我试图将 Log4J 包含在我的 Swing 应用程序中,当我每次尝试搜索而不是 Log4J2 时都有 Log4J 1.x 教程时,事情会变得困惑,我相信可能不会有太大改变,但在这一切之间我是没有像我
当我使用 log4j HTMLLayout 时,它会在不关闭的情况下生成 html 标签。因此,下次生成日志时,html 就会中断,正如您所理解的。 log4j.appender.abc.layout
我想在 Java 中更改 log4j 的 htmllayout(第 5 列 - 时间、线程、级别、类别、消息)。 我的 log4j.properties 是: log4j.rootLogger=DEB
我一直在使用 log4j 的 HTMLLayout 获取 html 格式的日志。但是,它只允许 5 列。我想获取发出日志请求的方法的名称。是有什么方法可以做到这一点?(我知道在 PatternLayo
我有一个 java 7 EE Web 应用程序。对于日志记录,我正在使用 logback。我怎样才能看到用 logger.debug 打印的日志或 logger.info在 console或 file
我是一名优秀的程序员,十分优秀!