锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV永久无码精品成人,情人伊人久久综合亚洲,亚洲国产成人精品不卡青青草原http://www.tkk7.com/rendong/category/14831.htmlzh-cnFri, 02 Mar 2007 06:53:07 GMTFri, 02 Mar 2007 06:53:07 GMT60log4jhttp://www.tkk7.com/rendong/archive/2006/09/04/67586.htmlrendongrendongMon, 04 Sep 2006 07:02:00 GMThttp://www.tkk7.com/rendong/archive/2006/09/04/67586.htmlhttp://www.tkk7.com/rendong/comments/67586.htmlhttp://www.tkk7.com/rendong/archive/2006/09/04/67586.html#Feedback0http://www.tkk7.com/rendong/comments/commentRss/67586.htmlhttp://www.tkk7.com/rendong/services/trackbacks/67586.html

鏃ュ織璁?/font>
銆銆
銆銆 鍦ㄥ簲鐢ㄧ▼搴忎腑杈撳嚭鏃ュ織鏈夋湁涓変釜鐩殑錛?/span>

錛?錛夌洃瑙嗕唬鐮佷腑鍙橀噺鐨勫彉鍖栨儏鍐碉紝鎶婃暟鎹懆鏈熸у湴璁板綍鍒版枃浠朵腑渚涘叾浠栧簲鐢ㄨ繘琛岀粺璁″垎鏋愬伐浣溿?/span>

錛?錛夎窡韙唬鐮佽繍琛岃繘杞ㄨ抗錛屼綔涓烘棩鍚庡璁$殑渚濇嵁銆?/span>

錛?錛夋媴褰撻泦鎴愬紑鍙戠幆澧冧腑鐨勮皟璇曞櫒錛屽悜鏂囦歡鎴栨帶鍒跺彴鎵撳嵃浠g爜鐨勮皟璇曚俊鎭?/span>

