2012-09-25 3 views
6

Javaのlog4jのhtmllayout(5列 - 時間、スレッド、レベル、カテゴリ、メッセージ)を変更したいと思います。log4jでhtmllayoutを変更するには

私の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 

iは "TIME" coloumnの名前を変更するには、そこに現在の時刻を表示したいです。 誰でも私にそれを手伝ってもらえますか?

答えて

0

は私が働く解決策を見つけた下記の構成で

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   
+0

「log4j.logger.com.financial.scotiatester = File.layout」と言っていただいたようですが、何も変わりませんでしたか? –

+0

@Emrah Karakoc 答えを更新して、もう一度チェックしてください。 – CycDemo

+0

log4j:WARN logger(com.financial.scotiatester.ScotiaJunoLevel1Tester)のアペンダーは見つかりませんでした。 log4j:WARN log4jシステムを適切に初期化してください。 log4j:WARN詳細については、http://logging.apache.org/log4j/1.2/faq.html#noconfigをご覧ください。 私はプロパティファイルで自分のコードを削除し、あなたのことを書き留めました。しかし、私は今エラーが発生する? –

4

をあなたのレイアウトを設定します。

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

} 
1

org.apache.log4j.HTMLLayoutクラスを拡張し、format方法を上書きするカスタムレイアウトを作成します。

フォーマットはどのようにcode of HTMLLayoutであるかを見て、自分のニーズに合った独自のバージョンを作成できます。

1

この解決策に欠けているように見える部分は、新しく拡張されたHTMLLayoutクラスを設定して、例外が電子メール送信されたときにピックアップされて使用されるようにする方法です。

私たちは動作しており、私たちはlog4j.propertiesファイルに追加されたこの1つのライナーを必要としました。

log4j.appender.email.layout=com.<yourPackage>.utils.CustomizedHTMLLayout 
関連する問題