Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改log4j中的htmllayout_Java_Html_Layout_Log4j - Fatal编程技术网

Java 如何更改log4j中的htmllayout

Java 如何更改log4j中的htmllayout,java,html,layout,log4j,Java,Html,Layout,Log4j,我想在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 =${logfilenam

我想在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
我想更改“时间”列的名称,并在其中显示当前时间。
有人能帮我怎么做吗?

在下面的配置中配置您的布局

Log4j.rootLogger=DEBUG

log4j.appender.FileAppender =org.apache.log4j.FileAppender
log4j.appender.FileAppender.File= C:\test.html
log4j.appender.FileAppender.layout=org.apache.log4j.HTMLLayout

log4j.logger.<your packge>=FileAppender        
Log4j.rootLogger=DEBUG
log4j.appender.FileAppender=org.apache.log4j.FileAppender
log4j.appender.FileAppender.File=C:\test.html
log4j.appender.FileAppender.layout=org.apache.log4j.HTMLLayout
log4j.logger.=文件追加器

我找到了一个有效的解决方案

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;  
}  

} 
package com.mypackage;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入org.apache.log4j.spi.LoggingEvent;
/** 
*此HTML日志格式化程序是标准Log4J HTMLLayout格式化程序和
*将默认时间戳(相对于日志开始的毫秒)替换为更可读的时间戳
*时间戳(默认格式的示例为2008-11-21-18:35:21.472-0800)。
* */  
公共类MyLayout
扩展org.apache.log4j.HTMLLayout
{  
//正则表达式模式查找nnn…nnn(忽略所有空格)
私有静态最终字符串rxTimestamp=“\\s*\\s*\\s*(\\d*)\\s*”;
//*时间戳格式。可以通过包括以下内容来覆盖该格式
*Log4J配置文件中的属性:
*  
*log4j.appender..layout.TimestampFormat
*  
*使用与SimpleDataFormat指定的格式字符串相同的格式字符串。
*  
*/  
私有字符串timestampFormat=“yyyy-MM-dd HH:MM:ss.SZ”;//默认格式。示例:2008-11-21-18:35:21.472-0800
私有SimpleDataFormat sdf=新SimpleDataFormat(时间戳格式);
公共MyLayout()
{  
超级();
}  
/**重写HTMLLayout的format()方法*/
公共字符串格式(LoggingEvent事件)
{  
String record=super.format(event);//以默认的HTMLLayout格式获取日志记录。
Pattern=Pattern.compile(rxTimestamp);//RegEx查找默认时间戳
Matcher Matcher=pattern.Matcher(记录);
if(!matcher.find())//如果找不到默认时间戳,
{  
return record;//只返回未修改的日志记录。
}  
StringBuffer=新的StringBuffer(记录);
replace(matcher.start(1))//将默认时间戳替换为所需格式的时间戳。
匹配器端(1),
格式(新日期(事件时间戳));
return buffer.toString();//返回具有所需时间戳格式的日志记录。
}  
/**时间戳格式的Setter。如果指定了log4j.appender..layout.TimestampFormat属性,则调用该Setter*/
公共void setTimestampFormat(字符串格式)
{  
this.timestampFormat=格式;
this.sdf=new SimpleDataFormat(format);//使用TimestampFormat属性指定的格式
}  
/**正在使用的时间戳格式的Getter.*/
公共字符串getTimestampFormat()
{  
返回此.timestamp格式;
}  
} 

创建一个自定义布局,扩展org.apache.log4j.HTMLLayout类并覆盖
格式
方法


您可以查看格式化是如何进行的,并构建适合您需要的自己的版本

此解决方案中似乎缺少的一点是如何配置新扩展的
HTMLLayout
类,以便在通过电子邮件发送异常时获取并使用它

我们的工作正常,我们只需要将这一行添加到
log4j.properties
文件中

log4j.appender.email.layout=com.<yourPackage>.utils.CustomizedHTMLLayout
log4j.appender.email.layout=com..utils.CustomizedHTMLLayout

我按照你说的“log4j.logger.com.financial.scotiatester=File.layout”做了,但没有任何改变?@Emrah Karakoc更新答案,只需再次检查log4j:警告找不到logger的附件(com.financial.scotiatester.scotiajunolevel1test)。log4j:警告请正确初始化log4j系统。log4j:有关更多信息,请参阅警告。我在属性文件中删除了我的代码,并写下了你的代码。但是我现在得到了错误?
没有附加器
:您的log4j.properties不是
类路径
中的,但它是?我正在使用MAC。log4j.properties在我的包中。如果我像你说的那样更改属性,我就会出错。