銆銆Apache鑳界敤鏃ュ織鍖咃紙Commons Logging Package錛夋槸Apache鐨勪竴涓紑鏀炬簮浠g爜欏圭洰錛屽畠鎻愪緵浜嗕竴緇勯氱敤鐨勬棩蹇楁帴鍙o紝 鐢ㄦ埛鍙互鑷敱鍦伴夋嫨瀹炵幇鏃ュ織鎺ュ彛鐨勭涓夋柟杞歡銆傞氱敤鏃ュ織鍖呯洰鍓嶆敮鎸佷互涓嬫棩蹇楀疄鐜幫細

  • 聽log4J鏃ュ織鍣紙http://jakarta.apache.org/log4j錛?
  • JDK1.4 Logging鏃ュ織鍣?JDK1.4鑷甫)
  • SimpleLog鏃ュ織鍣?鎶婃棩蹇楁秷鎭緭鍑哄埌鏍囧噯緋葷粺閿欒嫻丼ystem.err)
  • NoOpLog(涓嶈緭鍑轟換浣曟棩蹇椾俊鎭?

    閫氱敤鏃ュ織鍖呬腑鐨勪袱涓父鐢ㄦ帴鍙o細LogFactory鍜孡og錛屽垎鍒粙緇嶅涓嬶細

  • Log鎺ュ彛

閫氱敤鏃ュ織鍖呮妸娑堟伅鍒嗕負6涓駭鍒細FATAL銆丒RROR銆乄ARN銆両NFO銆丏EBUG鍜孴RACE銆傚叾涓璅ATAL綰у埆鏈楂橈紝
TRACE綰у埆鏈浣庛?Log鎺ュ彛鎻愪緵杈撳嚭涓嶅悓綰у埆娑堟伅鐨勬柟娉曪細

off---------------------------------鏈楂樼瓑綰х殑錛岀敤浜庡叧闂墍鏈夋棩蹇楄褰?/span>

fatal(Object message)-------杈撳嚭FATAL綰у埆鐨勬秷鎭?/span>

error(Object message)-------杈撳嚭ERROR綰у埆鐨勬秷鎭?/span>

warn(Object message)-------杈撳嚭WARN綰у埆鐨勬秷鎭?/span>

info(Object message)-------杈撳嚭INFO綰у埆鐨勬秷鎭?/span>

debug(Object message)-------杈撳嚭DEBUG綰у埆鐨勬秷鎭?/span>

trace(Object message)-------杈撳嚭TRACE綰у埆鐨勬秷鎭?/span>

all----------------------------------鏈浣庣瓑綰х殑錛岀敤浜庢墦寮鎵鏈夋棩蹇楄褰?/span>

娉細鍙湁褰撹緭鍑烘棩蹇楃殑綰у埆澶т簬鎴栫瓑浜庝負鏃ュ織閰嶇疆鍣ㄩ厤緗殑鏃ュ織綰у埆鏃訛紝榪欎釜鏂規硶鎵嶄細鎵ц銆?/span>

銆銆濡備綍鎸囧畾鏃ュ織鍣ㄧ殑鏃ュ織綰у埆錛屼笉鍚岀殑鏃ュ織鍣ㄥ疄鐜頒細鏈変笉鍚岀殑瀹炵幇鏂規銆?/span>

  • LogFactory鎺ュ彛

LogFactory鎺ュ彛鎻愪緵浜嗚幏寰楁棩蹇楀櫒瀹炰緥鐨勪袱涓潤鎬佹柟娉曪細

public static Log getLog(String name) throws LogConfigurationException;

public static Log getLog(Class class) throws LogConfigurationException;

娉細name鍙傛暟浣滀負鏃ュ織鍣ㄧ殑鍚嶅瓧錛沜lass鍙傛暟鎸囧畾綾誨悕浣滀負鏃ュ織鍣ㄥ悕瀛椼?/span>

銆銆銆銆
log4j綆浠?/font>
銆銆 鍑犱箮姣忎釜澶х殑搴旂敤紼嬪簭閮芥湁瀹冭嚜宸辯殑鏃ュ織鍜岃窡韙▼搴忕殑API銆傞『搴旇繖涓瑙勫垯錛孍.U.聽SEMPER欏圭洰緇勫喅瀹?br />緙栧啓瀹冭嚜宸辯殑紼嬪簭璺熻釜API錛坱racing聽API錛夈傝繖寮濮嬩簬1996騫存棭鏈熴傜粡榪囨棤鏁扮殑宸ヤ綔錛屾洿鏀瑰拰鎬ц兘鍔犲己錛岃繖
涓狝PI緇堜簬鎴愪負涓涓崄鍒嗗彈嬈㈣繋鐨凧ava鏃ュ織杞歡鍖咃紝閭e氨鏄痩og4j銆傝繖涓蔣浠跺寘鐨勫彂琛岄伒瀹坥pen聽source鍔ㄨ璁?br />璇佺殑Apache聽Software聽License銆傛渶鏂扮殑log4j鐗堟湰鍖呮嫭鍏ㄩ儴鐨勬簮浠g爜錛岀被鏂囦歡鍜屾枃妗h祫鏂欙紝
鍙互鍦?/font>http://logging.apache.org/log4j/鎵懼埌瀹冧滑銆傚彟澶栵紝log4j宸茬粡琚漿鎹㈡垚聽C,聽C++,聽C#,聽Perl,聽Python,聽
Ruby,聽鍜屄燛iffel聽璇█銆?br />
銆銆

銆 銆Log4j鏄疉pache鐨勪竴涓紑鏀炬簮浠g爜欏圭洰錛岄氳繃浣跨敤Log4j錛屾垜浠彲浠ユ帶鍒舵棩蹇椾俊鎭緭閫佺殑鐩殑鍦版槸鎺у埗鍙般?br />鏂囦歡銆丟UI緇勪歡銆佺敋鑷蟲槸濂楁帴鍙f湇鍔?鍣ㄣ丯T鐨勪簨浠惰褰曞櫒銆乁NIX Syslog瀹堟姢榪涚▼絳夛紱鎴戜滑涔熷彲浠ユ帶鍒舵瘡涓鏉?br />鏃ュ織鐨勮緭鍑烘牸寮忥紱閫氳繃瀹氫箟姣忎竴鏉℃棩蹇椾俊鎭殑綰у埆錛屾垜浠兘澶熸洿鍔犵粏鑷村湴鎺у埗鏃ュ織鐨勭敓鎴愯繃紼嬨傛渶浠や漢鎰熷叴瓚?br />鐨勫氨 鏄紝榪欎簺鍙互閫氳繃涓涓厤緗枃浠舵潵鐏墊椿鍦拌繘琛岄厤緗紝鑰屼笉闇瑕佷慨鏀瑰簲鐢ㄧ殑浠g爜銆?br />銆銆
銆銆

log4j涓変釜緇勪歡

聽聽聽聽聽聽 閫氬父錛屾垜浠兘鎻愪緵涓涓悕涓?log4j.properties鐨勬枃浠訛紝鍦ㄧ涓嬈¤皟鐢ㄥ埌Log4J鏃訛紝Log4J浼氬湪綾昏礬寰?br />錛?./web-inf/class/褰撶劧涔熷彲浠ユ斁鍒板叾瀹冧換浣曠洰褰曪紝鍙璇ョ洰褰曡鍖呭惈鍒扮被璺緞涓嵆鍙級涓畾浣嶈繖涓枃浠訛紝騫惰鍏?br />榪欎釜鏂囦歡瀹屾垚鐨勯厤緗傝繖涓厤緗枃浠跺憡 璇塋og4J浠ヤ粈涔堟牱鐨勬牸寮忋佹妸浠涔堟牱鐨勪俊鎭佽緭鍑哄埌浠涔堝湴鏂廣?br />銆銆 Log4j鏈変笁涓富瑕佺殑緇勪歡錛歀oggers(璁板綍鍣?錛孉ppenders(杈撳嚭婧?鍜孡ayouts(甯冨眬)錛岃繖閲屽彲綆鍗曠悊瑙d負鏃ュ織
綾誨埆錛屾棩蹇楄杈撳嚭鐨勫湴鏂瑰拰鏃ュ織浠ヤ綍縐嶅艦寮忚緭鍑恒傜患鍚堜嬌鐢ㄨ繖涓変釜緇勪歡鍙互杞繪澗鐨勮褰曚俊鎭殑綾誨瀷鍜岀駭鍒紝騫跺彲
浠ュ湪榪愯鏃舵帶鍒舵棩蹇楄緭鍑虹殑鏍峰紡鍜屼綅緗備笅闈㈠涓変釜緇勪歡鍒嗗埆榪涜璇存槑錛?br />銆銆
銆銆 1銆?Loggers
銆 銆Loggers緇勪歡鍦ㄦ緋葷粺涓鍒嗕負浜斾釜綰у埆錛欴EBUG銆両NFO銆乄ARN銆丒RROR鍜孎ATAL銆傝繖浜斾釜綰у埆鏄湁欏哄簭
鐨勶紝DEBUG < INFO < WARN < ERROR < FATAL錛屽垎鍒敤鏉ユ寚瀹氳繖鏉℃棩蹇椾俊鎭殑閲嶈紼嬪害,鏄庣櫧榪欎竴鐐瑰緢閲嶈錛?br />榪欓噷Log4j鏈変竴涓鍒欙細鍋囪Loggers綰у埆涓篜錛屽鏋滃湪Loggers涓彂鐢熶簡涓涓駭鍒玅姣擯楂橈紝鍒欏彲浠ュ惎鍔紝鍚﹀垯灞忚斀鎺夈?br />鍋囪浣犲畾涔夌殑綰у埆鏄痠nfo錛岄偅涔坋rror鍜寃arn鐨勬棩蹇楀彲浠ユ樉紺鴻屾瘮浠栦綆鐨刣ebug淇℃伅灝變笉鏄劇ず浜嗐?br />聽銆
銆銆 Java紼嬪簭涓句緥鏉ヨ錛?br />銆銆
銆銆 //寤虹珛Logger鐨勪竴涓疄渚嬶紝鍛藉悕涓衡渃om.foo鈥?br />銆銆銆 Logger銆logger = Logger.getLogger("com.foo"); //"com.foo"鏄疄渚嬭繘琛屽懡鍚嶏紝涔熷彲浠ヤ換鎰?br />銆銆 //璁劇疆logger鐨勭駭鍒傞氬父涓嶅湪紼嬪簭涓緗甽ogger鐨勭駭鍒備竴鑸湪閰嶇疆鏂囦歡涓緗?br />銆銆 logger.setLevel(Level.INFO);
銆銆 Logger barlogger = Logger.getLogger("com.foo.Bar");
銆銆 //涓嬮潰榪欎釜璇鋒眰鍙敤錛屽洜涓篧ARN >= INFO
銆銆 logger.warn("Low fuel level.");
銆銆 //涓嬮潰榪欎釜璇鋒眰涓嶅彲鐢紝鍥犱負DEBUG < INFO
銆銆 logger.debug("Starting search for nearest gas station.");
銆銆 //鍛藉悕涓衡渃om.foo.bar鈥濈殑瀹炰緥barlogger浼氱戶鎵垮疄渚嬧渃om.foo鈥濈殑綰у埆銆傚洜姝わ紝涓嬮潰榪欎釜璇鋒眰鍙敤錛屽洜涓篒NFO >= INFO
銆銆 barlogger.info("Located nearest gas station.");
銆銆 //涓嬮潰榪欎釜璇鋒眰涓嶅彲鐢紝鍥犱負DEBUG < INFO
銆銆 barlogger.debug("Exiting gas station search");
銆銆 榪欓噷鈥滄槸鍚﹀彲鐢ㄢ濈殑鎰忔濇槸鑳藉惁杈撳嚭Logger淇℃伅銆?br />銆銆銆銆 鍦ㄥLogger瀹炰緥榪涜鍛藉悕鏃訛紝娌℃湁闄愬埗錛屽彲浠ュ彇浠繪剰鑷繁鎰熷叴瓚g殑鍚嶅瓧銆備竴鑸儏鍐典笅寤鴻浠ョ被鐨勬墍鍦ㄤ綅緗潵
鍛藉悕Logger瀹炰緥錛岃繖鏄洰鍓嶆潵璁叉瘮杈冩湁鏁堢殑Logger鍛藉悕鏂瑰紡銆傝繖鏍峰彲浠ヤ嬌寰楁瘡涓被寤虹珛鑷繁鐨勬棩蹇椾俊鎭紝渚夸簬綆$悊銆?br />姣斿錛?br />銆銆
銆銆 static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());
銆銆
銆2銆丄ppenders
銆銆紱佺敤涓庝嬌鐢ㄦ棩蹇楄姹傚彧鏄疞og4j鍏朵腑鐨勪竴涓皬灝忕殑鍦版柟錛孡og4j鏃ュ織緋葷粺鍏佽鎶婃棩蹇楄緭鍑哄埌涓嶅悓鐨勫湴鏂癸紝
濡傛帶鍒跺彴錛圕onsole錛夈佹枃浠訛紙Files錛夈佹牴鎹ぉ鏁版垨鑰呮枃浠跺ぇ灝忎駭鐢熸柊鐨勬枃浠躲佷互嫻佺殑褰㈠紡鍙戦佸埌鍏跺畠鍦版柟絳夌瓑銆?br />銆銆
銆銆 鍏惰娉曡〃紺轟負錛?br />銆銆
銆銆 org.apache.log4j.ConsoleAppender錛堟帶鍒跺彴錛?br />銆銆 org.apache.log4j.FileAppender錛堟枃浠訛級
銆銆 org.apache.log4j.DailyRollingFileAppender錛堟瘡澶╀駭鐢熶竴涓棩蹇楁枃浠訛級
聽聽聽 聽聽聽org.apache.log4j.RollingFileAppender錛堟枃浠跺ぇ灝忓埌杈炬寚瀹氬昂瀵哥殑鏃跺欎駭鐢熶竴涓柊鐨勬枃浠訛級
銆銆 org.apache.log4j.WriterAppender錛堝皢鏃ュ織淇℃伅浠ユ祦鏍煎紡鍙戦佸埌浠繪剰鎸囧畾鐨勫湴鏂癸級
銆銆
銆銆 閰嶇疆鏃朵嬌鐢ㄦ柟寮忎負錛?br />銆銆 log4j.appender.appenderName = fully.qualified.name.of.appender.class
銆銆 log4j.appender.appenderName.option1 = value1
銆銆 鈥?br />聽聽聽聽聽聽 log4j.appender.appenderName.option = valueN
銆銆 榪欐牱灝變負鏃ュ織鐨勮緭鍑烘彁渚涗簡鐩稿綋澶х殑渚垮埄銆?br />銆銆
銆銆3銆丩ayouts
銆 銆鏈夋椂鐢ㄦ埛甯屾湜鏍規嵁鑷繁鐨勫枩濂芥牸寮忓寲鑷繁鐨勬棩蹇楄緭鍑恒侺og4j鍙互鍦ˋppenders鐨勫悗闈㈤檮鍔燣ayouts鏉ュ畬鎴?br />聽聽聽聽聽聽榪欎釜鍔熻兘銆侺ayouts鎻愪緵浜?鍥涚鏃ュ織杈撳嚭鏍峰紡錛屽鏍規嵁HTML鏍峰紡銆佽嚜鐢辨寚瀹氭牱寮忋佸寘鍚棩蹇楃駭鍒笌淇℃伅鐨勬牱寮?br />聽聽聽聽聽聽鍜屽寘鍚棩蹇楁椂闂淬佺嚎紼嬨佺被鍒瓑淇℃伅鐨勬牱寮忕瓑絳夈?br />銆銆
銆銆 鍏惰娉曡〃紺轟負錛?br />銆銆
銆銆 org.apache.log4j.HTMLLayout錛堜互HTML琛ㄦ牸褰㈠紡甯冨眬錛夛紝
銆銆 org.apache.log4j.PatternLayout錛堝彲浠ョ伒媧誨湴鎸囧畾甯冨眬妯″紡錛夛紝
銆銆 org.apache.log4j.SimpleLayout錛堝寘鍚棩蹇椾俊鎭殑綰у埆鍜屼俊鎭瓧絎︿覆錛夛紝
銆銆 org.apache.log4j.TTCCLayout錛堝寘鍚棩蹇椾駭鐢熺殑鏃墮棿銆佺嚎紼嬨佺被鍒瓑絳変俊鎭級
銆銆
銆銆 閰嶇疆鏃朵嬌鐢ㄦ柟寮忎負錛?br />銆銆
銆銆 log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class
銆銆 log4j.appender.appenderName.layout.option1 = value1
銆銆 鈥?br />銆銆 log4j.appender.appenderName.layout.option = valueN

log4j鍩烘湰緙栫▼鏂規硶
銆銆
銆銆 浠ヤ笂鏄粠鍘熺悊鏂歸潰璇存槑Log4j鐨勪嬌鐢ㄦ柟娉曪紝鍦ㄥ叿浣揓ava緙栫▼浣跨敤Log4j鍙互鍙傜収浠ヤ笅紺轟緥錛?br />銆銆
銆銆 1銆?寤虹珛Logger瀹炰緥錛?br />銆銆 璇硶琛ㄧず錛歱ublic static Logger getLogger( String name)
銆銆 瀹為檯浣跨敤錛歴tatic Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;
銆銆
銆銆 2銆?璇誨彇閰嶇疆鏂囦歡錛?br />銆銆 鑾峰緱浜哃ogger鐨勫疄渚嬩箣鍚庯紝鎺ヤ笅鏉ュ皢閰嶇疆Log4j浣跨敤鐜錛?br />銆銆 璇硶琛ㄧず錛?br />銆銆 BasicConfigurator.configure()錛氳嚜鍔ㄥ揩閫熷湴浣跨敤緙虹渷Log4j鐜銆?br />銆銆 PropertyConfigurator.configure(String configFilename)錛氳鍙栦嬌鐢↗ava鐨勭壒鎬ф枃浠剁紪鍐欑殑閰嶇疆鏂囦歡銆?br />銆銆 DOMConfigurator.configure(String filename)錛氳鍙朮ML褰㈠紡鐨勯厤緗枃浠躲?br />銆銆 瀹為檯浣跨敤錛?br />聽聽聽 PropertyConfigurator.configure("ServerWithLog4j.properties");
銆銆
銆銆 3銆?鎻掑叆鏃ュ織淇℃伅
銆銆 瀹屾垚浜嗕互涓婅繛涓楠や互鍚庯紝涓嬮潰灝卞彲浠ユ寜鏃ュ織鐨勪笉鍚岀駭鍒彃鍏ュ埌浣犺璁板綍鏃ュ織鐨勪換浣曞湴鏂逛簡銆?br />銆銆 璇硶琛ㄧず錛?br />銆銆 Logger.debug(Object message);//璋冭瘯淇℃伅
銆銆 Logger.info(Object message);//涓鑸俊鎭?br />銆銆 Logger.warn(Object message);//璀﹀憡淇℃伅
銆銆 Logger.error(Object message);//閿欒淇℃伅
銆銆 Logger.fatal(Object message);//鑷村懡閿欒淇℃伅

銆銆瀹為檯浣跨敤錛歭ogger.info("ServerSocket before accept: " + server);
銆銆
log4j閰嶇疆鏂囦歡

銆鍦ㄥ疄闄呯紪紼嬫椂錛岃浣縇og4j鐪熸鍦ㄧ郴緇熶腑榪愯浜嬪厛榪樿瀵歸厤緗枃浠惰繘琛屽畾涔夈傚畾涔夋楠ゅ氨鏄Logger銆?br />Appender鍙奓ayout鐨勫垎鍒嬌鐢ㄣ?br />聽聽聽 Log4j鏀寔涓ょ閰嶇疆鏂囦歡鏍煎紡錛屼竴縐嶆槸XML鏍煎紡鐨勬枃浠訛紝涓縐嶆槸java properties錛坘ey=value錛?br />銆怞ava鐗規ф枃浠訛紙閿?鍊鹼級銆戙備笅闈㈡垜浠粙緇嶄嬌鐢↗ava鐗規ф枃浠跺仛涓洪厤緗枃浠剁殑鏂規硶
聽聽 鍏蜂綋濡備笅錛?br />銆銆
銆銆 1銆侀厤緗牴Logger錛?/strong>鍏惰娉曚負錛?br />銆銆 log4j.rootLogger = [ level ] , appenderName1, appenderName2, 鈥?br />聽聽聽聽聽聽聽聽 level : 鏄棩蹇楄褰曠殑浼樺厛綰э紝鍒嗕負OFF銆丗ATAL銆丒RROR銆乄ARN銆両NFO銆丏EBUG銆丄LL鎴栬呮偍瀹氫箟鐨勭駭鍒?br />Log4j寤鴻鍙嬌鐢ㄥ洓涓駭鍒紝浼樺厛綰т粠楂樺埌浣庡垎鍒槸ERROR銆乄ARN銆両NFO銆丏EBUG銆傞氳繃鍦ㄨ繖閲屽畾涔夌殑綰у埆錛?br />鎮ㄥ彲浠ユ帶鍒跺埌搴旂敤紼嬪簭涓浉搴旂駭鍒殑鏃ュ織淇℃伅鐨勫紑鍏熾傛瘮濡傚湪榪欓噷瀹?涔変簡INFO綰у埆錛屽垯搴旂敤紼嬪簭涓墍鏈塂EBUG綰?br />鍒殑鏃ュ織淇℃伅灝嗕笉琚墦鍗板嚭鏉ャ?br />銆銆 聽聽聽聽 appenderName:灝辨槸鎸囧畾鏃ュ織淇℃伅杈撳嚭鍒板摢涓湴鏂廣傛偍鍙互鍚屾椂鎸囧畾澶氫釜杈撳嚭鐩殑鍦般?br />聽聽 渚嬪錛歭og4j.rootLogger錛漣nfo,A1,B2,C3
銆銆
銆銆 2銆侀厤緗棩蹇椾俊鎭緭鍑虹洰鐨勫湴錛屽叾璇硶涓猴細
銆銆 log4j.appender.appenderName = fully.qualified.name.of.appender.class聽 //
銆銆 聽 "fully.qualified.name.of.appender.class" 鍙互鎸囧畾涓嬮潰浜斾釜鐩殑鍦頒腑鐨勪竴涓細
聽聽聽聽聽聽聽聽聽聽1.org.apache.log4j.ConsoleAppender錛堟帶鍒跺彴錛?br />聽聽聽聽聽聽聽聽聽聽2.org.apache.log4j.FileAppender錛堟枃浠訛級
聽聽聽聽聽聽聽聽聽 3.org.apache.log4j.DailyRollingFileAppender錛堟瘡澶╀駭鐢熶竴涓棩蹇楁枃浠訛級
聽聽聽聽聽聽聽聽聽 4.org.apache.log4j.RollingFileAppender錛堟枃浠跺ぇ灝忓埌杈炬寚瀹氬昂瀵哥殑鏃跺欎駭鐢熶竴涓柊鐨勬枃浠訛級
聽聽聽聽聽聽聽聽聽 5.org.apache.log4j.WriterAppender錛堝皢鏃ュ織淇℃伅浠ユ祦鏍煎紡鍙戦佸埌浠繪剰鎸囧畾鐨勫湴鏂癸級
聽聽聽聽聽聽聽聽聽聽聽聽 1.ConsoleAppender閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Threshold=WARN:鎸囧畾鏃ュ織娑堟伅鐨勮緭鍑烘渶浣庡眰嬈°?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ImmediateFlush=true:榛樿鍊兼槸true,鎰忚皳鐫鎵鏈夌殑娑堟伅閮戒細琚珛鍗寵緭鍑恒?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Target=System.err錛氶粯璁ゆ儏鍐典笅鏄細System.out,鎸囧畾杈撳嚭鎺у埗鍙?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽2.FileAppender 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Threshold=WARN:鎸囧畾鏃ュ織娑堟伅鐨勮緭鍑烘渶浣庡眰嬈°?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ImmediateFlush=true:榛樿鍊兼槸true,鎰忚皳鐫鎵鏈夌殑娑堟伅閮戒細琚珛鍗寵緭鍑恒?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 File=mylog.txt:鎸囧畾娑堟伅杈撳嚭鍒癿ylog.txt鏂囦歡銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Append=false:榛樿鍊兼槸true,鍗沖皢娑堟伅澧炲姞鍒版寚瀹氭枃浠朵腑錛宖alse鎸囧皢娑堟伅瑕嗙洊鎸囧畾鐨勬枃浠跺唴瀹廣?br />聽聽聽聽聽聽聽聽聽聽聽 3.DailyRollingFileAppender 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Threshold=WARN:鎸囧畾鏃ュ織娑堟伅鐨勮緭鍑烘渶浣庡眰嬈°?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ImmediateFlush=true:榛樿鍊兼槸true,鎰忚皳鐫鎵鏈夌殑娑堟伅閮戒細琚珛鍗寵緭鍑恒?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽File=mylog.txt:鎸囧畾娑堟伅杈撳嚭鍒癿ylog.txt鏂囦歡銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Append=false:榛樿鍊兼槸true,鍗沖皢娑堟伅澧炲姞鍒版寚瀹氭枃浠朵腑錛宖alse鎸囧皢娑堟伅瑕嗙洊鎸囧畾鐨勬枃浠跺唴瀹廣?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 DatePattern='.'yyyy-ww:姣忓懆婊氬姩涓嬈℃枃浠訛紝鍗蟲瘡鍛ㄤ駭鐢熶竴涓柊鐨勬枃浠躲傚綋鐒朵篃鍙互鎸囧畾鎸夋湀銆佸懆銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽澶┿佹椂鍜屽垎銆傚嵆瀵瑰簲鐨勬牸寮忓涓嬶細
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 1)'.'yyyy-MM: 姣忔湀
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 2)'.'yyyy-ww: 姣忓懆聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 3)'.'yyyy-MM-dd: 姣忓ぉ
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 4)'.'yyyy-MM-dd-a: 姣忓ぉ涓ゆ
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 5)'.'yyyy-MM-dd-HH: 姣忓皬鏃?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 6)'.'yyyy-MM-dd-HH-mm: 姣忓垎閽?br />聽聽聽聽聽聽聽聽聽聽聽 4.RollingFileAppender 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Threshold=WARN:鎸囧畾鏃ュ織娑堟伅鐨勮緭鍑烘渶浣庡眰嬈°?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ImmediateFlush=true:榛樿鍊兼槸true,鎰忚皳鐫鎵鏈夌殑娑堟伅閮戒細琚珛鍗寵緭鍑恒?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 File=mylog.txt:鎸囧畾娑堟伅杈撳嚭鍒癿ylog.txt鏂囦歡銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Append=false:榛樿鍊兼槸true,鍗沖皢娑堟伅澧炲姞鍒版寚瀹氭枃浠朵腑錛宖alse鎸囧皢娑堟伅瑕嗙洊鎸囧畾鐨勬枃浠跺唴瀹廣?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 MaxFileSize=100KB: 鍚庣紑鍙互鏄疜B, MB 鎴栬呮槸 GB. 鍦ㄦ棩蹇楁枃浠跺埌杈捐澶у皬鏃訛紝灝嗕細鑷姩婊氬姩錛屽嵆灝嗗師鏉?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽鐨勫唴瀹圭Щ鍒癿ylog.log.1鏂囦歡銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 MaxBackupIndex=2:鎸囧畾鍙互浜х敓鐨勬粴鍔ㄦ枃浠剁殑鏈澶ф暟銆?/span>

