log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize= 100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
首先åQŒæ˜¯è®„¡½®rootåQŒæ ¼å¼äØ“ log4j.rootLogger=[level],appenderName, ...åQŒå…¶ä¸levelž®±æ˜¯è®„¡½®éœ€è¦è¾“å‡ÞZ¿¡æ¯çš„¾U§åˆ«åQŒåŽé¢æ˜¯appender的输出的目的圎ͼŒappenderNamež®±æ˜¯æŒ‡å®šæ—¥å¿—ä¿¡æ¯è¾“出到哪个地æ–V€‚您å¯ä»¥åŒæ—¶æŒ‡å®šå¤šä¸ªè¾“出目的地ã€?/font> é…置日志信æ¯è¾“出目的地AppenderåQŒå…¶è¯æ³•ä¸?br />
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
Log4jæä¾›çš„appenderæœ‰ä»¥ä¸‹å‡ ¿U:
org.apache.log4j.ConsoleAppenderåQˆæŽ§åˆ¶å°åQ?br />
org.apache.log4j.FileAppenderåQˆæ–‡ä»Óž¼‰
org.apache.log4j.DailyRollingFileAppenderåQˆæ¯å¤©äñ”生一个日志文ä»Óž¼‰
org.apache.log4j.RollingFileAppenderåQˆæ–‡ä»¶å¤§ž®åˆ°è¾¾æŒ‡å®šå°ºå¯¸çš„æ—¶å€™äñ”生新文äšgåQ?br />
org.apache.log4j.WriterAppenderåQˆå°†æ—¥å¿—ä¿¡æ¯ä»¥æµæ ¼å¼å‘é€åˆ°ä»ÀL„指定的地方)
é…置日志信æ¯çš„æ ¼å¼ï¼ˆå¸ƒå±€åQ‰ï¼Œå…¶è¯æ³•䨓åQ?br />
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
....
log4j.appender.appenderName.layout.option = valueN
Log4jæä¾›çš„layoutæœ‰ä»¥ä¸‹å‡ ¿U:
org.apache.log4j.HTMLLayoutåQˆä»¥HTMLè¡¨æ ¼å½¢å¼å¸ƒå±€åQ‰ï¼Œ
org.apache.log4j.PatternLayoutåQˆå¯ä»¥çµ‹zÕdœ°æŒ‡å®šå¸ƒå±€æ¨¡å¼åQ‰ï¼Œ
org.apache.log4j.SimpleLayoutåQˆåŒ…嫿—¥å¿—ä¿¡æ¯çš„¾U§åˆ«å’Œä¿¡æ¯å—½W¦ä¸²åQ‰ï¼Œ
org.apache.log4j.TTCCLayoutåQˆåŒ…嫿—¥å¿—äñ”生的旉™—´ã€çº¿½E‹ã€ç±»åˆ«ç‰½{‰ä¿¡æ¯ï¼‰
Log4J采用¾cÖM¼¼Cè¯è¨€ä¸çš„printfå‡½æ•°çš„æ‰“å°æ ¼å¼æ ¼å¼åŒ–日志信æ¯åQŒæ‰“å°å‚数如下: %m 输出代ç 䏿Œ‡å®šçš„æ¶ˆæ¯
   %p 输出优先¾U§ï¼Œå³DEBUGåQŒINFOåQŒWARNåQŒERRORåQŒFATAL
  %r 输出自应用å¯åŠ¨åˆ°è¾“å‡ºè¯¥logä¿¡æ¯è€—费的毫¿U’æ•°
  %c 输出所属的¾cÈ›®åQŒé€šå¸¸ž®±æ˜¯æ‰€åœ¨ç±»çš„å…¨å?
  %t 输出产生该日志事件的¾U¿ç¨‹å?
  %n 输出一个回车æ¢è¡Œç¬¦åQŒWindowsòq›_°ä¸?#8220;\r\n”åQŒUnixòq›_°ä¸?#8220;\n”
  %d 输出日志旉™—´ç‚¹çš„æ—¥æœŸæˆ–æ—¶é—ß_¼Œé»˜è®¤æ ¼å¼ä¸ºISO8601åQŒä¹Ÿå¯ä»¥åœ¨å…¶åŽæŒ‡å®šæ ¼å¼ï¼Œæ¯”如åQ?d{yyy MMM dd HH:mm:ss,SSS}åQŒè¾“出类ä¼û|¼š 2002òq?0æœ?8æ—?/font> 22åQ?0åQ?8åQ?21
  %l 输出日志事äšgçš„å‘生佾|®ï¼ŒåŒ…括¾cÈ›®åã€å‘生的¾U¿ç¨‹åQŒä»¥åŠåœ¨ä»£ç ä¸çš„行数。ä‹D例:Testlog4.main(TestLog4.java:10)
4ã€Log4j在程åºä¸çš„ä‹Éç”?/strong>
è¦åœ¨è‡ªå·±çš„程åºä¸ä½¿ç”¨Log4jåQŒé¦–先需è¦å°†commons-logging.jarå’Œlogging-log4j-1.2.9.jarå¯¼å…¥åˆ°æž„å»ø™µ\径ä¸ã€‚ç„¶åŽå†ž®†log4j.properties攑ֈ°srcæ ¹ç›®å½•ä¸‹ã€‚è¿™æ ·å°±å¯ä»¥åœ¨ç¨‹åºä¸ä½¿ç”¨log4j了。在¾cÖM¸ä½¿ç”¨log4jåQ?/font> é¦–å…ˆå£°æ˜Žä¸€ä¸ªé™æ€å˜é‡?/font> Logger logger=Logger.getLog("classname")åQ›çŽ°åœ¨å°±å¯ä»¥ä½¿ç”¨äº†ï¼Œç”¨æ³•如下åQšlogger.debug("debug message")或者logger.info("info message")åQŒçœ‹ä¸‹é¢ä¸€ä¸ªå°ä¾‹ååQ?/font>
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
// BasicConfigurator replaced with PropertyConfigurator.
PropertyConfigurator.configure(args[0]);
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
}

]]>