2012-09-25 11 views
6

में htmllayout को कैसे बदलें I जावा में log4j के htmllayout (5 कॉलम - टाइम, थ्रेड, लेवल, श्रेणी, संदेश) को बदलना चाहते हैं।लॉग 4j

मेरी 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 

मैं "समय" 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 लॉगर (com.financial.scotiatester.ScotiaJunoLevel1Tester) के लिए कोई परिशिष्ट नहीं पाया जा सकता है। log4j: चेतावनी कृपया 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 फ़ाइल में जोड़े गए एक लाइनर की आवश्यकता है।

log4j.appender.email.layout=com.<yourPackage>.utils.CustomizedHTMLLayout 
संबंधित मुद्दे