瀹為檯搴旂敤錛?br />銆銆 log4j.appender.A1=org.apache.log4j.ConsoleAppender //榪欓噷鎸囧畾浜嗘棩蹇楄緭鍑虹殑絎竴涓綅緗瓵1鏄帶鍒跺彴ConsoleAppender

鈺?========================================鈺?br />聽聽聽 闈掑北涓嶆敼 緇挎按闀挎祦http://blog.csdn.net/wangyihust
聽聽聽聽聽 嬈㈣繋鍚勪綅杞創錛屼絾闇澹版槑鐗堟潈錛屽皧閲嶆妧鏈師鍒涙?:)
聽聽聽聽聽聽 E-mail:wangyihust@163.com聽聽聽 OICQ:76406573聽聽聽
鈺?========================================鈺?br />銆銆
銆銆 3銆侀厤緗棩蹇椾俊鎭殑鏍煎紡錛屽叾璇硶涓猴細
銆銆 1).log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
聽聽聽聽聽聽聽聽聽聽聽聽 聽"fully.qualified.name.of.layout.class" 鍙互鎸囧畾涓嬮潰4涓牸寮忎腑鐨勪竴涓細
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 1.org.apache.log4j.HTMLLayout錛堜互HTML琛ㄦ牸褰㈠紡甯冨眬錛夛紝
銆銆 聽聽聽聽聽聽 2.org.apache.log4j.PatternLayout錛堝彲浠ョ伒媧誨湴鎸囧畾甯冨眬妯″紡錛夛紝
銆銆 聽聽聽聽聽聽 3.org.apache.log4j.SimpleLayout錛堝寘鍚棩蹇椾俊鎭殑綰у埆鍜屼俊鎭瓧絎︿覆錛夛紝
銆銆 聽聽聽聽聽聽 4.org.apache.log4j.TTCCLayout錛堝寘鍚棩蹇椾駭鐢熺殑鏃墮棿銆佺嚎紼嬨佺被鍒瓑絳変俊鎭級
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 1.HTMLLayout 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LocationInfo=true:榛樿鍊兼槸false,杈撳嚭java鏂囦歡鍚嶇О鍜岃鍙?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Title=my app file: 榛樿鍊兼槸 Log4J Log Messages.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽2.PatternLayout 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ConversionPattern=%m%n :鎸囧畾鎬庢牱鏍煎紡鍖栨寚瀹氱殑娑堟伅銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 3.XMLLayout聽 閫夐」
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LocationInfo=true:榛樿鍊兼槸false,杈撳嚭java鏂囦歡鍜岃鍙?br />聽聽 瀹為檯搴旂敤錛?br />聽聽 銆銆log4j.appender.A1.layout=org.apache.log4j.PatternLayout

