銆丟UI緇勪歡銆佺敋鑷蟲(chóng)槸濂楁帴鍙f湇鍔″櫒銆丯T鐨勪簨浠惰褰曞櫒銆乁NIX Syslog瀹堟姢榪涚▼絳夛紱鎴戜滑涔熷彲浠ユ帶鍒舵瘡涓€鏉℃棩蹇楃殑杈撳嚭鏍煎紡
錛涢€氳繃瀹氫箟姣忎竴鏉℃棩蹇椾俊鎭殑綰у埆錛屾垜浠兘澶熸洿鍔犵粏鑷村湴鎺у埗鏃ュ織鐨勭敓鎴愯繃紼嬨€傛渶浠や漢鎰熷叴瓚g殑灝辨槸錛岃繖浜涘彲浠ラ€氳繃涓€
涓厤緗枃浠舵潵鐏墊椿鍦拌繘琛岄厤緗紝鑰屼笉闇€瑕佷慨鏀瑰簲鐢ㄧ殑浠g爜銆?br />銆€銆€
銆€銆€姝ゅ錛岄€氳繃Log4j鍏朵粬璇█鎺ュ彛錛屾?zhèn)ㄥ彲浠ュ湪C銆丆++銆?Net銆丳L/SQL紼嬪簭涓嬌鐢↙og4j錛屽叾璇硶鍜岀敤娉曚笌鍦↗ava紼嬪簭涓?/font>
涓€鏍鳳紝浣垮緱澶氳璦€鍒嗗竷寮忕郴緇熷緱鍒頒竴涓粺涓€涓€鑷寸殑鏃ュ織緇勪歡妯″潡銆傝€屼笖錛岄€氳繃浣跨敤鍚勭絎笁鏂規(guī)墿灞曪紝鎮(zhèn)ㄥ彲浠ュ緢鏂逛究鍦板皢
Log4j闆嗘垚鍒癑2EE銆丣INI鐢氳嚦鏄疭NMP搴旂敤涓€?/font>
浜岋紝浣跨敤鍓嶇殑鍑嗗銆?br />聽(tīng)1銆佷笅杞絣og4j 鍦板潃涓猴細(xì)http://jakarta.apache.org/log4j/docs/download.html.
聽(tīng)2銆佷綘鍙兘瑕佺敤鍒扮殑jar鏂囦歡鏈夛細(xì)
聽(tīng)聽(tīng)濡傛灉闇€瑕佸皢鏃ュ織鍙戦€佸埌閭錛屽垯闇€瑕乯avamail API,JAF API (the JavaBeans Activation Framework)
涓嬭澆鍦板潃錛毬?tīng)聽(tīng)http://java.sun.com/products/javamail/
聽(tīng)http://java.sun.com/beans/glasgow/jaf.html
聽(tīng)聽(tīng)濡傛灉闇€瑕乯ms鐨勬敮鎸侊紝鍒欓渶瑕乯ms API 涓嬭澆鍦板潃涓猴細(xì)
http://java.sun.com/products/jms/vendors.html
涓夛紝 Log4j浠嬬粛
聽(tīng)Log4j鐢變笁涓噸瑕佺殑緇勪歡鏋勬垚錛氭棩蹇椾俊鎭殑浼樺厛綰?priority錛屾棩蹇椾俊鎭殑杈撳嚭鐩殑鍦癆ppender錛屾棩蹇椾俊鎭殑杈?/font>
鍑烘牸寮忥紙甯冨眬錛塴ayout銆?br />聽(tīng)1銆佹棩蹇楃殑浼樺厛綰э紝
聽(tīng)浠庝綆鍒伴珮錛屼緷嬈℃湁錛欴EBUG,INFO,WARN,ERROR,鍒嗗埆鐢ㄦ潵鎸囧畾榪欐潯鏃ュ織淇℃伅鐨勯噸瑕佺▼搴︼紱濡傛灉瀹氫箟浜?jiǎn)浜?jiǎn)杈撳叆鐨勭駭
鍒負(fù)INFO錛屽垯鍙湁絳変簬鍙?qiáng)楂樹(shù)簬杩欎釜珩斿埆鐨勬墠杩涜澶勭悊锛屾鏃稙畣杈撳叆INFO,WARN,ERROR銆傚€煎緱娉ㄦ剰鐨勬槸錛岀駭鍒腑榪樻湁涓や釜鍏?/font>
閿瓧錛?br />聽(tīng)ALL:鎵撳嵃鎵€鏈夌殑鏃ュ織錛?br />聽(tīng)OFF錛氬叧闂墍鏈夌殑鏃ュ織杈撳嚭銆?br />聽(tīng)
聽(tīng)2銆佽緭鍑虹 Appender
聽(tīng)log4j鎻愪緵浜?jiǎn)浠ヤ笅鍑牽U嶅父鐢ㄧ殑杈撳嚭鐩殑鍦幫細(xì)
聽(tīng)org.apache.log4j.ConsoleAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒版帶鍒跺彴
聽(tīng)org.apache.log4j.FileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓枃浠?br />聽(tīng)org.apache.log4j.DailyRollingFileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓紝騫朵笖姣忓ぉ杈撳嚭鍒頒竴涓柊鐨勬棩蹇楁枃浠?
鎸夌収涓嶅悓鐨勯厤緗彲浠ュ畾涔夋瘡鏈堜竴涓棩蹇楁枃浠訛紝鎴栬€呮瘡鍛紝姣忓ぉ錛屾瘡灝忔椂錛屾瘡鍒嗛挓絳夎緭鍑轟竴涓柊鐨勬棩蹇楁枃浠躲€?br />聽(tīng)org.apache.log4j.RollingFileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓枃浠訛紝閫氳繃鎸囧畾鏂囦歡鐨勭殑灝哄錛屽綋鏂囦歡澶у皬
鍒拌揪鎸囧畾灝哄鐨勬椂鍊欎細(xì)鑷姩鎶婃枃浠舵敼鍚嶏紝濡傚悕涓篹xample.log鐨勬枃浠朵細(xì)鏀瑰悕涓篹xample.log.1錛屽悓鏃朵駭鐢熶竴涓柊鐨?/font>
example.log鏂囦歡銆傚鏋滄柊鐨勬枃浠跺啀嬈¤揪鍒版寚瀹氬昂瀵革紝鍙堜細(xì)鑷姩鎶婃枃浠舵敼鍚嶄負(fù)example.log.2錛屽悓鏃朵駭鐢熶竴涓猠xample.log
鏂囦歡銆備緷姝ょ被鎺紝鐩村埌example.log. MaxBackupIndex錛孧axBackupIndex鐨勫€煎彲鍦ㄩ厤緗枃浠朵腑瀹氫箟銆?br />聽(tīng)org.apache.log4j.WriterAppender錛屽皢鏃ュ織淇℃伅浠ユ祦鏍煎紡鍙戦€佸埌浠繪剰鎸囧畾鐨勫湴鏂廣€?br />聽(tīng)org.apache.log4j.jdbc.JDBCAppender錛岄€氳繃JDBC鎶婃棩蹇椾俊鎭緭鍑哄埌鏁版嵁搴撲腑銆?br />聽(tīng)org.apache.log4j.net.SMTPAppender,灝嗘棩蹇椾俊鎭互閭歡鐨勬柟寮忓彂閫佸埌鎸囧畾鐨勯偖綆便€?/font>
聽(tīng)3銆佽緭鍑烘牸寮忥紙甯冨眬錛塴ayout
聽(tīng)閫氳繃appender鍙互鎺у埗杈撳嚭鐨勭洰鐨勫湴錛岃€屽鏋滆鎺у埗杈撳嚭鐨勬牸寮忥紝灝卞彲閫氳繃log4j鐨刲ayout緇勪歡鏉ュ疄鐜般€傞€氳繃閰?/font>
緗枃浠跺畾涔変竴涓猘ppender鐨勮緭鍑烘牸寮忥紝Log4j鎻愪緵鐨勫竷灞€妯″紡鏈変互涓嬪嚑縐嶏細(xì)
聽(tīng)org.apache.log4j.ConsoleAppender錛岃緭鍑哄埌鎺у埗鍙?br />聽(tīng)org.apache.log4j.HTMLLayout錛屼互HTML琛ㄦ牸褰㈠紡甯冨眬
聽(tīng)org.apache.log4j.PatternLayout錛屽彲浠ョ伒媧誨湴鎸囧畾甯冨眬妯″紡
聽(tīng)org.apache.log4j.SimpleLayout錛屽寘鍚棩蹇椾俊鎭殑綰у埆鍜屼俊鎭瓧絎︿覆
聽(tīng)鍊煎緱涓€鎻愮殑鏄痮rg.apache.log4j.PatternLayout 浠attern鏂瑰紡鐨勫竷灞€錛屼嬌鐢≒attern鐨勬柟寮忔潵鎸囧畾甯冨眬銆?/font>
pattern 鐨勫弬鏁板涓嬶細(xì)ConversionPattern鍙傛暟鐨勬牸寮忓惈涔?br />聽(tīng)鏍煎紡鍚?鍚箟
聽(tīng)%c 杈撳嚭鏃ュ織淇℃伅鎵€灞炵殑綾葷殑鍏ㄥ悕
聽(tīng)%d 杈撳嚭鏃ュ織鏃墮棿鐐圭殑鏃ユ湡鎴栨椂闂達(dá)紝榛樿鏍煎紡涓篒SO8601錛屼篃鍙互鍦ㄥ叾鍚庢寚瀹氭牸寮忥紝姣斿錛?d{yyy-MM-dd
HH:mm:ss }錛岃緭鍑虹被浼鹼細(xì)2002-10-18- 22錛?0錛?8 ;姣斿 %d{HH:mm:ss,SSS} 鎴?%d{dd MMM yyyy HH:mm:ss,SSS}.
鏍煎紡鍙互鍙傝€?java綾?SimpleDateFormat,涓嶈繃 鎸夌収姝ょ被鐨勮緗細(xì)褰卞搷閫熷害銆備綘鍙互閫夋嫨鏇村揩鐨勬柟寮?%d{ISO8601},
%d{ABSOLUTE}, %d{RELATIVE}.鎴栬€呬嬌鐢╨og4j鐨処SO8601DateFormat, AbsoluteTimeDateFormat,
RelativeTimeDateFormat 鍜?DateTimeDateFormat 鏂瑰紡.
聽(tīng)%f 杈撳嚭鏃ュ織淇℃伅鎵€灞炵殑綾葷殑綾誨悕
聽(tīng)%l 杈撳嚭鏃ュ織浜嬩歡鐨勫彂鐢熶綅緗紝鍗寵緭鍑烘棩蹇椾俊鎭殑璇彞澶勪簬瀹冩墍鍦ㄧ殑綾葷殑絎嚑琛?br />聽(tīng)%m 杈撳嚭浠g爜涓寚瀹氱殑淇℃伅錛屽log(message)涓殑message
聽(tīng)%M 杈撳嚭鏃ュ織淇℃伅涓墍鍙戠敓鐨勬柟娉曞悕銆?br />聽(tīng)%n 杈撳嚭涓€涓洖杞︽崲琛岀錛學(xué)indows騫沖彴涓衡€淺r\n鈥濓紝Unix騫沖彴涓衡€淺n鈥?br />聽(tīng)%p 杈撳嚭浼樺厛綰э紝鍗矰EBUG錛孖NFO錛學(xué)ARN錛孍RROR錛孎ATAL銆傚鏋滄槸璋冪敤debug()杈撳嚭鐨勶紝鍒欎負(fù)DEBUG錛屼緷姝ょ被鎺?br />聽(tīng)%r 杈撳嚭鑷簲鐢ㄥ惎鍔ㄥ埌杈撳嚭璇ユ棩蹇椾俊鎭墍鑰楄垂鐨勬縐掓暟
聽(tīng)%t 杈撳嚭浜х敓璇ユ棩蹇椾簨浠剁殑綰跨▼鍚?br />鍥涖€佷嬌鐢?/strong>
聽(tīng)4.1.1 SimpleLayout 鍜?FileAppender 鏂瑰紡
浠ヤ笅鏄互鏂囦歡鐨勮緭鍑烘柟寮廇ppender鍜岀畝鍗曠殑甯冨眬鏂瑰紡S(chǎng)impleLayout鐨勪緥瀛愶細(xì)
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class simpandfile {
聽(tīng)聽(tīng) static Logger logger = Logger.getLogger(simpandfile.class);
聽(tīng)聽(tīng) public static void main(String args[]) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) SimpleLayout layout = new SimpleLayout();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) FileAppender appender = null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) try {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) appender = new FileAppender(layout,"output1.txt",false);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) } catch(Exception e) {}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.addAppender(appender);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.setLevel((Level) Level.DEBUG);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.debug("Here is some DEBUG");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.info("Here is some INFO");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.warn("Here is some WARN");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.error("Here is some ERROR");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.fatal("Here is some FATAL");
聽(tīng)聽(tīng) }
}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)棣栧厛瀹炰緥鍖朙ogger瀵硅薄銆俿tatic Logger logger = Logger.getLogger(simpandfile.class);鐒跺悗鎸囧畾杈撳嚭鐨勬柟
寮忓拰甯冨眬 appender = new FileAppender(layout,"output1.txt",false);logger.addAppender(appender);
鏈€鍚庡畾涔夌駭鍒細(xì)logger.addAppender(appender);榪欐牱瀹屾垚浜?jiǎn)log4j鏃ュ織綾葷殑鍒濆鍖?鎺ョ潃灝卞彲浠ヨ繘琛屾棩蹇楄緭鍑轟簡(jiǎn)銆傝繖灝辨槸
log4j鏃ュ織綾葷殑浣跨敤鏃剁殑涓€鑸『搴忋€傚洜浠ヤ笅紼嬪簭姣旇緝綆€鍗曪紝鐗瑰埆鐨勫湴鏂瑰皢浼?xì)鏈夋敞閲婂Q屽皢涓嶅啀瑙i噴銆?/font>
聽(tīng)4.1.2. HTMLLayout 鍜?WriterAppender
import java.io.*;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.WriterAppender;
public class htmlandwrite {
聽(tīng)聽(tīng) static Logger logger = Logger.getLogger(htmlandwrite.class);
聽(tīng)聽(tīng) public static void main(String args[]) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) HTMLLayout layout = new HTMLLayout();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) WriterAppender appender = null;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) try {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) FileOutputStream output = new FileOutputStream("output2.html");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) appender = new WriterAppender(layout,output);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) } catch(Exception e) {}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.addAppender(appender);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.setLevel((Level) Level.DEBUG);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.debug("Here is some DEBUG");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.info("Here is some INFO");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.warn("Here is some WARN");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.error("Here is some ERROR");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.fatal("Here is some FATAL");
聽(tīng)聽(tīng) }
}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
4.1.3. PatternLayout and ConsoleAppender
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.ConsoleAppender;
public class consandpatt {
聽(tīng)聽(tīng) static Logger logger = Logger.getLogger(consandpatt.class);
聽(tīng)聽(tīng) public static void main(String args[]) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // Note, %n is newline
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) String pattern =聽(tīng) "Milliseconds since program start: %r %n";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pattern += "Classname of caller: %C %n";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pattern += "Date in ISO8601 format: %d{ISO8601} %n";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pattern += "Location of log event: %l %n";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) pattern += "Message: %m %n %n";
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) PatternLayout layout = new PatternLayout(pattern);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) ConsoleAppender appender = new ConsoleAppender(layout);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.addAppender(appender);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.setLevel((Level) Level.DEBUG);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.debug("Here is some DEBUG");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.info("Here is some INFO");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.warn("Here is some WARN");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.error("Here is some ERROR");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) logger.fatal("Here is some FATAL");
聽(tīng)聽(tīng) }
}
4.2 浣跨敤閰嶇疆鏂囦歡鏉ュ畾涔夎緭鍑篈ppender鍜屽竷灞€鏍煎紡Layout
聽(tīng)log4j鏀寔涓ょ鏂瑰紡鐨勯厤緗柟寮忥紝.properties 浜岃繘鍒舵枃浠跺拰xml鏂囦歡鐨勬柟寮忋€傛垜浠畝鍗曡涓€涓?properties鐨勯厤
緗柟寮忓悗錛屽皢涓昏璁ㄨxml鏂囦歡鐨勯厤緗柟寮忋€?br />聽(tīng)
聽(tīng)4.2.1聽(tīng) 鎴戜滑灝嗕互.properties鏂囦歡鐨勬牸寮忓畾涔変袱縐嶈緭鍑烘柟寮忥紝涓€縐嶆槸杈撳嚭鍒版枃浠朵腑錛屽彟涓€縐嶆槸杈撳嚭鍒版暟鎹簱涓?/font>
銆?
聽(tīng)
聽(tīng)棣栧厛瀹氫箟simple.properties鏂囦歡,鏂囦歡瀹氫箟濡備笅錛?br />聽(tīng)
聽(tīng)#瀹氫箟浜?jiǎn)涓や釜杈撳嚭绔?br />聽(tīng)log4j.rootLogger = INFO,f,db
聽(tīng)# 瀹氫箟f杈撳嚭鍒版枃浠?騫朵笖鏂囦歡鏄殢鐫€澶у皬鑰屽鍔犵殑
聽(tīng)log4j.appender.f = org.apache.log4j.RollingFileAppender聽(tīng)
聽(tīng)log4j.appender.f.File = F:\\nepalon\\classes\\test1.log聽(tīng)
聽(tīng)log4j.appender.f.MaxFileSize = 1000KB聽(tīng)
聽(tīng)log4j.appender.f.MaxBackupIndex = 3聽(tīng)
聽(tīng)log4j.appender.f.layout = org.apache.log4j.PatternLayout
聽(tīng)
聽(tīng)log4j.appender.f.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
聽(tīng)#瀹氫箟db杈撳嚭鍒版暟鎹簱
聽(tīng)log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
聽(tīng)log4j.appender.db.BufferSize = 40
聽(tīng)log4j.appender.db.Driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
聽(tīng)log4j.appender.db.URL = jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test
聽(tīng)log4j.appender.db.User = sa
聽(tīng)log4j.appender.db.Password =
聽(tīng)log4j.appender.db.layout = org.apache.log4j.PatternLayout
聽(tīng)log4j.appender.db.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, priority,
category, message) values('%d{ISO8601}', '%t', '%-5p', '%c', '%m')
聽(tīng)鐒跺悗紼嬪簭涓皢寮曠敤榪欓厤緗枃浠躲€傚畾涔夊涓嬶細(xì)
聽(tīng)import org.apache.log4j.Logger;
聽(tīng)import org.apache.log4j.xml.DOMConfigurator;
聽(tīng)public class Test {
聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)static Logger logger = Logger.getLogger(Test.class);
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)public static void main(String args[]) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)//浠roperty鏂瑰紡璇誨埌閰嶇疆鏂囦歡銆?br />聽(tīng)聽(tīng)聽(tīng)PropertyConfigurator.configure ( "simple.properties" ) ;
銆€
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.debug("Here is some DEBUG");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.info("Here is some INFO");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.warn("Here is some WARN");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.error("Here is some ERROR");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.fatal("Here is some FATAL");
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)}
聽(tīng)}
聽(tīng)4.2.2 浠ml閰嶇疆
聽(tīng)紼嬪簭濡備笅錛?br />聽(tīng)import org.apache.log4j.Logger;
聽(tīng)import org.apache.log4j.xml.DOMConfigurator;
聽(tīng)public class Test {
聽(tīng)
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)static Logger logger = Logger.getLogger(Test.class);
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)public static void main(String args[]) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)//浠ML鏂瑰紡璇誨埌閰嶇疆鏂囦歡銆?br />聽(tīng)聽(tīng)聽(tīng) DOMConfigurator.configure("xmllog4jconfig.xml");
銆€
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.debug("Here is some DEBUG");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.info("Here is some INFO");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.warn("Here is some WARN");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.error("Here is some ERROR");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)logger.fatal("Here is some FATAL");
聽(tīng)聽(tīng) 聽(tīng)聽(tīng)}
聽(tīng)}
聽(tīng)xmllog4jconfig.xml 濡備笅錛?/font>
聽(tīng)<?xml version="1.0" encoding="UTF-8" ?>
聽(tīng)<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
聽(tīng)<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng) 聽(tīng)<appender name="appender" class="org.apache.log4j.FileAppender">
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="File" value="Indentify-Log.txt"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="Append" value="false"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng) <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)</layout>
聽(tīng) 聽(tīng)</appender>
聽(tīng) 聽(tīng)<root>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<priority value ="debug"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<appender-ref ref="appender"/>
聽(tīng) 聽(tīng)</root>
聽(tīng)</log4j:configuration>
聽(tīng)瀵規(guī)瘮properties鏂瑰紡鍜寈ml鏂瑰紡錛屽彲浠ョ湅鍑轟粬浠▼搴忎腑錛岄櫎浜?jiǎn)瀹氫箟璇诲彇閰嵕|枃浠剁殑鏂瑰紡涓嶅悓澶?鍏跺畠鐨勬牴鏈氨娌?/font>
鏈夊尯鍒簡(jiǎn)錛岃繖涔熷氨鏄痩og4j鐨勯瓍鍔涙墍鍦ㄤ簡(jiǎn)錛屼笉闇€瑕佹敼鍙樼▼搴忥紝鍙渶瑕侀€氳繃鏀瑰彉瀹氫箟鐨勯厤緗枃浠訛紝鎴戜滑灝卞彲浠ユ帶鍒舵棩蹇楃殑杈?/font>
鍑烘柟寮忥紝鏄惁杈撳嚭錛岃緭鍑烘牸寮忋€傛垜浠彲浠ラ€氳繃瀹氫箟涓嶅悓鐨剎ml鏂囦歡鏉ユ帶鍒惰緭鍑烘柟寮?浠ヤ笅鏄悇縐嶈緭鍑烘柟寮忎笌甯冨眬鐨勪緥瀛愩€?br />聽(tīng)
聽(tīng)4.2.3 姣旇緝綆€鍗曠殑涓€涓€?br />聽(tīng)<?xml version="1.0" encoding="gb2312" ?>
聽(tīng)<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
聽(tīng)<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽(tīng)<!--
聽(tīng)聽(tīng)閰嶇疆杈撳嚭鐨勬棩蹇楃洰褰曚負(fù)鍦ㄦ帶鍒跺彴銆?br />聽(tīng)聽(tīng)鏍煎紡閲囩敤涓篜atternLoyout,騫朵笖鏍峰紡涓猴細(xì)%d{ISO8601} %r [%c :: %p %m]%n
聽(tīng)-->聽(tīng)聽(tīng)
聽(tīng) 聽(tīng)<appender name="CA" class="org.apache.log4j.ConsoleAppender">聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="ConversionPattern" value="%d{ISO8601} %r [%c :: %p %m]%n"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)</layout>
聽(tīng) 聽(tīng)</appender>
聽(tīng) 聽(tīng)<root>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<priority value ="debug"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender-ref ref="CA"/>
聽(tīng) 聽(tīng)</root>
聽(tīng)</log4j:configuration>
聽(tīng)
聽(tīng)4.2.4 鏂囦歡鐨勮緭鍑?pattern鐨勫竷灞€
聽(tīng)<?xml version="1.0" encoding="UTF-8" ?>
聽(tīng)<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
聽(tīng)<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng) 聽(tīng)<appender name="appender" class="org.apache.log4j.FileAppender">
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="File" value="Indentify-Log.txt"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="Append" value="false"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)聽(tīng)<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)</layout>
聽(tīng) 聽(tīng)</appender>
聽(tīng) 聽(tīng)<root>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<priority value ="debug"/>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender-ref ref="appender"/>
聽(tīng) 聽(tīng)</root>
聽(tīng)</log4j:configuration>
聽(tīng)4.2.5 鎺у埗鍙扮殑杈撳嚭 鍜岀畝鍗曠殑甯冨眬
聽(tīng)<?xml version="1.0" encoding="UTF-8" ?>
聽(tīng)<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
聽(tīng)<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng) 聽(tīng)<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<layout class="org.apache.log4j.SimpleLayout"/>
聽(tīng) 聽(tīng)</appender>
聽(tīng) 聽(tīng)<root>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<priority value ="debug" />
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<appender-ref ref="ConsoleAppender"/>
聽(tīng) 聽(tīng)</root>
聽(tīng)</log4j:configuration>
聽(tīng)4.2.6 瀹氫箟涓夌杈撳嚭鏂瑰紡錛屾寜鐓т笉鍚岀殑綰у埆錛岄€夋嫨涓嶅悓鐨勮緭鍑烘柟寮?debug,info,綰у埆閫氳繃System.out鏉ユ墦鍗般€?br />聽(tīng)WARN,FATAL閫氳繃System.err鏉ヨ緭鍑恒€侲RROR,FATAL鍙戦€佸埌閭銆?/font>
聽(tīng)<?xml version="1.0" encoding="UTF-8" ?>
聽(tīng)<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
聽(tīng)<log4j:configuration>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="Target" value="System.out" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng) </layout>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<filter class="org.apache.log4j.varia.LevelRangeFilter">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMin" value="DEBUG"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMax" value="INFO"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</filter>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</appender>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender name="STDERR"聽(tīng) class="org.apache.log4j.ConsoleAppender">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="Target" value="System.err" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)</layout>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<filter class="org.apache.log4j.varia.LevelRangeFilter">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMin" value="WARN"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMax" value="FATAL"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</filter>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</appender>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!--聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!-- Declare the SMTPAppender -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!--聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender name="EMAIL"聽(tīng) class="org.apache.log4j.net.SMTPAppender">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="BufferSize" value="512" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="SMTPHost" value="mail.suiyuanwu.com" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="From" value="log4j@server5" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="To" value="web@suiyuanwu.com" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<param name="Subject" value="[SMTPAppender] Application message" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<layout class="org.apache.log4j.PatternLayout">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="ConversionPattern" value="[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</layout>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<filter class="org.apache.log4j.varia.LevelRangeFilter">
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMin" value="ERROR"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<param name="LevelMax" value="FATAL"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</filter>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)</appender>
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!--聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!-- setup log4j's root logger -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<!--聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) -->
聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<root>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)聽(tīng)<level value="all" />
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender-ref ref="STDOUT"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender-ref ref="STDERR"/>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 聽(tīng)<appender-ref ref="EMAIL" />
聽(tīng)聽(tīng) 聽(tīng) </root>
聽(tīng)</log4j:configuration>
聽(tīng)聽(tīng)聽(tīng)
浜斻€佸弬鑰冭祫鏂?/strong>
聽(tīng)1.http://www.vipan.com/htdocs/log4jhelp.html
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Don't Use System.out.println! Use Log4j - Vipan Singla
聽(tīng)2.http://jakarta.apache.org/log4j/docs/manual.html
聽(tīng) Short introduction to log4j - Ceki G眉lc眉 - March 2002
聽(tīng)3.http://www-128.ibm.com/developerworks/cn/java/jw-log4j/
聽(tīng)log4j鎻愪緵浜?jiǎn)瀵规棩蹇楄褰曠殑鎺у?br />聽(tīng)4.http://logging.apache.org/log4j/docs/documentation.html
聽(tīng)log4j鎻愪緵鐨勬枃妗c€?/font>