锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
int i = s.length();
if (i == 0) {
return this;
} else {
char ac[] = new char[count + i];
getChars(0, count, ac, 0);
s.getChars(0, i, ac, count);
return new String(0, count + i, ac);
}
}
鐢辨錛屾垜浠彲浠ョ煡閬擄紝鍏跺疄錛屾鏂規硶緇欐垜浠繑鍥炵殑宸茬粡涓嶆槸褰撳墠鐨勫瓧絎︿覆浜嗭紝鑰屾槸鍙堝垱寤轟簡涓涓柊鐨勫瓧絎︿覆錛岀劧鍚庤繑鍥炪?br />
鍏朵粬鐨勬柟娉曚篃綾諱技銆?br />
StringBuffer鐨勫疄鐜幫紝涔熸槸閫氳繃char[]鏉ュ疄鐜扮殑銆備絾鏄紝榛樿鐨勬儏鍐典笅錛屽叾鑷繁鍒涘緩浜嗕竴涓紦瀛樻暟緇勶紝闀垮害鏄?6錛岃繖涓鐐癸紝鎴戜滑鍙互閫氳繃StringBuffer鐨勬瀯閫犲櫒鏉ョ煡閬擄細
public StringBuffer() {
super(16);
}
榪欎釜鏂規硶鍒濆鍖栦簡錛宑har[]鏁扮粍鐨勯暱搴︽槸16銆?br />
鍏剁埗綾繪瀯閫犲櫒濡備笅錛?br />
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
涔熷氨鏄錛岄粯璁ょ殑鏁扮粍闀垮害鏄?6銆?br />
寰堝鐨勬椂鍊欙紝瀹歸噺16瀵逛簬鎴戜滑闇瑕佺殑涓叉潵璇達紝鍙兘榪滆繙涓嶅銆傛庝箞鍔炲憿錛?br />
鍦ㄨ繘琛屼覆鐨刟ppend鐨勬椂鍊欙紝StringBuffer浼氭嫻嬪墿浣欏閲忥紝騫朵細閲嶆柊鎵╁厖鑷沖綋鍓嶅閲忕殑2鍊嶃?br />
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);
count = newCount;
return this;
}
鑰屾墿瀹圭殑鍚屾椂錛屼細鍒涘緩涓涓柊鐨勬暟緇勶紝騫跺皢鍘熸潵鐨勬暟緇勫唴瀹瑰鍒跺埌鏂扮殑鏁扮粍閲岄潰銆?br />
鐢辨鍙錛屽鏋滃閲忎笉瓚崇殑璇濓紝閭d箞姣忎竴嬈℃墿瀹癸紝閮戒細鑰楁帀澶ч噺鐨勮祫婧愶紝灝界錛屼綘鍙兘鎵╁厖鐨勫閲忎篃寰堝皬銆傚鏋滐紝鏁扮粍鐨勯暱搴﹀緢澶э紝鑰楁帀鐨勮祫婧愬氨浼氭洿澶氥?br />
鎵浠ワ紝鎴戜滑鍦ㄤ嬌鐢╯tringbuffer鐨勬椂鍊欙紝瑕佷竴嬈″湪鍒涘緩瀵硅薄鐨勬椂鍊欑粰涓庤凍澶熷鐨勭┖闂達紝榪欐牱浼氭彁楂樻ц兘銆?br />
鏈夊埄蹇呮湁寮婏紝榪欎釜鎬ц兘鏄互絀洪棿涓轟唬浠楓備絾鏄浉瀵逛簬鎬ц兘鐨勪撫澶辨潵璇達紝搴旇榪樻槸鍊煎緱鐨勩?br />
濡傛灉涓嶉渶瑕佹墿瀹圭殑璇濓紝閭d箞鎵鏈夌殑鎿嶄綔閮芥槸鍩轟簬鍚屼竴涓暟緇勶紝閭d箞鍍忓浜巗tring鐨勬搷浣滄潵璇達紝涓嶉渶瑕佹瘡涓嬈¢兘鍒涘緩瀵硅薄浜嗭紝鐪佸幓浜嗗垱寤哄璞$殑鏃墮棿錛屾ц兘鏄濂藉緢澶氱殑錛屽悓鏃訛紝String鐨勪覆鎿嶄綔錛屼細鐢ㄥ幓寰堝鐨勭┖闂達紝瀵逛簬铏氭嫙鏈烘潵璇達紝涔熷鍔犱簡寰堝ぇ鐨勫帇鍔涖?br />
杞嚦:http://www.tkk7.com/zhyiwww/archive/2008/04/25/195993.html
]]>
]]>
鏍規嵁緗戠粶璧勬枡鏁寸悊
>>>>1. 姒傝堪<<<<
銆銆1.1. 鑳屾櫙
銆銆
銆銆鍦ㄥ簲鐢ㄧ▼搴忎腑娣誨姞鏃ュ織璁板綍鎬葷殑鏉ヨ鍩轟簬涓変釜鐩殑錛氱洃瑙嗕唬鐮佷腑鍙橀噺鐨勫彉鍖栨儏鍐碉紝鍛ㄦ湡鎬х殑璁板綍鍒版枃浠朵腑渚涘叾浠栧簲鐢ㄨ繘琛岀粺璁″垎鏋愬伐浣滐紱璺熻釜浠g爜榪愯鏃惰建榪癸紝浣滀負鏃ュ悗瀹¤鐨勪緷鎹紱鎷呭綋闆嗘垚寮鍙戠幆澧冧腑鐨勮皟璇曞櫒鐨勪綔鐢紝鍚戞枃浠舵垨鎺у埗鍙版墦鍗頒唬鐮佺殑璋冭瘯淇℃伅銆?br />
銆銆
銆銆鏈鏅氱殑鍋氭硶灝辨槸鍦ㄤ唬鐮佷腑宓屽叆璁稿鐨勬墦鍗拌鍙ワ紝榪欎簺鎵撳嵃璇彞鍙互杈撳嚭鍒版帶鍒跺彴鎴栨枃浠朵腑錛屾瘮杈冨ソ鐨勫仛娉曞氨鏄瀯閫犱竴涓棩蹇楁搷浣滅被鏉ュ皝瑁呮綾繪搷浣滐紝鑰屼笉鏄涓緋誨垪鐨勬墦鍗拌鍙ュ厖鏂ヤ簡浠g爜鐨勪富浣撱?br />
銆銆
銆銆1.2. Log4j綆浠?br />
銆銆
銆銆鍦ㄥ己璋冨彲閲嶇敤緇勪歡寮鍙戠殑浠婂ぉ錛岄櫎浜嗚嚜宸變粠澶村埌灝懼紑鍙戜竴涓彲閲嶇敤鐨勬棩蹇楁搷浣滅被澶栵紝Apache涓烘垜浠彁渚涗簡涓涓己鏈夊姏鐨勬棩蹇楁搷浣滃寘-Log4j銆?br />
銆銆
銆 銆Log4j鏄疉pache鐨勪竴涓紑鏀炬簮浠g爜欏圭洰錛岄氳繃浣跨敤Log4j錛屾垜浠彲浠ユ帶鍒舵棩蹇椾俊鎭緭閫佺殑鐩殑鍦版槸鎺у埗鍙般佹枃浠躲丟UI緇勪歡銆佺敋鑷蟲槸濂楁帴鍙f湇鍔?鍣ㄣ丯T鐨勪簨浠惰褰曞櫒銆乁NIX Syslog瀹堟姢榪涚▼絳夛紱鎴戜滑涔熷彲浠ユ帶鍒舵瘡涓鏉℃棩蹇楃殑杈撳嚭鏍煎紡錛涢氳繃瀹氫箟姣忎竴鏉℃棩蹇椾俊鎭殑綰у埆錛屾垜浠兘澶熸洿鍔犵粏鑷村湴鎺у埗鏃ュ織鐨勭敓鎴愯繃紼嬨傛渶浠や漢鎰熷叴瓚g殑灝?鏄紝榪欎簺鍙互閫氳繃涓涓厤緗枃浠舵潵鐏墊椿鍦拌繘琛岄厤緗紝鑰屼笉闇瑕佷慨鏀瑰簲鐢ㄧ殑浠g爜銆?br />
銆銆
銆銆姝ゅ錛岄氳繃Log4j鍏朵粬璇█鎺ュ彛錛屾偍鍙互鍦–銆丆+ +銆?Net銆丳L/SQL紼嬪簭涓嬌鐢↙og4j錛屽叾璇硶鍜岀敤娉曚笌鍦↗ava紼嬪簭涓竴鏍鳳紝浣垮緱澶氳璦鍒嗗竷寮忕郴緇熷緱鍒頒竴涓粺涓涓鑷寸殑鏃ュ織緇勪歡妯″潡銆傝屼笖錛岄?榪囦嬌鐢ㄥ悇縐嶇涓夋柟鎵╁睍錛屾偍鍙互寰堟柟渚垮湴灝哃og4j闆嗘垚鍒癑2EE銆丣INI鐢氳嚦鏄疭NMP搴旂敤涓?br />
銆銆
銆銆鏈枃浠嬬粛鐨凩og4j鐗堟湰鏄?1.2.3銆備綔鑰呰瘯鍥鵑氳繃涓涓畝鍗曠殑瀹㈡埛/鏈嶅姟鍣↗ava紼嬪簭渚嬪瓙瀵規瘮浣跨敤涓庝笉浣跨敤Log4j 1.2.3鐨勫樊鍒紝騫惰緇嗚瑙d簡鍦ㄥ疄璺典腑鏈甯鎬嬌鐢↙og4j鐨勬柟娉曞拰姝ラ銆傚湪寮鴻皟鍙噸鐢ㄧ粍浠跺紑鍙戠殑浠婂ぉ錛岀浉淇og4j灝嗕細緇欏箍澶х殑璁捐寮鍙戜漢鍛樺甫鏉ユ柟 渚褲傚姞鍏ュ埌Log4j鐨勯槦浼嶆潵鍚э紒
銆銆
>>>> 2. 涓涓畝鍗曠殑渚嬪瓙 <<<<
銆銆鎴戜滑鍏堟潵鐪嬩竴涓畝鍗曠殑渚嬪瓙錛屽畠鏄竴涓敤Java瀹炵幇鐨勫鎴?鏈嶅姟鍣ㄧ綉緇滅▼搴忋傚垰寮濮嬫垜浠笉浣跨敤Log4j錛岃屾槸浣跨敤浜嗕竴緋誨垪鐨勬墦鍗拌鍙ワ紝鐒跺悗鎴戜滑灝嗕嬌鐢↙og4j鏉ュ疄鐜板畠鐨勬棩蹇楀姛鑳姐傝繖鏍鳳紝澶у灝卞彲浠ユ竻妤氬湴姣旇緝鍑哄墠鍚庝袱涓唬鐮佺殑宸埆銆?br />
銆銆
銆銆2.1. 涓嶄嬌鐢↙og4j
銆銆
銆銆2.1.1. 瀹㈡埛紼嬪簭
銆銆package log4j ;
銆銆
銆銆import java.io.* ;
銆銆import java.net.* ;
銆銆
銆銆/**
銆銆 *
銆銆 * <p> Client Without Log4j </p>
銆銆 * <p> Description: a sample with log4j</p>
銆銆 * @version 1.0
銆銆 */
銆銆public class ClientWithoutLog4j {
銆銆
銆銆銆銆/**
銆銆銆銆 *
銆銆銆銆 * @param args
銆銆銆銆 */
銆銆銆銆public static void main ( String args [] ) {
銆銆
銆銆銆銆銆銆String welcome = null;
銆銆銆銆銆銆String response = null;
銆銆銆銆銆銆BufferedReader reader = null;
銆銆銆銆銆銆PrintWriter writer = null;
銆銆銆銆銆銆InputStream in = null;
銆銆銆銆銆銆OutputStream out = null;
銆銆銆銆銆銆Socket client = null;
銆銆
銆銆銆銆銆銆try {
銆銆銆銆銆銆銆銆client = new Socket ( "localhost", 8001 ) ;
銆銆銆銆銆銆銆銆System.out.println ( "info: Client socket: " + client ) ;
銆銆銆銆銆銆銆銆in = client.getInputStream () ;
銆銆銆銆銆銆銆銆out = client.getOutputStream () ;
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆銆銆銆銆銆銆System.out.println ( "error: IOException : " + e ) ;
銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆}
銆銆
銆銆銆銆銆銆try{
銆銆銆銆銆銆銆銆reader = new BufferedReader( new InputStreamReader ( in ) ) ;
銆銆銆銆銆銆銆銆writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
銆銆
銆銆銆銆銆銆銆銆welcome = reader.readLine () ;
銆銆銆銆銆銆銆銆System.out.println ( "debug: Server says: '" + welcome + "'" ) ;
銆銆
銆銆銆銆銆銆銆銆System.out.println ( "debug: HELLO" ) ;
銆銆銆銆銆銆銆銆writer.println ( "HELLO" ) ;
銆銆銆銆銆銆銆銆response = reader.readLine () ;
銆銆銆銆銆銆銆銆System.out.println ( "debug: Server responds: '" + response + "'") ;
銆銆
銆銆銆銆銆銆銆銆System.out.println ( "debug: HELP" ) ;
銆銆銆銆銆銆銆銆writer.println ( "HELP" ) ;
銆銆銆銆銆銆銆銆response = reader.readLine () ;
銆銆銆銆銆銆銆銆System.out.println ( "debug: Server responds: '" + response + "'" ) ;
銆銆
銆銆銆銆銆銆銆銆System.out.println ( "debug: QUIT" ) ;
銆銆銆銆銆銆銆銆writer.println ( "QUIT" ) ;
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆銆銆銆銆銆銆System.out.println ( "warn: IOException in client.in.readln()" ) ;
銆銆銆銆銆銆銆銆System.out.println ( e ) ;
銆銆銆銆銆銆}
銆銆銆銆銆銆try{
銆銆銆銆銆銆銆銆Thread.sleep ( 2000 ) ;
銆銆銆銆銆銆} catch ( Exception ignored ) {}
銆銆銆銆}
銆銆}
銆銆
銆銆2.1.2. 鏈嶅姟鍣ㄧ▼搴?br />
銆銆package log4j ;
銆銆
銆銆import java.util.* ;
銆銆import java.io.* ;
銆銆import java.net.* ;
銆銆
銆銆/**
銆銆 *
銆銆 * <p> Server Without Log4j </p>
銆銆 * <p> Description: a sample with log4j</p>
銆銆 * @version 1.0
銆銆 */
銆銆public class ServerWithoutLog4j {
銆銆
銆銆銆銆final static int SERVER_PORT = 8001 ; // this server's port
銆銆
銆銆銆銆/**
銆銆銆銆 *
銆銆銆銆 * @param args
銆銆銆銆 */
銆銆銆銆public static void main ( String args [] ) {
銆銆銆銆銆銆String clientRequest = null;
銆銆銆銆銆銆BufferedReader reader = null;
銆銆銆銆銆銆PrintWriter writer = null;
銆銆銆銆銆銆ServerSocket server = null;
銆銆銆銆銆銆Socket socket = null;
銆銆銆銆銆銆InputStream in = null;
銆銆銆銆銆銆OutputStream out = null;
銆銆
銆銆銆銆銆銆try {
銆銆銆銆銆銆銆銆server = new ServerSocket ( SERVER_PORT ) ;
銆銆銆銆銆銆銆銆System.out.println ( "info: ServerSocket before accept: " + server ) ;
銆銆銆銆銆銆銆銆System.out.println ( "info: Java server without log4j, on-line!" ) ;
銆銆
銆銆銆銆銆銆銆銆// wait for client's connection
銆銆銆銆銆銆銆銆socket = server.accept () ;
銆銆銆銆銆銆銆銆System.out.println ( "info: ServerSocket after accept: " + server )銆;
銆銆
銆銆銆銆銆銆銆銆in = socket.getInputStream () ;
銆銆銆銆銆銆銆銆out = socket.getOutputStream () ;
銆銆
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆銆銆銆銆銆銆System.out.println( "error: Server constructor IOException: " + e ) ;
銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆}
銆銆銆銆銆銆reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
銆銆銆銆銆銆writer = new PrintWriter ( new OutputStreamWriter ( out ) , true ) ;
銆銆
銆銆銆銆銆銆// send welcome string to client
銆銆銆銆銆銆writer.println ( "Java server without log4j, " + new Date () ) ;
銆銆
銆銆銆銆銆銆while ( true ) {
銆銆銆銆銆銆銆銆try {
銆銆銆銆銆銆銆銆銆銆// read from client
銆銆銆銆銆銆銆銆銆銆clientRequest = reader.readLine () ;
銆銆銆銆銆銆銆銆銆銆System.out.println ( "debug: Client says: " + clientRequest ) ;
銆銆銆銆銆銆銆銆銆銆if ( clientRequest.startsWith ( "HELP" ) ) {
銆銆銆銆銆銆銆銆銆銆銆銆System.out.println ( "debug: OK!" ) ;
銆銆銆銆銆銆銆銆銆銆銆銆writer.println ( "Vocabulary: HELP QUIT" ) ;
銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆else {
銆銆銆銆銆銆銆銆銆銆銆銆if ( clientRequest.startsWith ( "QUIT" ) ) {
銆銆銆銆銆銆銆銆銆銆銆銆銆銆System.out.println ( "debug: OK!" ) ;
銆銆銆銆銆銆銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆銆銆else{
銆銆銆銆銆銆銆銆銆銆銆銆銆銆System.out.println ( "warn: Command '" +
銆銆 clientRequest + "' not understood." ) ;
銆銆銆銆銆銆銆銆銆銆銆銆銆銆writer.println ( "Command '" + clientRequest
銆銆 + "' not understood." ) ;
銆銆銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆} catch ( IOException e ) {
銆銆銆銆銆銆銆銆銆銆System.out.println ( "error: IOException in Server " + e ) ;
銆銆銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆}
銆銆銆銆}
銆銆}
銆銆
銆銆2.2. 榪佺Щ鍒癓og4j
銆銆
銆銆2.2.1. 瀹㈡埛紼嬪簭
銆銆
銆銆package log4j ;
銆銆
銆銆import java.io.* ;
銆銆import java.net.* ;
銆銆
銆銆// add for log4j: import some package
銆銆import org.apache.log4j.PropertyConfigurator ;
銆銆import org.apache.log4j.Logger ;
銆銆import org.apache.log4j.Level ;
銆銆
銆銆/**
銆銆 *
銆銆 * <p> Client With Log4j </p>
銆銆 * <p> Description: a sample with log4j</p>
銆銆 * @version 1.0
銆銆 */
銆銆public class ClientWithLog4j {
銆銆
銆銆銆銆/*
銆銆銆銆add for log4j: class Logger is the central class in the log4j package.
銆銆銆銆we can do most logging operations by Logger except configuration.
銆銆銆銆getLogger(...): retrieve a logger by name, if not then create for it.
銆銆銆銆*/
銆銆銆銆static Logger logger = Logger.getLogger
銆銆 ( ClientWithLog4j.class.getName () ) ;
銆銆
銆銆銆銆/**
銆銆銆銆 *
銆銆銆銆 * @param args : configuration file name
銆銆銆銆 */
銆銆銆銆public static void main ( String args [] ) {
銆銆
銆銆銆銆銆銆String welcome = null ;
銆銆銆銆銆銆String response = null ;
銆銆銆銆銆銆BufferedReader reader = null ;
銆銆銆銆銆銆PrintWriter writer = null ;
銆銆銆銆銆銆InputStream in = null ;
銆銆銆銆銆銆OutputStream out = null ;
銆銆銆銆銆銆Socket client = null ;
銆銆
銆銆銆銆銆銆/*
銆銆銆銆銆銆add for log4j: class BasicConfigurator can quickly configure the package.
銆銆銆銆銆銆print the information to console.
銆銆銆銆銆銆*/
銆銆銆銆銆銆PropertyConfigurator.configure ( "ClientWithLog4j.properties" ) ;
銆銆
銆銆銆銆銆銆// add for log4j: set the level
銆銆//銆銆銆銆logger.setLevel ( ( Level ) Level.DEBUG ) ;
銆銆
銆銆銆銆銆銆try{
銆銆銆銆銆銆銆銆client = new Socket( "localhost" , 8001 ) ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the info level
銆銆銆銆銆銆銆銆logger.info ( "Client socket: " + client ) ;
銆銆
銆銆銆銆銆銆銆銆in = client.getInputStream () ;
銆銆銆銆銆銆銆銆out = client.getOutputStream () ;
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the error level
銆銆銆銆銆銆銆銆logger.error ( "IOException : " + e ) ;
銆銆
銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆}
銆銆
銆銆銆銆銆銆try{
銆銆銆銆銆銆銆銆reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
銆銆銆銆銆銆銆銆writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
銆銆
銆銆銆銆銆銆銆銆welcome = reader.readLine () ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "Server says: '" + welcome + "'" ) ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "HELLO" ) ;
銆銆
銆銆銆銆銆銆銆銆writer.println ( "HELLO" ) ;
銆銆銆銆銆銆銆銆response = reader.readLine () ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "Server responds: '" + response + "'" ) ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "HELP" ) ;
銆銆
銆銆銆銆銆銆銆銆writer.println ( "HELP" ) ;
銆銆銆銆銆銆銆銆response = reader.readLine () ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "Server responds: '" + response + "'") ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆logger.debug ( "QUIT" ) ;
銆銆
銆銆銆銆銆銆銆銆writer.println ( "QUIT" ) ;
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the warn level
銆銆銆銆銆銆銆銆logger.warn ( "IOException in client.in.readln()" ) ;
銆銆
銆銆銆銆銆銆銆銆System.out.println ( e ) ;
銆銆銆銆銆銆}
銆銆銆銆銆銆try {
銆銆銆銆銆銆銆銆Thread.sleep ( 2000 ) ;
銆銆銆銆銆銆} catch ( Exception ignored ) {}
銆銆銆銆}
銆銆}
銆銆
銆銆2.2.2. 鏈嶅姟鍣ㄧ▼搴?br />
銆銆
銆銆package log4j;
銆銆
銆銆import java.util.* ;
銆銆import java.io.* ;
銆銆import java.net.* ;
銆銆
銆銆// add for log4j: import some package
銆銆import org.apache.log4j.PropertyConfigurator ;
銆銆import org.apache.log4j.Logger ;
銆銆import org.apache.log4j.Level ;
銆銆
銆銆/**
銆銆 *
銆銆 * <p> Server With Log4j </p>
銆銆 * <p> Description: a sample with log4j</p>
銆銆 * @version 1.0
銆銆 */
銆銆public class ServerWithLog4j {
銆銆
銆銆銆銆final static int SERVER_PORT = 8001 ; // this server's port
銆銆
銆銆銆銆/*
銆銆銆銆add for log4j: class Logger is the central class in the log4j package.
銆銆銆銆we can do most logging operations by Logger except configuration.
銆銆銆銆getLogger(...): retrieve a logger by name, if not then create for it.
銆銆銆銆*/
銆銆銆銆static Logger logger = Logger.getLogger
銆銆 ( ServerWithLog4j.class.getName () ) ;
銆銆
銆銆銆銆/**
銆銆銆銆 *
銆銆銆銆 * @param args
銆銆銆銆 */
銆銆銆銆public static void main ( String args[]) {
銆銆銆銆銆銆String clientRequest = null ;
銆銆銆銆銆銆BufferedReader reader = null ;
銆銆銆銆銆銆PrintWriter writer = null ;
銆銆銆銆銆銆ServerSocket server = null ;
銆銆銆銆銆銆Socket socket = null ;
銆銆
銆銆銆銆銆銆InputStream in = null ;
銆銆銆銆銆銆OutputStream out = null ;
銆銆
銆銆銆銆銆銆/*
銆銆銆銆銆銆add for log4j: class BasicConfigurator can quickly configure the package.
銆銆銆銆銆銆print the information to console.
銆銆銆銆銆銆*/
銆銆銆銆銆銆PropertyConfigurator.configure ( "ServerWithLog4j.properties" ) ;
銆銆
銆銆銆銆銆銆// add for log4j: set the level
銆銆//銆銆銆銆logger.setLevel ( ( Level ) Level.DEBUG ) ;
銆銆
銆銆銆銆銆銆try{
銆銆銆銆銆銆銆銆server = new ServerSocket ( SERVER_PORT ) ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the info level
銆銆銆銆銆銆銆銆logger.info ( "ServerSocket before accept: " + server ) ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the info level
銆銆銆銆銆銆銆銆logger.info ( "Java server with log4j, on-line!" ) ;
銆銆
銆銆銆銆銆銆銆銆// wait for client's connection
銆銆銆銆銆銆銆銆socket = server.accept() ;
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the info level
銆銆銆銆銆銆銆銆logger.info ( "ServerSocket after accept: " + server ) ;
銆銆
銆銆銆銆銆銆銆銆in = socket.getInputStream() ;
銆銆銆銆銆銆銆銆out = socket.getOutputStream() ;
銆銆
銆銆銆銆銆銆} catch ( IOException e ) {
銆銆
銆銆銆銆銆銆銆銆// add for log4j: log a message with the error level
銆銆銆銆銆銆銆銆logger.error ( "Server constructor IOException: " + e ) ;
銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆}
銆銆銆銆銆銆reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
銆銆銆銆銆銆writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
銆銆
銆銆銆銆銆銆// send welcome string to client
銆銆銆銆銆銆writer.println ( "Java server with log4j, " + new Date () ) ;
銆銆
銆銆銆銆銆銆while ( true ) {
銆銆銆銆銆銆銆銆try {
銆銆銆銆銆銆銆銆銆銆// read from client
銆銆銆銆銆銆銆銆銆銆clientRequest = reader.readLine () ;
銆銆
銆銆銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆銆銆logger.debug ( "Client says: " + clientRequest ) ;
銆銆
銆銆銆銆銆銆銆銆銆銆if ( clientRequest.startsWith ( "HELP" ) ) {
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆銆銆銆銆logger.debug ( "OK!" ) ;
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆writer.println ( "Vocabulary: HELP QUIT" ) ;
銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆else {
銆銆銆銆銆銆銆銆銆銆銆銆if ( clientRequest.startsWith ( "QUIT" ) ) {
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆銆銆// add for log4j: log a message with the debug level
銆銆銆銆銆銆銆銆銆銆銆銆銆銆logger.debug ( "OK!" ) ;
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆銆銆else {
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆銆銆// add for log4j: log a message with the warn level
銆銆銆銆銆銆銆銆銆銆銆銆銆銆logger.warn ( "Command '"
銆銆 + clientRequest + "' not understood." ) ;
銆銆
銆銆銆銆銆銆銆銆銆銆銆銆銆銆writer.println ( "Command '"
銆銆 + clientRequest + "' not understood." ) ;
銆銆銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆銆銆} catch ( IOException e ) {
銆銆
銆銆銆銆銆銆銆銆銆銆// add for log4j: log a message with the error level
銆銆銆銆銆銆銆銆銆銆logger.error( "IOException in Server " + e ) ;
銆銆
銆銆銆銆銆銆銆銆銆銆System.exit ( 0 ) ;
銆銆銆銆銆銆銆銆}
銆銆銆銆銆銆}
銆銆銆銆}
銆銆}
銆銆
銆銆2.2.3. 閰嶇疆鏂囦歡
銆銆
銆銆2.2.3.1. 瀹㈡埛紼嬪簭閰嶇疆鏂囦歡
銆銆
銆銆log4j.rootLogger=INFO, A1
銆銆
銆銆log4j.appender.A1=org.apache.log4j.ConsoleAppender
銆銆
銆銆log4j.appender.A1.layout=org.apache.log4j.PatternLayout
銆銆
銆銆log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
銆銆
銆銆2.2.3.2. 鏈嶅姟鍣ㄧ▼搴忛厤緗枃浠?br />
銆銆
銆銆log4j.rootLogger=INFO, A1
銆銆
銆銆log4j.appender.A1=org.apache.log4j.ConsoleAppender
銆銆
銆銆log4j.appender.A1.layout=org.apache.log4j.PatternLayout
銆銆
銆銆log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
銆銆
銆銆2.3. 姣旇緝
銆銆
銆 銆姣旇緝榪欎袱涓簲鐢ㄥ彲浠ョ湅鍑猴紝閲囩敤Log4j榪涜鏃ュ織鎿嶄綔鐨勬暣涓繃紼嬬浉褰撶畝鍗曟槑浜嗭紝涓庣洿鎺ヤ嬌鐢⊿ystem.out.println璇彞榪涜鏃ュ織淇℃伅杈撳嚭鐨?鏂瑰紡鐩告瘮錛屽熀鏈笂娌℃湁澧炲姞浠g爜閲忥紝鍚屾椂鑳藉娓呮鍦扮悊瑙f瘡涓鏉℃棩蹇椾俊鎭殑閲嶈紼嬪害銆傞氳繃鎺у埗閰嶇疆鏂囦歡錛屾垜浠繕鍙互鐏墊椿鍦頒慨鏀規棩蹇椾俊鎭殑鏍煎紡錛岃緭鍑虹洰鐨勫湴絳夌瓑 鏂歸潰錛岃屽崟綰緷闈燬ystem.out.println璇彞錛屾樉鐒墮渶瑕佸仛鏇村鐨勫伐浣溿?/p>
>>>> 3 . Log4j鏃ュ織綆$悊緋葷粺綆鍗曚嬌鐢ㄨ鏄?<<<<
閫氬父錛屾垜浠兘鎻愪緵涓涓悕涓?log4j.properties鐨勬枃浠訛紝鍦ㄧ涓嬈¤皟鐢ㄥ埌Log4J鏃訛紝Log4J浼氬湪綾昏礬寰勶紙../web-inf/class/褰撶劧涔熷彲浠ユ斁鍒板叾瀹冧換浣曠洰褰曪紝鍙璇ョ洰褰曡鍖呭惈鍒扮被璺緞涓嵆鍙級涓畾浣嶈繖涓枃浠訛紝騫惰鍏ヨ繖涓枃浠跺畬鎴愮殑閰嶇疆銆傝繖涓厤緗枃浠跺憡 璇塋og4J浠ヤ粈涔堟牱鐨勬牸寮忋佹妸浠涔堟牱鐨勪俊鎭佽緭鍑哄埌浠涔堝湴鏂廣?br />
銆銆Log4j鏈変笁涓富瑕佺殑緇勪歡錛歀oggers(璁板綍鍣?錛孉ppenders(杈撳嚭婧?鍜孡ayouts(甯冨眬)錛岃繖閲屽彲綆鍗曠悊瑙d負鏃ュ織綾誨埆錛屾棩蹇楄杈撳嚭鐨勫湴鏂瑰拰鏃ュ織浠ヤ綍縐嶅艦寮忚緭鍑恒傜患鍚堜嬌鐢ㄨ繖涓変釜緇勪歡鍙互杞繪澗鐨勮褰曚俊鎭殑綾誨瀷鍜岀駭鍒紝騫跺彲浠ュ湪榪愯鏃舵帶鍒舵棩蹇楄緭鍑虹殑鏍峰紡鍜屼綅緗備笅闈㈠涓変釜緇勪歡鍒嗗埆榪涜璇存槑錛?br />
銆銆
銆銆1銆?Loggers
銆 銆Loggers緇勪歡鍦ㄦ緋葷粺涓鍒嗕負浜斾釜綰у埆錛欴EBUG銆両NFO銆乄ARN銆丒RROR鍜孎ATAL銆傝繖浜斾釜綰у埆鏄湁欏哄簭鐨勶紝DEBUG < INFO < WARN < ERROR < FATAL錛屽垎鍒敤鏉ユ寚瀹氳繖鏉℃棩蹇椾俊鎭殑閲嶈紼嬪害,鏄庣櫧榪欎竴鐐瑰緢閲嶈錛岃繖閲孡og4j鏈変竴涓鍒欙細鍋囪Loggers綰у埆涓篜錛屽鏋滃湪Loggers涓彂鐢熶簡涓涓駭鍒玅姣擯楂橈紝鍒欏彲浠ュ惎鍔紝鍚﹀垯灞忚斀鎺夈?br />
鍋囪浣犲畾涔夌殑綰у埆鏄痠nfo錛岄偅涔坋rror鍜寃arn鐨勬棩蹇楀彲浠ユ樉紺鴻屾瘮浠栦綆鐨刣ebug淇℃伅灝變笉鏄劇ず浜嗐?br />
銆
銆銆Java紼嬪簭涓句緥鏉ヨ錛?br />
銆銆
銆銆//寤虹珛Logger鐨勪竴涓疄渚嬶紝鍛藉悕涓?#8220;com.foo”
銆銆銆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.");
銆銆//鍛藉悕涓?#8220;com.foo.bar”鐨勫疄渚媌arlogger浼氱戶鎵垮疄渚?#8220;com.foo”鐨勭駭鍒傚洜姝わ紝涓嬮潰榪欎釜璇鋒眰鍙敤錛屽洜涓篒NFO >= INFO
銆銆barlogger.info("Located nearest gas station.");
銆銆//涓嬮潰榪欎釜璇鋒眰涓嶅彲鐢紝鍥犱負DEBUG < INFO
銆銆barlogger.debug("Exiting gas station search");
銆銆榪欓噷“鏄惁鍙敤”鐨勬剰鎬濇槸鑳藉惁杈撳嚭Logger淇℃伅銆?br />
銆銆銆銆鍦ㄥLogger瀹炰緥榪涜鍛藉悕鏃訛紝娌℃湁闄愬埗錛屽彲浠ュ彇浠繪剰鑷繁鎰熷叴瓚g殑鍚嶅瓧銆備竴鑸儏鍐典笅寤鴻浠ョ被鐨勬墍鍦ㄤ綅緗潵鍛藉悕Logger瀹炰緥錛岃繖鏄洰鍓嶆潵璁叉瘮杈冩湁鏁堢殑Logger鍛藉悕鏂瑰紡銆傝繖鏍峰彲浠ヤ嬌寰楁瘡涓被寤虹珛鑷繁鐨勬棩蹇椾俊鎭紝渚夸簬綆$悊銆傛瘮濡傦細
銆銆
銆銆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
銆銆…
log4j.appender.appenderName.option = valueN
銆銆榪欐牱灝變負鏃ュ織鐨勮緭鍑烘彁渚涗簡鐩稿綋澶х殑渚垮埄銆?br />
銆銆
銆銆3銆丩ayouts
銆 銆鏈夋椂鐢ㄦ埛甯屾湜鏍規嵁鑷繁鐨勫枩濂芥牸寮忓寲鑷繁鐨勬棩蹇楄緭鍑恒侺og4j鍙互鍦ˋppenders鐨勫悗闈㈤檮鍔燣ayouts鏉ュ畬鎴愯繖涓姛鑳姐侺ayouts鎻愪緵浜?鍥涚鏃ュ織杈撳嚭鏍峰紡錛屽鏍規嵁HTML鏍峰紡銆佽嚜鐢辨寚瀹氭牱寮忋佸寘鍚棩蹇楃駭鍒笌淇℃伅鐨勬牱寮忓拰鍖呭惈鏃ュ織鏃墮棿銆佺嚎紼嬨佺被鍒瓑淇℃伅鐨勬牱寮忕瓑絳夈?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
銆銆…
銆銆log4j.appender.appenderName.layout.option = valueN
>>>> 4 . 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);
銆銆
銆>>>> 5. 閰嶇疆榪囩▼ <<<<
銆鍦ㄥ疄闄呯紪紼嬫椂錛岃浣縇og4j鐪熸鍦ㄧ郴緇熶腑榪愯浜嬪厛榪樿瀵歸厤緗枃浠惰繘琛屽畾涔夈傚畾涔夋楠ゅ氨鏄Logger銆丄ppender鍙奓ayout鐨勫垎鍒嬌鐢ㄣ?br />
Log4j鏀寔涓ょ閰嶇疆鏂囦歡鏍煎紡錛屼竴縐嶆槸XML鏍煎紡鐨勬枃浠訛紝涓縐嶆槸java properties錛坘ey=value錛夈怞ava鐗規ф枃浠訛紙閿?鍊鹼級銆戙備笅闈㈡垜浠粙緇嶄嬌鐢↗ava鐗規ф枃浠跺仛涓洪厤緗枃浠剁殑鏂規硶
鍏蜂綋濡備笅錛?br />
銆銆
銆銆1銆侀厤緗牴Logger錛屽叾璇硶涓猴細
銆銆log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 鏄棩蹇楄褰曠殑浼樺厛綰э紝鍒嗕負OFF銆丗ATAL銆丒RROR銆乄ARN銆両NFO銆丏EBUG銆丄LL鎴栬呮偍瀹氫箟鐨勭駭鍒侺og4j寤鴻鍙嬌鐢ㄥ洓涓駭鍒紝浼樺厛綰т粠楂樺埌浣庡垎鍒槸ERROR銆乄ARN銆両NFO銆丏EBUG銆傞氳繃鍦ㄨ繖閲屽畾涔夌殑綰у埆錛屾偍鍙互鎺у埗鍒板簲鐢ㄧ▼搴忎腑鐩稿簲綰у埆鐨勬棩蹇椾俊鎭殑寮鍏熾傛瘮濡傚湪榪欓噷瀹?涔変簡INFO綰у埆錛屽垯搴旂敤紼嬪簭涓墍鏈塂EBUG綰у埆鐨勬棩蹇椾俊鎭皢涓嶈鎵撳嵃鍑烘潵銆?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:姣忓懆婊氬姩涓嬈℃枃浠訛紝鍗蟲瘡鍛ㄤ駭鐢熶竴涓柊鐨勬枃浠躲傚綋鐒朵篃鍙互鎸囧畾鎸夋湀銆佸懆銆佸ぉ銆佹椂鍜屽垎銆傚嵆瀵瑰簲鐨勬牸寮忓涓嬶細
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. 鍦ㄦ棩蹇楁枃浠跺埌杈捐澶у皬鏃訛紝灝嗕細鑷姩婊氬姩錛屽嵆灝嗗師鏉ョ殑鍐呭縐誨埌mylog.log.1鏂囦歡銆?br />
MaxBackupIndex=2:鎸囧畾鍙互浜х敓鐨勬粴鍔ㄦ枃浠剁殑鏈澶ф暟銆?/p>
瀹為檯搴旂敤錛?br />
銆銆log4j.appender.A1=org.apache.log4j.ConsoleAppender //榪欓噷鎸囧畾浜嗘棩蹇楄緭鍑虹殑絎竴涓綅緗瓵1鏄帶鍒跺彴ConsoleAppender
銆銆
銆銆3銆侀厤緗棩蹇椾俊鎭殑鏍煎紡錛屽叾璇硶涓猴細
銆銆A. 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
B. 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瀛楃錛屽氨浠庡乏杈逛氦榪滈攢鍑虹殑瀛楃鎴帀銆?/p>
銆銆榪欓噷涓婇潰涓変釜姝ラ鏄鍓嶉潰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. # 褰撹緭鍑轟俊鎭簬鍥炴粴鏂囦歡鏃?/p>
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender //鎸囧畾浠ユ枃浠剁殑鏂瑰紡杈撳嚭鏃ュ織
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //鏂囦歡浣嶇疆,涔熷彲浠ョ敤鍙橀噺${java.home}銆乺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 銆銆
××××××××××××××××××××××××××××××××××××××××××××××××
>>>> 6. Log4j姣旇緝鍏ㄩ潰鐨勯厤緗?<<<<
LOG4J鐨勯厤緗箣綆鍗曚嬌瀹冮亶鍙婁簬瓚婃潵瓚婂鐨勫簲鐢ㄤ腑浜嗭細Log4J閰嶇疆鏂囦歡瀹炵幇浜嗚緭鍑哄埌鎺у埗鍙般佹枃浠躲佸洖婊氭枃浠躲佸彂閫佹棩蹇楅偖浠躲佽緭鍑哄埌鏁版嵁搴撴棩蹇楄〃銆佽嚜瀹氫箟鏍囩絳夊叏濂楀姛鑳姐傛嫨鍏朵竴浜屼嬌鐢ㄥ氨澶熺敤浜嗭紝
log4j.rootLogger=DEBUG,CONSOLE,A1,im
log4j.addivity.org.apache=true
# 搴旂敤浜庢帶鍒跺彴
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
#搴旂敤浜庢枃浠?
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
# 搴旂敤浜庢枃浠跺洖婊?
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log //鏂囦歡浣嶇疆,涔熷彲浠ョ敤鍙橀噺${java.home}銆乺olling.log
log4j.appender.ROLLING_FILE.Append=true //true:娣誨姞 false:瑕嗙洊
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
#搴旂敤浜巗ocket
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
# 鍙戦佹棩蹇楃粰閭歡
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 鐢ㄤ簬鏁版嵁搴?
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
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=488099
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞藉嚭澶勶細http://blog.csdn.net/hbuzhang/archive/2006/01/13/578231.aspx
public static void main(String[] args)
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433","sa","sa");
System.out.println("Weather Connect Success?"+conn!=null?"Success":"Failure");
}
catch(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}