聽聽聽聽聽聽 2). log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
聽聽聽聽聽聽聽聽聽聽 榪欓噷闇瑕佽鏄庣殑灝辨槸鏃ュ織淇℃伅鏍煎紡涓嚑涓鍙鋒墍浠h〃鐨勫惈涔夛細
銆銆 聽聽聽聽聽聽聽聽 錛峏鍙? X淇℃伅杈撳嚭鏃跺乏瀵歸綈錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %p: 杈撳嚭鏃ュ織淇℃伅浼樺厛綰э紝鍗矰EBUG錛孖NFO錛學ARN錛孍RROR錛孎ATAL,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %d: 杈撳嚭鏃ュ織鏃墮棿鐐圭殑鏃ユ湡鎴栨椂闂達紝榛樿鏍煎紡涓篒SO8601錛屼篃鍙互鍦ㄥ叾鍚庢寚瀹氭牸寮忥紝
姣斿錛?d{yyy MMM dd HH:mm:ss,SSS}錛岃緭鍑虹被浼鹼細2002騫?0鏈?8鏃?22錛?0錛?8錛?21
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %r: 杈撳嚭鑷簲鐢ㄥ惎鍔ㄥ埌杈撳嚭璇og淇℃伅鑰楄垂鐨勬縐掓暟
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %c: 杈撳嚭鏃ュ織淇℃伅鎵灞炵殑綾葷洰錛岄氬父灝辨槸鎵鍦ㄧ被鐨勫叏鍚?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %t: 杈撳嚭浜х敓璇ユ棩蹇椾簨浠剁殑綰跨▼鍚?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %l: 杈撳嚭鏃ュ織浜嬩歡鐨勫彂鐢熶綅緗紝鐩稿綋浜?C.%M(%F:%L)鐨勭粍鍚?鍖呮嫭綾葷洰鍚嶃佸彂鐢熺殑綰跨▼錛屼互鍙婂湪浠g爜
涓殑琛屾暟銆備婦渚嬶細Testlog4.main(TestLog4.java:10)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %x: 杈撳嚭鍜屽綋鍓嶇嚎紼嬬浉鍏寵仈鐨凬DC(宓屽璇婃柇鐜),灝ゅ叾鐢ㄥ埌鍍廽ava servlets榪欐牱鐨勫瀹㈡埛澶氱嚎紼嬬殑搴旂敤涓?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %%: 杈撳嚭涓涓?%"瀛楃
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %F: 杈撳嚭鏃ュ織娑堟伅浜х敓鏃舵墍鍦ㄧ殑鏂囦歡鍚嶇О
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽%L: 杈撳嚭浠g爜涓殑琛屽彿
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %m: 杈撳嚭浠g爜涓寚瀹氱殑娑堟伅,浜х敓鐨勬棩蹇楀叿浣撲俊鎭?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 %n: 杈撳嚭涓涓洖杞︽崲琛岀錛學indows騫沖彴涓?\r\n"錛孶nix騫沖彴涓?\n"杈撳嚭鏃ュ織淇℃伅鎹㈣
聽聽聽聽聽聽聽聽聽聽聽 鍙互鍦?涓庢ā寮忓瓧絎︿箣闂村姞涓婁慨楗扮鏉ユ帶鍒跺叾鏈灝忓搴︺佹渶澶у搴︺佸拰鏂囨湰鐨勫榻愭柟寮忋傚錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 1)%20c錛氭寚瀹氳緭鍑篶ategory鐨勫悕縐幫紝鏈灝忕殑瀹藉害鏄?0錛屽鏋渃ategory鐨勫悕縐板皬浜?0鐨勮瘽錛岄粯璁ょ殑鎯呭喌涓嬪彸瀵歸綈銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 2)%-20c:鎸囧畾杈撳嚭category鐨勫悕縐幫紝鏈灝忕殑瀹藉害鏄?0錛屽鏋渃ategory鐨勫悕縐板皬浜?0鐨勮瘽錛?-"鍙鋒寚瀹氬乏瀵歸綈銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 3)%.30c:鎸囧畾杈撳嚭category鐨勫悕縐幫紝鏈澶х殑瀹藉害鏄?0錛屽鏋渃ategory鐨勫悕縐板ぇ浜?0鐨勮瘽錛屽氨浼氬皢宸﹁竟
澶氬嚭鐨勫瓧絎︽埅鎺夛紝浣嗗皬浜?0鐨勮瘽涔熶笉浼氭湁絀烘牸銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 4)%20.30c:濡傛灉category鐨勫悕縐板皬浜?0灝辮ˉ絀烘牸錛屽茍涓斿彸瀵歸綈錛屽鏋滃叾鍚嶇О闀夸簬30瀛楃錛?br />灝變粠宸﹁竟浜よ繙閿鍑虹殑瀛楃鎴帀銆?/span>

銆銆榪欓噷涓婇潰涓変釜姝ラ鏄鍓嶉潰Log4j緇勪歡璇存槑鐨勪竴涓畝鍖栵紱涓嬮潰緇欏嚭涓涓叿浣撻厤緗緥瀛愶紝鍦ㄧ▼搴忎腑鍙互鍙傜収鎵ц錛?br />銆銆 log4j.rootLogger=INFO,A1錛孊2
銆銆 log4j.appender.A1=org.apache.log4j.ConsoleAppender
銆銆 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
銆銆 log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
聽銆銆鏍規嵁涓婇潰鐨勬棩蹇楁牸寮忥紝鏌愪竴涓▼搴忕殑杈撳嚭緇撴灉濡備笅錛?br />銆銆 0銆銆INFO銆2003-06-13 13:23:46968 ClientWithLog4j Client socket:
Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
聽聽聽聽聽聽聽聽 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says:
'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
銆銆 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
銆銆 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
銆銆 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
銆銆 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
銆銆 16銆 DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT

聽聽聽聽聽 4. 褰撹緭鍑轟俊鎭簬鍥炴粴鏂囦歡鏃?/strong>

聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender聽聽 //鎸囧畾浠ユ枃浠剁殑鏂瑰紡杈撳嚭鏃ュ織
聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.Threshold=ERROR聽
聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.File=rolling.log聽 //鏂囦歡浣嶇疆,涔熷彲浠ョ敤鍙橀噺銆乺olling.log
聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.Append=true聽
聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.MaxFileSize=10KB聽 //鏂囦歡鏈澶у昂瀵?br />聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.MaxBackupIndex=1聽 //澶囦喚鏁?br />聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout聽
聽聽聽聽聽聽聽聽聽聽聽log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n聽 銆銆

聽聽聽聽聽聽聽聽 5.Log4J瀵瑰簲鐢ㄦц兘鐨勫獎鍝?/font>

聽聽聽聽聽聽聽聽 濡傛灉鍦ㄧ▼搴忚繍琛屼腑杈撳嚭澶ч噺鏃ュ織錛屾樉鐒朵細瀵瑰簲鐢ㄧ殑鎬ц兘閫犳垚涓瀹氱殑褰卞搷銆侺og4J瀵規ц兘鐨勫獎鍝嶅彇鍐充簬浠ヤ笅鍥犵礌錛?/font>

  • 鏃ュ織杈撳嚭鐩殑鍦幫細杈撳嚭鍒版帶鍒跺彴鐨勯熷害鍜岃緭鍑哄埌鏂囦歡緋葷粺鐨勯熷害鏄笉涓鏍風殑銆?/font>
  • 鏃ュ織杈撳嚭鏍煎紡錛氭牸寮忕畝鍗曪紝閫熷害涔熸洿蹇?/font>
  • 鏃ュ織綰у埆錛氭棩蹇楃駭鍒緗殑瓚婁綆錛岃緭鍑虹殑鏃ュ織鍐呭瓚婂錛屽鎬ц兘鐨勫獎鍝嶄篃瓚婂ぇ銆?/font>

log4j鍏ㄨ兘閰嶇疆鏂囦歡(杞嚜gmmgood)

聽聽聽聽聽聽 涓嬮潰緇欏嚭寰桳og4J閰嶇疆鏂囦歡瀹炵幇浜嗚緭鍑哄埌鎺у埗鍙幫紝鏂囦歡錛屽洖婊氭枃浠訛紝鍙戦佹棩蹇楅偖浠訛紝
杈撳嚭鍒版暟鎹簱鏃ュ織琛紝鑷畾涔夋爣絳劇瓑鍏ㄥ鍔熻兘銆?br />
log4j.rootLogger=DEBUG,CONSOLE,A1,im
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

log4j.addivity.org.apache=true


###################
# Console Appender
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


#####################
# File Appender
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis



########################
# Rolling File
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


####################
# Socket Appender
####################
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%
t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n


########################
# Log Factor 5 Appender
########################
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000


########################
# SMTP Appender
#######################
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=chenyl@hollycrm.com
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=chenyl@hollycrm.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


########################
# JDBC Appender
#######################
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r
[%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout

###################
#鑷畾涔堿ppender
###################
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net

log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


浣跨敤XML閰嶇疆鏂囦歡

棣栧厛錛岀湅鐪嬩笅闈㈢殑XML閰嶇疆鏂囦歡紺轟緥錛?/span>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽聽聽聽聽聽聽
聽 <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
聽聽聽 <layout class="org.apache.log4j.SimpleLayout"/>
聽 </appender>
聽 <root>
聽聽聽 <priority value ="debug" />
聽聽聽 <appender-ref ref="ConsoleAppender"/>
聽 </root>
</log4j:configuration>
聽聽聽

鏂囦歡浠ユ爣鍑嗙殑XML澹版槑浣滀負寮濮嬶紝鍚庨潰璺熺潃鎸囧嚭DTD錛堟枃妗g被鍨嬪畾涔夛級鐨凞OCTYPE澹版槑錛屽畠瀹氫箟浜哫ML鏂囦歡鐨勭粨鏋勶紝
渚嬪錛屼粈涔堝厓绱犲彲浠ュ祵鍏ュ湪鍏朵粬鍏冪礌涓瓑絳夈備笂闈㈡枃浠跺湪log4j鍙戣鐗堢殑src/java/org/apache/log4j/xml鐩綍涓?
鎺ョ潃鐪嬬湅灝佽鎵鏈夊厓绱犵殑 log4j:configuration 鍏冪礌錛屽畠鍦―OCTYPE澹版槑涓鎸囧畾涓烘牴鍏冪礌銆傚祵鍏ュ湪鏍瑰厓绱犱腑鏈変袱涓粨鏋勶細

聽 <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
聽聽聽 <layout class="org.apache.log4j.SimpleLayout"/>
聽 </appender>聽聽聽聽聽
聽聽聽

榪欓噷鍒涘緩涓涓悕鍙?ConsoleAppender"鐨?Appender錛屾敞鎰忥紝浣犲彲浠ラ夋嫨浠諱綍鍚嶅瓧錛岃紺轟緥涔嬫墍浠ラ夋嫨"ConsoleAppender"錛?br />瀹屽叏鏄負浜嗙ず渚嬬殑璁捐銆傛帴鐫榪欎釜appender綾諱互鍏ㄥ悕褰㈠紡緇欏嚭錛岀粡甯哥敤瑙勮寖錛坒ully qualified錛夌被鍚嶃?Appender蹇呴』鍏鋒湁
涓涓寚瀹氱殑 name鍜宑lass銆傚祵鍏ュ湪 Appender涔嬪唴鐨勬槸 layout鍏冪礌錛岃繖閲屽畠琚寚瀹氫負SimpleLayout銆?Layout 蹇呴』鍏?br />鏈変竴涓?class灞炴с?

聽 <root>
聽聽聽 <priority value ="debug" />
聽聽聽 <appender-ref ref="ConsoleAppender"/>
聽 </root>聽聽聽聽聽聽
聽聽聽

root鍏冪礌蹇呴』瀛樺湪涓斾笉鑳借瀛愮被鍖栥傜ず渚嬩腑鐨勪紭鍏堢駭琚緗負"debug"錛岃緗產ppender楗卞惈涓涓猘ppender-ref鍏冪礌銆?br />榪樻湁鏇村鐨勫睘鎬ф垨鍏冪礌鍙互鎸囧畾銆傛煡鐪媗og4j鍙戣鐗堜腑鐨剆rc/java/org/apache/log4j/xml/log4j.dtd浠ヤ簡瑙e叧浜嶺ML閰嶇疆
鏂囦歡緇撴瀯鐨勬洿澶氫俊鎭傚彲浠ョ敤涓嬮潰榪欑鏂規硶鎶婇厤緗俊鎭枃浠惰鍏ュ埌Java紼嬪簭涓?

DOMConfigurator.configure("configurationfile.xml");聽聽聽

DOMConfigurator 鐢ㄤ竴媯礑OM鏍戞潵鍒濆鍖杔og4j鐜銆傝繖閲屾槸紺轟緥涓殑XML閰嶇疆鏂囦歡錛歝onfigurationfile.xml銆傝繖閲屾槸
鎵ц璇ラ厤緗枃浠剁殑java紼嬪簭:

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class externalxmltest {
聽聽 static Logger logger = Logger.getLogger(filetest.class);
聽聽 public static void main(String args[]) {
聽聽聽聽聽 DOMConfigurator.configure("xmllog4jconfig.xml");
聽聽聽聽聽 logger.debug("Here is some DEBUG");
聽聽聽聽聽 logger.info("Here is some INFO");
聽聽聽聽聽 logger.warn("Here is some WARN");
聽聽聽聽聽 logger.error("Here is some ERROR");
聽聽聽聽聽 logger.fatal("Here is some FATAL");
聽聽 }
}
聽聽聽

瀵逛簬甯︽湁PatternLayout鐨凢ileAppender鐨勬棩蹇楄褰曞櫒Logger鐨刋ML閰嶇疆鏂囦歡:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
聽聽聽聽聽聽聽
聽 <appender name="appender" class="org.apache.log4j.FileAppender">
聽聽聽 <param name="File" value="Indentify-Log.txt"/>
聽聽聽 <param name="Append" value="true"/>
聽聽聽 <layout class="org.apache.log4j.PatternLayout">
聽聽聽聽聽 <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
聽聽聽 </layout>
聽 </appender>
聽 <root>
聽聽聽 <priority value ="info"/>
聽聽聽 <appender-ref ref="appender"/>
聽 </root>
</log4j:configuration>
聽聽聽


log4j鏃ュ織鍐欏叆鏁版嵁搴?/strong>

棣栧厛鍒涘緩涓鏁版嵁搴撹〃:

瀛楁 鎻忚堪
GUID 嫻佹按鍙?IDENTITY (1, 1)
DATE 鏃墮棿
THREAD 褰撳墠綰跨▼
LEVEL 褰撳墠綰у埆
CLASS 褰撳墠綾葷殑java紼嬪簭/鏂規硶
MESSAGES 褰撳墠杈撳嚭淇℃伅
EXCEPTION 寮傚父淇℃伅

log4j.properties濡備笅閰嶇疆:

log4j.rootLogger=DEBUG,CONSOLE,DATABASE

log4j.addivity.org.apache=true
########################
# JDBC Appender
#######################
log4j.appender.DATABASE.Threshold=INFO
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.BufferSize=10
log4j.appender.DATABASE.URL=you jdbcurl
log4j.appender.DATABASE.driver=you jdbc driver
log4j.appender.DATABASE.user=
log4j.appender.DATABASE.password=
log4j.appender.DATABASE.sql=INSERT INTO聽YOU_LOG_TABLE聽VALUES ('%d{yyyy-MM-dd HH:mm:ss}',
'%t', '%p', '%l', '%m', '')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
涓嬮潰鎴戜滑瀵光?d %t %p %l %m %n鈥濅竴涓璁茶В錛?/font>
l聽聽聽聽聽聽聽聽 %d杈撳嚭鏃ュ織鏃墮棿鐐圭殑鏃ユ湡鎴栨椂闂達紝榛樿鏍煎紡涓篒SO8601錛屼篃鍙互鍦ㄥ叾鍚庢寚瀹氭牸寮忥紝
姣斿錛?d{yyyy-MM-dd HH:mm:ss}錛岃緭鍑虹被浼鹼細2006-01-18 17:50:22'錛屽垰濂介傚悎鎻掑叆SQLServer錛?/font>
l聽聽聽聽聽聽聽聽 %t聽浜х敓璇ユ棩蹇椾簨浠剁殑綰跨▼鍚嶏紱
l聽聽聽聽聽聽聽聽 %p 鏃ュ織鐨刲og_level錛屽DEBUG銆乄ARN鎴栬匢NFO錛?/font>
l聽聽聽聽聽聽聽聽 %c聽杈撳嚭鎵灞炵殑綾葷洰錛岄氬父灝辨槸鎵鍦ㄧ被鐨勫叏鍚嶏紝濡傗渃om.eking.TestLog鈥濓紱
l聽聽聽聽聽聽聽聽 %m 鏃ュ織鐨勫唴瀹癸紱
l聽聽聽聽聽聽聽聽 %l 聽杈撳嚭鏃ュ織浜嬩歡鐨勫彂鐢熶綅緗紝鍖呮嫭綾葷洰鍚嶃佸彂鐢熺殑綰跨▼錛屼互鍙婂湪浠g爜涓殑琛屾暟銆?br />濡俉ite2Database.main(Wite2Database.java:18)錛?/font>
l聽聽聽聽聽聽聽聽 %n 聽杈撳嚭涓涓洖杞︽崲琛岀錛學indows騫沖彴涓衡?鈥濓紝Unix騫沖彴涓衡?鈥?/font>
紼嬪簭浠g爜:

import sun.jdbc.odbc.*;
import java.sql.*;

import org.apache.log4j.Category;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.jdbc.*;

public class Write2Database{
聽 public static void main(String[] args){
聽聽聽 static Logger logger = Logger.getLogger
聽聽聽聽聽聽聽聽聽聽聽 ( write2database.class.getName () ) ;

聽聽聽 PropertyConfigurator.configure ( "log4j2database.properties" ) ;

聽聽聽 logger.info ( "test" ) ;
聽 }
}

榪愯璧鋒潵錛屼綘灝變細鐪嬪埌鏈夎繖鏍風殑sql璇彞琚墽琛屼簡錛?
聽聽聽聽聽聽 INSERT INTO jws_log聽 VALUES ('2006-01-18 17:50:22', 'main', 'INFO',
'Wite2Database.main(Write2Database.java:18)', 'test', '')

娉ㄦ剰 錛?u>鍦ㄨ禌榪鍧涗笂鏈変竴涓瑪鑰呮寜鐓т笂榪扮被浼肩殑鏂規硶娌℃湁榪愯鎴愬姛錛岀幇灝嗕粬鎵鍑虹幇鐨勯棶棰樺拰瑙e喅鏂規硶杞澆銆?/u>

涓婅堪鏂規硶鏄埄鐢ㄤ紶緇熺殑鏁版嵁搴撹繛鎺ユ柟娉曪紝瀵逛簬鏁版嵁搴撶殑綆$悊鍜屾晥鐜囦弗閲嶄笉瓚籌紝鍦ㄧ幇鍦ㄨ繖涓繛鎺ユ睜妯鐨勬椂浠?
涓轟粈涔堟垜浠笉鑳界粰緇橪og4j閰嶄笂榪炴帴姹狅紝璁㎜og4j鍒╃敤鏁版嵁榪炴帴姹犵殑榪炴帴鍜屾暟鎹簱榪涜閫氳
銆?br />鐜版煡鐪婰og4j鐨凙pi,鍙戠幇JDBCAppender榪欎釜綾繪湁浠ヤ笅鍑犳璇濓細WARNING: This version of JDBCAppender is very
likely to be completely replaced in the future. Moreoever, it does not log exceptions
. The JDBCAppender
provides for sending log events to a database.

For use as a base class:

  • Override getConnection() to pass any connection you want. Typically this is used to enable
    application wide connection pooling.
  • Override closeConnection(Connection con) -- if you override getConnection make sure to
    implement closeConnection to handle the connection you generated. Typically this would
    return the connection to the pool it came from.
  • Override getLogStatement(LoggingEvent event) to produce specialized or dynamic statements.
    The default uses the sql option value.

鍘熸潵log4j寤鴻鎴戜滑鎶婂叾鎻愪緵鐨凧DBCAppender浣滀負鍩虹被鏉ヤ嬌鐢紝鐒跺悗Override涓変釜鐖剁被鐨勬柟娉曪細getConnection(),
closeConnection(Connection con)鍜実etLogStatement(LoggingEvent event)銆?/font>

鍘熸潵濡傛錛岄偅灝卞啓涓涓瓙綾籎DBCPoolAppender鏉ユ浛浠h繖涓狫DBCAppender
銆銆
銆銆 JDBCPoolAppender浠g爜鍜屽叾鐩稿叧浠g爜濡備笅錛?br />銆銆
銆銆 JDBCPoolAppender.java:
銆銆
銆銆 package common.log;
銆銆 import java.sql.Connection;
銆銆 import org.apache.log4j.spi.LoggingEvent;
銆銆 import java.sql.SQLException;
銆銆 import java.sql.Statement;
銆銆 import java.util.Iterator;
銆銆 import org.apache.log4j.spi.ErrorCode;
銆銆 import org.apache.log4j.PatternLayout;
銆銆 import common.sql.MyDB;
銆銆 import common.sql.GeneralDb;
銆銆
銆銆 public class JDBCPoolAppender extends org.apache.log4j.jdbc.JDBCAppender {
銆銆
銆銆 private MyDB mydb = null;
銆銆 protected String sqlname=""; //澧炲姞涓涓暟鎹簱jndiName鐨勫睘鎬?br />銆銆
銆銆 protected Connection connection = null;
銆銆 protected String sqlStatement = "";
銆銆 /**
銆銆 * size of LoggingEvent buffer before writting to the database.
銆銆 * Default is 1.
銆銆 */
銆銆 protected int bufferSize = 1;
銆銆
銆銆 public JDBCPoolAppender() {
銆銆 super();
銆銆 }
銆銆
銆銆 /**
銆銆 * ArrayList holding the buffer of Logging Events.
銆銆 */
銆銆 public void append(LoggingEvent event) {
銆銆 buffer.add(event);
銆銆 if (buffer.size() >= bufferSize)
銆銆 flushBuffer();
銆銆 }
銆銆
銆銆 /**
銆銆 * By default getLogStatement sends the event to the required Layout object.
銆銆 * The layout will format the given pattern into a workable SQL string.
銆銆 *
銆銆 * Overriding this provides direct access to the LoggingEvent
銆銆 * when constructing the logging statement.
銆銆 *
銆銆 */
銆銆 protected String getLogStatement(LoggingEvent event) {
銆銆 return getLayout().format(event);
銆銆 }
銆銆
銆銆 /**
銆銆 *
銆銆 * Override this to provide an alertnate method of getting
銆銆 * connections (such as caching).銆One method to fix this is to open
銆銆 * connections at the start of flushBuffer() and close them at the
銆銆 * end.銆I use a connection pool outside of JDBCAppender which is
銆銆 * accessed in an override of this method.
銆銆 * */
銆銆 protected void execute(String sql) throws SQLException {
銆銆 Connection con = null;
銆銆 Statement stmt = null;
銆銆 try {
銆銆 con = getConnection();
銆銆 stmt = con.createStatement();
銆銆 stmt.executeUpdate(sql);
銆銆 } catch (SQLException e) {
銆銆 if (stmt != null)
銆銆 stmt.close();
銆銆 throw e;
銆銆 }
銆銆 stmt.close();
銆銆 closeConnection(con);
銆銆 //System.out.println("Execute: " + sql);
銆銆 }
銆銆
銆銆 /**
銆銆 * Override this to return the connection to a pool, or to clean up the
銆銆 * resource.
銆銆 *
銆銆 * The default behavior holds a single connection open until the appender
銆銆 * is closed (typically when garbage collected).
銆銆 */
銆銆 protected void closeConnection(Connection con) {
銆銆 mydb=null;
銆銆 try {
銆銆 if (connection != null && !connection.isClosed())
銆銆 connection.close();
銆銆 } catch (SQLException e) {
銆銆 errorHandler.error("Error closing connection", e,
銆銆 ErrorCode.GENERIC_FAILURE);
銆銆 }
銆銆
銆銆 }
銆銆
銆銆 /**
銆銆 * Override 姝ゅ嚱鏁版潵鍒╃敤榪炴帴姹犺繑鍥炰竴涓狢onnetion瀵硅薄
銆銆 *
銆銆 */
銆銆 protected Connection getConnection() throws SQLException {
銆銆 try {
銆銆 mydb = GeneralDb.getInstance(sqlname);
銆銆 connection = mydb.getConnection();
銆銆 } catch (Exception e) {
銆銆 errorHandler.error("Error opening connection", e, ErrorCode.GENERIC_FAILURE);
銆銆 }
銆銆 return connection;
銆銆 }
銆銆
銆銆 /**
銆銆 * Closes the appender, flushing the buffer first then closing the default
銆銆 * connection if it is open.
銆銆 */
銆銆 public void close() {
銆銆 flushBuffer();
銆銆
銆銆 try {
銆銆 if (connection != null && !connection.isClosed())
銆銆 connection.close();
銆銆 } catch (SQLException e) {
銆銆 errorHandler.error("Error closing connection", e,
銆銆 ErrorCode.GENERIC_FAILURE);
銆銆 }
銆銆 this.closed = true;
銆銆 }
銆銆
銆銆 /**
銆銆 * loops through the buffer of LoggingEvents, gets a
銆銆 * sql string from getLogStatement() and sends it to execute().
銆銆 * Errors are sent to the errorHandler.
銆銆 *
銆銆 * If a statement fails the LoggingEvent stays in the buffer!
銆銆 */
銆銆 public void flushBuffer() {
銆銆 //Do the actual logging
銆銆 removes.ensureCapacity(buffer.size());
銆銆 for (Iterator i = buffer.iterator(); i.hasNext(); ) {
銆銆 try {
銆銆 LoggingEvent logEvent = (LoggingEvent) i.next();
銆銆 String sql = getLogStatement(logEvent);
銆銆 execute(sql);
銆銆 removes.add(logEvent);
銆銆 } catch (SQLException e) {
銆銆 errorHandler.error("Failed to excute sql", e,
銆銆 ErrorCode.FLUSH_FAILURE);
銆銆 }
銆銆 }
銆銆
銆銆 // remove from the buffer any events that were reported
銆銆 buffer.removeAll(removes);
銆銆
銆銆 // clear the buffer of reported events
銆銆 removes.clear();
銆銆 }
銆銆
銆銆 /** closes the appender before disposal */
銆銆 public void finalize() {
銆銆 close();
銆銆 }
銆銆
銆銆 /**
銆銆 * JDBCAppender requires a layout.
銆銆 * */
銆銆 public boolean requiresLayout() {
銆銆 return true;
銆銆 }
銆銆
銆銆 /**
銆銆 *
銆銆 */
銆銆 public void setSql(String s) {
銆銆 sqlStatement = s;
銆銆 if (getLayout() == null) {
銆銆 this.setLayout(new PatternLayout(s));
銆銆 } else {
銆銆 ((PatternLayout) getLayout()).setConversionPattern(s);
銆銆 }
銆銆 }
銆銆
銆銆 /**
銆銆 * Returns pre-formated statement eg: insert into LogTable (msg) values ("%m")
銆銆 */
銆銆 public String getSql() {
銆銆 return sqlStatement;
銆銆 }
銆銆
銆銆 public void setSqlname(String sqlname){
銆銆 sqlname=sqlname;
銆銆 }
銆銆
銆銆 public String getSqlname(){
銆銆 return sqlname;
銆銆 }
銆銆
銆銆 public void setBufferSize(int newBufferSize) {
銆銆 bufferSize = newBufferSize;
銆銆 buffer.ensureCapacity(bufferSize);
銆銆 removes.ensureCapacity(bufferSize);
銆銆 }
銆銆
銆銆 public int getBufferSize() {
銆銆 return bufferSize;
銆銆 }
銆銆 }
銆銆
銆銆 MyDB.java:
銆銆 package common.sql;
銆銆 import java.sql.*;
銆銆 import com.codestudio.sql.*;銆//寮曞叆寮婧愰」鐩甈oolman鏁版嵁搴撹繛鎺ユ睜鐨勫寘
銆銆
銆銆 public class MyDB {
銆銆 public static final String module = MyDB.class.getName();
銆銆 private String dbName = "";
銆銆 private PoolMan plmn = null;
銆銆
銆銆 public MyDB(String dbName) {
銆銆 try {
銆銆 if (plmn == null) {
銆銆 plmn = (PoolMan) Class.forName("com.codestudio.sql.PoolMan").
銆銆 newInstance();
銆銆 }
銆銆 } catch (Exception ec) {
銆銆 System.out.println(ec.toString()+module);
銆銆 }
銆銆 this.dbName = dbName;
銆銆 }
銆銆
銆銆 private Connection getNewConnection() {
銆銆 Connection conn = null;
銆銆 try {
銆銆 conn = plmn.connect("jdbc:poolman://" + dbName);
銆銆 conn.setAutoCommit(true);
銆銆 } catch (Exception ec) {
銆銆 System.out.println(ec.toString()+"First:Connect sqlsever failed"+module);
銆銆 try {
銆銆 Thread.sleep(1000);
銆銆 conn = plmn.connect("jdbc:poolman://" + dbName);
銆銆 conn.setAutoCommit(true);
銆銆 } catch (Exception ecs) {
銆銆 System.out.println(ecs.toString()+"Again:Connect sqlsever faile"+module);
銆銆 }
銆銆 }
銆銆 return conn;
銆銆 }
銆銆
銆銆 public Connection getConnection() {
銆銆 return getNewConnection();
銆銆 }
銆銆 }
銆銆 GeneralDb.java:
銆銆
銆銆 package common.sql;
銆銆
銆銆 package common.sql;
銆銆 import java.util.*;
銆銆
銆銆 public class GeneralDb {
銆銆 private static Hashtable dbPool;
銆銆 public static MyDB getInstance(String dbname) {
銆銆 if (dbPool == null) {
銆銆 dbPool = new Hashtable();
銆銆 }
銆銆 MyDB db = (MyDB) dbPool.get(dbname);
銆銆 if (db == null) {
銆銆 db = new MyDB(dbname);
銆銆 dbPool.put(dbname, db);
銆銆 }
銆銆 return db;
銆銆 }
銆銆 }
銆銆
銆銆 Log4j鏁版嵁搴撹繛鎺ユ睜鐨勯厤緗涓嬶細
銆銆 log4j.appender.JDBC=common.log.JDBCPoolAppender
銆銆 log4j.appender.JDBC.sqlname=log
銆銆 log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout
銆銆 log4j.appender.JDBC.sql=INSERT INTO LOGGING (log_date, log_level,
location, message) VALUES ('%d{ISO8601}', '%-5p', '%C,%L', '%m')
銆銆
銆銆 poolman.xml閰嶇疆濡備笅錛?br />銆銆
銆銆 銆?xml version="1.0" encoding="UTF-8"?>
銆銆 銆坧oolman>
銆銆 銆坢anagement-mode>local銆?management-mode>
銆銆 銆坉atasource>
銆銆 銆坉bname>log銆?dbname>
銆銆 銆坖ndiName>log銆?jndiName>
銆銆 銆坉river>com.mysql.jdbc.Driver銆?driver>
銆銆 銆坲rl>jdbc:mysql://localhost:3306/test銆?url>
銆銆 銆坲sername>use銆?username>
銆銆 銆坧assword>password銆?password>
銆銆 銆坢inimumSize>0銆?minimumSize>
銆銆 銆坢aximumSize>10銆?maximumSize>
銆銆 銆坙ogFile>logs/mysql.log銆?logFile>
銆銆 銆?datasource>銆銆
銆銆 銆?poolman>

聽聽 榪愯鎴愬姛錛佸浜嶫DBCPoolAppender鐨勫睘鎬э紙姣斿sqlname灞炴э級鎴戜滑鍙互鍒╃敤Log4j鐨勫弽灝勬満
鍒墮殢渚挎坊鍔狅紝鍙鍦ㄩ厤緗枃浠剁粰鍏墮檮涓婂煎嵆鍙簲鐢紝鑰屽師鏉ョ殑鐖剁被閲岄潰鐨勪竴浜涘睘鎬э紙username
浠涔堢殑)鍜屽叾get,set鏂規硶鐢變簬鍦ㄨ繛鎺ユ睜涓笉闇瑕侊紝鎵浠ュ垹闄ゃ傝屽湪JDBCPoolAppender綾諱腑錛屾垜涔?br />鍙槸灝唃etConnection 鏂規硶Override 錛屽湪榪欎釜鏂規硶涓垜浠彲浠ユ牴鎹渶瑕佺敓鎴愭垜浠殑Connection
瀵硅薄錛屽彟澶栦袱涓柟娉曞ぇ瀹跺彲浠ユ牴鎹渶姹傛潵鍐沖畾鎬庢牱Override銆?/font>

Log4Net聽 for .net framework

聽聽聽聽 絳夊緟鐮旂┒

聽聽聽聽聽聽 鐢ㄦ埛鍙互浠?a >http://logging.apache.org/log4net/涓嬭澆log4net鐨勬簮浠g爜銆傝В鍘嬭蔣浠跺寘鍚庯紝鍦ㄨВ鍘嬬殑src鐩綍
涓嬪皢log4net.sln杞藉叆Visual Studio .NET錛岀紪璇戝悗鍙互寰楀埌log4net.dll銆傜敤鎴瘋鍦ㄨ嚜宸辯殑紼嬪簭閲屽姞鍏ユ棩蹇楀姛鑳斤紝
鍙渶灝唋og4net.dll寮曞叆宸ョ▼鍗沖彲銆偮犅?



rendong 2006-09-04 15:02 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲中文字幕一二三四区苍井空 | 亚洲国产精品va在线播放| 亚洲狠狠婷婷综合久久| 无码日韩精品一区二区免费| 亚洲欧洲久久精品| 2021免费日韩视频网| 亚洲中文字幕在线无码一区二区 | 四虎免费久久影院| 激情小说亚洲色图| va亚洲va日韩不卡在线观看| 美女免费视频一区二区三区| 波多野结衣免费视频观看| 免费福利资源站在线视频| 亚洲精品一级无码中文字幕| a级毛片免费网站| 国产精品国产亚洲精品看不卡| 在线人成免费视频69国产| 亚洲精品线在线观看| 成人免费大片免费观看网站| 亚洲AV成人影视在线观看| 国产免费一区二区三区VR| 新最免费影视大全在线播放| 亚洲伊人久久大香线蕉综合图片| 久99久精品免费视频热77| 亚洲乱码在线视频| 国产一区二区三区免费视频| 国产高清视频免费在线观看| 久久精品国产96精品亚洲| 在线a免费观看最新网站| 亚洲欧洲日韩国产一区二区三区| 国产一区二区三区免费视频| 大地影院MV在线观看视频免费| 亚洲日韩乱码中文无码蜜桃臀| 成人国产mv免费视频| 中文字幕在线视频免费观看| 久久久久亚洲av无码专区喷水| 免费的涩涩视频在线播放| 国产一区二区三区免费观看在线| 亚洲国产成人久久三区| 中文字幕人成人乱码亚洲电影 | 亚洲精品无码久久毛片波多野吉衣|