锘??xml version="1.0" encoding="utf-8" standalone="yes"?>免费短视频成人日韩,欧美高潮视频,国产视频观看一区http://m.shnenglu.com/tx7do/category/1516.html涓ヤ互寰嬪繁,瀹戒互寰呬漢. 涓夋濊屽悗琛?</br> GMail/GTalk: yanglinbo#google.com;</br> MSN/Email: tx7do#yahoo.com.cn;</br> QQ: 3 0 3 3 9 6 9 2 0 .zh-cnThu, 10 Jun 2010 08:32:14 GMTThu, 10 Jun 2010 08:32:14 GMT60寮婧愭棩蹇楃郴緇焞og4cplus(涓?http://m.shnenglu.com/tx7do/articles/11721.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:51:00 GMThttp://m.shnenglu.com/tx7do/articles/11721.htmlhttp://m.shnenglu.com/tx7do/comments/11721.htmlhttp://m.shnenglu.com/tx7do/articles/11721.html#Feedback4http://m.shnenglu.com/tx7do/comments/commentRss/11721.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11721.html 

緇忚繃鐭殏鐨勭啛鎮(zhèn)夎繃紼嬶紝log4cplus宸茬粡琚垚鍔熷簲鐢ㄥ埌浜嗘垜鐨勯」鐩腑鍘諱簡錛屾晥鏋滆繕涓嶉敊錛岋細(xì)錛夐櫎浜嗕笂鏂囨彁鍙?qiáng)鐨?br>鍔熻兘涔嬪錛屼笅闈㈠皢浠嬬粛log4cplus鎻愪緵鐨勭嚎紼嬪拰濂楁帴瀛楃殑浣跨敤鎯呭喌銆?br>

### NDC ###
棣栧厛鎴戜滑鍏堜簡瑙d竴涓媗og4cplus涓祵鍏ヨ瘖鏂笂涓嬫枃錛圢ested Diagnostic Context錛夛紝鍗砃DC銆傚log緋葷粺鑰岃█錛?br>褰撹緭鍏ユ簮鍙兘涓嶆涓涓紝鑰屽彧鏈変竴涓緭鍑烘椂錛屽線寰闇瑕佸垎杈╂墍瑕佽緭鍑烘秷鎭殑鏉ユ簮錛屾瘮濡傛湇鍔″櫒澶勭悊鏉ヨ嚜涓嶅悓
瀹㈡埛绔殑娑堟伅鏃跺氨闇瑕佷綔姝ゅ垽鏂紝NDC鍙互涓轟氦閿欐樉紺虹殑淇℃伅鎵撲笂涓涓爣璁?stamp)錛?浣垮緱杈ㄨ宸ヤ綔鐪嬭搗鏉?br>姣旇緝瀹規(guī)槗浜涳紝鍛靛懙銆傝繖涓爣璁版槸綰跨▼鐗規(guī)湁鐨勶紝鍒╃敤浜嗙嚎紼嬪眬閮ㄥ瓨鍌ㄦ満鍒訛紝縐頒負(fù)綰跨▼縐佹湁鏁版嵁錛圱hread-specific
 Data錛屾垨TSD錛夈?鐪嬩簡涓涓嬫簮浠g爜錛岀浉鍏沖畾涔夊涓嬶紝鍖呮嫭瀹氫箟銆佸垵濮嬪寲銆佽幏鍙栥佽緗拰娓呴櫎鎿嶄綔錛?/pre>
linux pthread
#   define LOG4CPLUS_THREAD_LOCAL_TYPE pthread_key_t*
#   define LOG4CPLUS_THREAD_LOCAL_INIT ::log4cplus::thread::createPthreadKey()
#   define LOG4CPLUS_GET_THREAD_LOCAL_VALUE( key ) pthread_getspecific(
*key)
#   define LOG4CPLUS_SET_THREAD_LOCAL_VALUE( key, value ) pthread_setspecific(
*key, value)
#   define LOG4CPLUS_THREAD_LOCAL_CLEANUP( key ) pthread_key_delete(
*key)

win32
#   define LOG4CPLUS_THREAD_LOCAL_TYPE DWORD
#   define LOG4CPLUS_THREAD_LOCAL_INIT TlsAlloc()
#   define LOG4CPLUS_GET_THREAD_LOCAL_VALUE( key ) TlsGetValue(key)
#   define LOG4CPLUS_SET_THREAD_LOCAL_VALUE( key, value ) \       TlsSetValue(key, static_cast(value))
#   define LOG4CPLUS_THREAD_LOCAL_CLEANUP( key ) TlsFree(key)
				
浣跨敤璧鋒潵姣旇緝綆鍗曪紝鍦ㄦ煇涓嚎紼嬩腑錛?/pre>
    NDC& ndc = log4cplus::getNDC();
    ndc.push(
"ur ndc string");
    LOG4CPLUS_DEBUG(logger, 
"this is a NDC test");
     
    ndc.pop();
        
    LOG4CPLUS_DEBUG(logger, 
"There should be no NDC");
    ndc.remove();


   
褰撹瀹氳緭鍑烘牸寮?Layout)涓篢TCCLayout鏃訛紝杈撳嚭濡備笅錛?/pre>
10-21-04 21:32:58, [3392] DEBUG test  - this is a NDC test
10-21-04 21:32:58, [3392] DEBUG test <> - There should be no NDC...
涔熷彲浠ュ湪鑷畾涔夌殑杈撳嚭鏍煎紡涓嬌鐢∟DC(鐢?x) 錛屾瘮濡傦細(xì)
     
  std::
string pattern = "NDC:[%x]  - %m %n";
  std::auto_ptr _layout(
new PatternLayout(pattern));
     
 LOG4CPLUS_DEBUG(_logger, 
"This is the FIRST log message")
  NDC
& ndc = log4cplus::getNDC();
  ndc.push(
"ur ndc string"); 
  LOG4CPLUS_WARN(_logger, 
"This is the SECOND log message")
  ndc.pop();
 ndc.remove(); 
    

   
杈撳嚭濡備笅錛?/pre>
NDC:[]  - This is the FIRST log message...
NDC:[ur ndc string]  - This is the SECOND log message...
				
鍙﹀涓縐嶆洿綆鍗曠殑浣跨敤鏂規(guī)硶鏄湪綰跨▼涓洿鎺ョ敤NDCContextCreator錛?/pre>
    NDCContextCreator _first_ndc("ur ndc string");
    LOG4CPLUS_DEBUG(logger, 
"this is a NDC test")

   
涓嶅繀鏄懼紡鍦拌皟鐢╬ush/pop浜嗭紝鑰屼笖褰撳嚭鐜板紓甯告椂錛岃兘澶熺‘淇漰ush涓巔op鐨勮皟鐢ㄦ槸鍖歸厤鐨勩?/pre>
    
### 綰跨▼ ###
綰跨▼鏄痩og4cplus涓殑鍓駭鍝侊紝 鑰屼笖浠呬綔浜嗘渶鍩烘湰鐨勫疄鐜幫紝浣跨敤璧鋒潵涔熷紓甯哥畝鍗曪紝鍙涓斿繀欏昏
鍦ㄦ淳鐢熺被涓噸杞絩un鍑芥暟鍗沖彲錛?/pre>
class TestThread : public AbstractThread
{
public:
    
virtual void run();
}
;
                
void TestThread::run()

   
/* do sth. */ 
    
}

log4cplus鐨勭嚎紼嬫病鏈夎冭檻鍚屾銆佹閿侊紝鏈変簰鏂ワ紝瀹炵幇綰跨▼鍒囨崲鐨勫皬鍑芥暟鎸哄埆鑷寸殑錛?/pre>
void log4cplus::thread::yield()
{
#if defined(LOG4CPLUS_USE_PTHREADS)
    ::sched_yield();
#elif defined(LOG4CPLUS_USE_WIN32_THREADS)
    ::Sleep(
0);
#endif
}
				
### 濂楁帴瀛?###
濂楁帴瀛椾篃鏄痩og4cplus涓殑鍓駭鍝侊紝鍦╪amespace log4cplus::helpers涓紝瀹炵幇浜咰/S鏂瑰紡鐨勬棩蹇楄褰曘?/pre>
1. 瀹㈡埛绔▼搴忛渶瑕佸仛鐨勫伐浣滐細(xì)
/* 瀹氫箟涓涓猄ocketAppender綾誨瀷鐨勬寕鎺ュ櫒 */SharedAppenderPtr _append(new SocketAppender(host, 8888"ServerName"));
/* 鎶奯append鍔犲叆鍒發(fā)ogger涓?nbsp;*/Logger::getRoot().addAppender(_append);
/*  SocketAppender綾誨瀷涓嶉渶瑕丩ayout, 鐩存帴璋冪敤瀹忓氨鍙互灝嗕俊鎭彂寰loggerServer浜?nbsp;*/LOG4CPLUS_INFO(Logger::getRoot(), "This is a test: ")

銆愭敞銆?榪欓噷瀵瑰畯鐨勮皟鐢ㄥ叾瀹炴槸璋冪敤浜哠ocketAppender::append錛岄噷闈㈡湁涓涓暟鎹紶杈撶害瀹氾紝鍗沖厛鍙戦?br>涓涓悗緇暟鎹殑鎬婚暱搴︼紝鐒跺悗鍐嶅彂閫佸疄闄呯殑鏁版嵁錛?/pre>
     
    SocketBuffer buffer 
= convertToBuffer(event, serverName);
    SocketBuffer msgBuffer(LOG4CPLUS_MAX_MESSAGE_SIZE);
    msgBuffer.appendSize_t(buffer.getSize());
    msgBuffer.appendBuffer(buffer);        
				
2. 鏈嶅姟鍣ㄧ紼嬪簭闇瑕佸仛鐨勫伐浣滐細(xì)
/* 瀹氫箟涓涓猄erverSocket */ServerSocket serverSocket(port);
 
/* 璋冪敤accept鍑芥暟鍒涘緩涓涓柊鐨剆ocket涓庡鎴風(fēng)榪炴帴 */Socket sock = serverSocket.accept();
				
姝ゅ悗鍗沖彲鐢ㄨsock榪涜鏁版嵁read/write浜?褰㈠錛?/pre>
SocketBuffer msgSizeBuffer(sizeof(unsigned int));
if(!clientsock.read(msgSizeBuffer))
{
    
return;
}

unsigned 
int msgSize = msgSizeBuffer.readInt();
SocketBuffer buffer(msgSize);
if(!clientsock.read(buffer))
{
    
return;
}

涓轟簡灝嗚鍒扮殑鏁版嵁姝e父鏄劇ず鍑烘潵錛岄渶瑕佸皢SocketBuffer瀛樻斁鐨勫唴瀹硅漿鎹㈡垚InternalLoggingEvent鏍煎紡錛?/pre>
spi::InternalLoggingEvent event = readFromBuffer(buffer);
鐒跺悗杈撳嚭錛?br>
Logger logger = Logger::getInstance(event.getLoggerName());
logger.callAppenders(
event);
				
銆愭敞銆?read/write鏄寜鐓ч樆濉炴柟寮忓疄鐜扮殑錛屾剰鍛崇潃瀵瑰叾璋冪敤鐩村埌婊¤凍浜嗘墍鎺ユ敹鎴栧彂閫佺殑涓暟鎵嶈繑鍥炪?/pre>

]]>寮婧愭棩蹇楃郴緇焞og4cplus(鍥?http://m.shnenglu.com/tx7do/articles/11718.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:50:00 GMThttp://m.shnenglu.com/tx7do/articles/11718.htmlhttp://m.shnenglu.com/tx7do/comments/11718.htmlhttp://m.shnenglu.com/tx7do/articles/11718.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11718.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11718.html灝唋og淇℃伅璁板綍鍒版枃浠跺簲璇ヨ鏄棩蹇楃郴緇熺殑涓涓熀鏈姛鑳斤紝log4cplus鍦ㄦ鍩虹涓婏紝鎻愪緵浜嗘洿澶氱殑鍔熻兘錛屽彲浠ユ寜鐓т綘棰勫厛璁懼畾鐨勫ぇ灝忔潵鍐沖畾鏄惁杞偍錛屽綋瓚呰繃璇ュぇ灝忥紝鍚庣畫log淇℃伅浼?xì)鍙﹀瓨鍒版柊鏂囦欢涓Q屼緷嬈$被鎺紱鎴栬呮寜鐓ф棩鏈熸潵鍐沖畾鏄惁杞偍銆傛湰鏂囧皢璇︾粏浠嬬粛榪欎簺鐢ㄦ硶銆?/p>
				
### 濡備綍灝唋og璁板綍鍒版枃浠?###
鎴戜滑鍦ㄤ緥5涓粰鍑轟簡涓涓皢log璁板綍鍒版枃浠剁殑渚嬪瓙錛岀敤鐨勬槸FileAppender綾誨疄鐜扮殑錛宭og4cplus鎻愪緵浜嗕笁涓被鐢ㄤ簬
鏂囦歡鎿嶄綔錛屽畠浠槸FileAppender綾匯丷ollingFileAppender綾匯丏ailyRollingFileAppender綾匯?/pre>
1. FileAppender綾?/pre>
		
瀹炵幇浜嗗熀鏈殑鏂囦歡鎿嶄綔鍔熻兘錛屾瀯閫犲嚱鏁板涓嬶細(xì)
FileAppender(const log4cplus::tstring& filename,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LOG4CPLUS_OPEN_MODE_TYPE mode = LOG4CPLUS_FSTREAM_NAMESPACE::ios::trunc,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 bool immediateFlush = true);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
filename聽聽聽聽聽聽 : 鏂囦歡鍚?br />mode聽聽聽聽聽聽聽聽聽聽 : 鏂囦歡綾誨瀷錛屽彲閫夋嫨鐨勬枃浠剁被鍨嬪寘鎷琣pp銆乤te銆乥inary銆乮n銆乷ut銆乼runc錛屽洜涓哄疄闄呬笂鍙槸瀵?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 stl鐨勪竴涓畝鍗曞寘瑁咃紝鍛靛懙錛岃繖閲屽氨涓嶅璁蹭簡銆傜己鐪佹槸trunc錛岃〃紺哄皢鍏堝墠鏂囦歡鍒犻櫎銆?br />immediateFlush 錛氱紦鍐插埛鏂版爣蹇楋紝濡傛灉涓簍rue琛ㄧず姣忓悜鏂囦歡鍐欎竴鏉¤褰曞氨鍒鋒柊涓嬈$紦瀛橈紝鍚﹀垯鐩村埌FileAppender
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 琚叧闂垨鏂囦歡緙撳瓨宸叉弧鎵嶆洿鏂版枃浠訛紝涓鑸槸瑕佽緗畉rue鐨勶紝姣斿浣犲線鏂囦歡鍐欑殑榪囩▼涓嚭鐜?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 浜嗛敊璇紙濡傜▼搴忛潪姝e父閫鍑猴級(jí)錛屽嵆浣挎枃浠舵病鏈夋甯稿叧闂篃鍙互淇濊瘉紼嬪簭緇堟鏃跺埢涔嬪墠鐨勬墍鏈?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 璁板綍閮戒細(xì)琚甯鎬繚瀛樸?/pre>
FileAppender綾葷殑浣跨敤鎯呭喌璇峰弬鑰冧緥5錛岃繖閲屼笉鍐嶈禈榪般?/pre>
		
				
2. RollingFileAppender綾?/pre>
鏋勯犲嚱鏁板涓嬶細(xì)
log4cplus::RollingFileAppender::RollingFileAppender(const log4cplus::tstring& filename,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 long maxFileSize,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 int maxBackupIndex,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 bool immediateFlush)
filename聽聽聽聽聽聽 : 鏂囦歡鍚?br />maxFileSize聽聽聽 : 鏂囦歡鐨勬渶澶у昂瀵?br />maxBackupIndex : 鏈澶ц褰曟枃浠舵暟
immediateFlush : 緙撳啿鍒鋒柊鏍囧織
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
RollingFileAppender綾誨彲浠ユ牴鎹綘棰勫厛璁懼畾鐨勫ぇ灝忔潵鍐沖畾鏄惁杞偍錛屽綋瓚呰繃璇ュぇ灝忥紝鍚庣畫log淇℃伅浼?xì)鍙﹀瓨鍒版?br />鏂囦歡涓紝闄や簡瀹氫箟姣忎釜璁板綍鏂囦歡鐨勫ぇ灝忎箣澶栵紝浣犺繕瑕佺‘瀹氬湪RollingFileAppender綾誨璞℃瀯閫犳椂鏈澶氶渶瑕佸灝戜釜
榪欐牱鐨勮褰曟枃浠?maxBackupIndex+1)錛屽綋瀛樺偍鐨勬枃浠舵暟鐩秴榪噈axBackupIndex+1鏃訛紝浼?xì)鍒犻櫎鏈鏃╃敓鎴愮殑鏂囦歡錛?br />淇濊瘉鏁翠釜鏂囦歡鏁扮洰絳変簬maxBackupIndex+1銆傜劧鍚庣戶緇褰曪紝姣斿浠ヤ笅浠g爜鐗囨錛?/pre>
聽聽聽 ... ...
聽聽聽
聽聽聽 #define LOOP_COUNT 200000
聽聽聽
聽聽聽 SharedAppenderPtr _append(new RollingFileAppender("Test.log", 5*1024, 5));
聽聽聽 _append->setName("file test");
聽聽聽 _append->setLayout( std::auto_ptr(new TTCCLayout()) );
聽聽聽 Logger::getRoot().addAppender(_append);
聽聽聽 Logger root = Logger::getRoot();
聽聽聽 Logger test = Logger::getInstance("test");
聽聽聽 Logger subTest = Logger::getInstance("test.subtest");
聽聽聽 for(int i=0; i聽聽聽 {
聽聽聽聽聽聽聽 NDCContextCreator _context("loop");
聽聽聽聽聽聽聽 LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)
聽聽聽 }
聽聽聽
聽聽聽 ... ...
聽聽聽
榪愯緇撴灉錛?/pre>
		
榪愯鍚庝細(xì)浜х敓6涓緭鍑烘枃浠訛紝Test.log銆乀est.log.1銆乀est.log.2銆乀est.log.3銆乀est.log.4銆乀est.log.5
鍏朵腑Test.log瀛樻斁鐫鏈鏂板啓鍏ョ殑淇℃伅錛岃屾渶鍚庝竴涓枃浠朵腑騫朵笉鍖呭惈絎竴涓啓鍏ヤ俊鎭紝璇存槑宸茬粡琚笉鏂洿鏂頒簡銆?br />闇瑕佹寚鍑虹殑鏄紝榪欓噷闄や簡Test.log涔嬪錛屾瘡涓枃浠剁殑澶у皬閮芥槸200K,鑰屼笉鏄垜浠兂鍍忎腑鐨?K錛岃繖鏄洜涓?br />log4cplus涓殣鍚畾涔変簡鏂囦歡鐨勬渶灝忓昂瀵告槸200K錛屽彧鏈夊ぇ浜?00K鐨勮緗墠鐢熸晥錛?lt;= 200k鐨勮緗兘浼?xì)琚湄?fù)鏄?br />200K.
				
3. DailyRollingFileAppender綾?/pre>
鏋勯犲嚱鏁板涓嬶細(xì)
DailyRollingFileAppender::DailyRollingFileAppender(const log4cplus::tstring& filename,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 DailyRollingFileSchedule schedule,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 bool immediateFlush,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 int maxBackupIndex)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
filename聽聽聽聽聽聽 : 鏂囦歡鍚?br />schedule聽聽聽聽聽聽 : 瀛樺偍棰戝害
immediateFlush : 緙撳啿鍒鋒柊鏍囧織
maxBackupIndex : 鏈澶ц褰曟枃浠舵暟
DailyRollingFileAppender綾誨彲浠ユ牴鎹綘棰勫厛璁懼畾鐨勯搴︽潵鍐沖畾鏄惁杞偍錛屽綋瓚呰繃璇ラ搴︼紝鍚庣畫log淇℃伅浼?xì)鍙﹀?br />鍒版柊鏂囦歡涓紝榪欓噷鐨勯搴﹀寘鎷細(xì)MONTHLY錛堟瘡鏈堬級(jí)銆乄EEKLY錛堟瘡鍛級(jí)銆丏AILY錛堟瘡鏃ワ級(jí)銆乀WICE_DAILY錛堟瘡涓ゅぉ錛夈?br />HOURLY錛堟瘡鏃訛級(jí)銆丮INUTELY錛堟瘡鍒嗭級(jí)銆俶axBackupIndex鐨勫惈涔夊悓涓婃墍榪幫紝姣斿浠ヤ笅浠g爜鐗囨錛?/pre>
		
聽聽聽 ... ...
聽聽聽
聽聽聽 SharedAppenderPtr _append(new DailyRollingFileAppender("Test.log", MINUTELY, true, 5));
聽聽聽 _append->setName("file test");
聽聽聽 _append->setLayout( std::auto_ptr(new TTCCLayout()) );
聽聽聽 Logger::getRoot().addAppender(_append);
聽聽聽 Logger root = Logger::getRoot();
聽聽聽 Logger test = Logger::getInstance("test");
聽聽聽 Logger subTest = Logger::getInstance("test.subtest");
聽聽聽 for(int i=0; i聽聽聽 {
聽聽聽聽聽聽聽 NDCContextCreator _context("loop");
聽聽聽聽聽聽聽 LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)
聽聽聽 }
聽聽聽
聽聽聽 ... ...
				
榪愯緇撴灉錛?/pre>
榪愯鍚庝細(xì)浠ュ垎閽熶負(fù)鍗曚綅錛屽垎鍒敓鎴愬悕涓篢est.log.2004-10-17-03-03銆乀est.log.2004-10-17-03-04鍜?br />Test.log.2004-10-17-03-05榪欐牱鐨勬枃浠躲?/pre>
		
闇瑕佹寚鍑虹殑鏄紝鍒氱湅鍒版寜鐓ч搴︼紙濡侶OURLY銆丮INUTELY錛夎漿鍌ㄨ繖鏍風(fēng)殑姒傚康錛屼互涓簂og4cplus鎻愪緵浜嗗唴閮ㄥ畾鏃跺櫒錛?br />鎰熻寰堝鎬紝鍥犱負(fù)鏃ュ織緋葷粺涓嶅簲璇ヤ富鍔ㄨ褰曪紝鑰宭oging浜嬩歡鎬繪槸搴旇琚姩瑙﹀彂鐨勫晩銆備粩緇嗙湅浜嗘簮浠g爜鍚庢墠鐭ラ亾
榪欓噷鐨?棰戝害"騫朵笉鏄綘鍐欏叆鏂囦歡鐨勯熷害錛屽叾瀹炴槸鍚﹁漿鍌ㄧ殑鏍囧噯騫朵笉渚濊禆浣犲啓鍏ユ枃浠剁殑閫熷害錛岃屾槸渚濊禆浜庡啓鍏?br />鐨勯偅涓鏃跺埢鏄惁婊¤凍浜嗛搴︽潯浠訛紝鍗蟲槸鍚﹁秴榪囦簡浠ュ垎閽熴佸皬鏃躲佸懆銆佹湀涓哄崟浣嶇殑鏃墮棿鍒誨害錛屽鏋滆秴榪囦簡灝卞彟瀛樸?/pre>
鏈儴鍒嗚緇嗕粙緇峫og淇℃伅鐨勫嚑縐嶆枃浠舵搷浣滄柟寮忥紝涓嬮潰灝嗛噸鐐逛粙緇嶄竴涓嬪浣曟湁閫夋嫨鍦版帶鍒秎og淇℃伅鐨勮緭鍑恒?/pre>


]]>寮婧愭棩蹇楃郴緇焞og4cplus(浜?http://m.shnenglu.com/tx7do/articles/11719.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:50:00 GMThttp://m.shnenglu.com/tx7do/articles/11719.htmlhttp://m.shnenglu.com/tx7do/comments/11719.htmlhttp://m.shnenglu.com/tx7do/articles/11719.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11719.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11719.html鏃ュ織緋葷粺鐨勫彟涓涓熀鏈姛鑳藉氨鏄兘澶熻浣跨敤鑰呮寜鐓ц嚜宸辯殑鎰忔効鏉ユ帶鍒朵粈涔堟椂鍊欙紝鍝簺log淇℃伅鍙互杈撳嚭銆?br />濡傛灉鑳藉璁╃敤鎴峰湪浠繪剰鏃跺埢璁劇疆鍏佽杈撳嚭鐨凩ogLevel鐨勪俊鎭氨濂戒簡錛宭og4cplus閫氳繃LogLevelManager銆?br />LogLog銆丗ilter涓夌鏂瑰紡瀹炵幇浜嗕笂榪板姛鑳姐?/pre>
				
### 浼樺厛綰ф帶鍒?###
鍦ㄧ爺絀禠ogLevelManager涔嬪墠錛岄鍏堜粙緇嶄竴涓媗og4cplus涓璴ogger鐨勫瓨鍌ㄦ満鍒訛紝鍦╨og4cplus涓紝鎵鏈?br />logger閮介氳繃涓涓眰嬈″寲鐨勭粨鏋勶紙鍏跺疄鍐呴儴鏄痟ash琛級(jí)鏉ョ粍緇囩殑錛屾湁涓涓猂oot綰у埆鐨刲ogger,鍙互閫?br />榪囦互涓嬫柟娉曡幏鍙栵細(xì)
聽聽聽 Logger root = Logger::getRoot();
聽聽聽
鐢ㄦ埛瀹氫箟鐨刲ogger閮芥湁涓涓悕瀛椾笌涔嬪搴旓紝姣斿錛?/pre>
聽聽聽 Logger test = Logger::getInstance("test");
聽聽聽
鍙互瀹氫箟璇ogger鐨勫瓙logger:
聽聽聽 Logger subTest = Logger::getInstance("test.subtest");
聽聽聽
娉ㄦ剰Root綰у埆鐨刲ogger鍙湁閫氳繃getRoot鏂規(guī)硶鑾峰彇錛孡ogger::getInstance("root")鑾峰緱鐨勬槸瀹冪殑
瀛愬璞¤屽凡銆傛湁浜嗚繖浜涘叿鏈夌埗瀛愬叧緋葷殑logger涔嬪悗鍙垎鍒緗叾LogLevel,姣斿錛?/pre>
root.setLogLevel( ... );
Test.setLogLevel( ... );
subTest.setLogLevel( ... );
				
logger鐨勮繖縐嶇埗瀛愬叧鑱旀т細(xì)浣撶幇鍦ㄤ紭鍏堢駭鎺у埗鏂歸潰錛宭og4cplus灝嗚緭鍑虹殑log淇℃伅鎸夌収LogLevel
錛堜粠浣庡埌楂橈級(jí)鍒嗕負(fù)錛?/pre>
NOT_SET_LOG_LEVEL (聽聽 -1) 錛氭帴鍙楃己鐪佺殑LogLevel錛屽鏋滄湁鐖秎ogger鍒欑戶鎵垮畠鐨凩ogLevel
ALL_LOG_LEVEL聽聽聽聽 (聽聽聽 0) 錛氬紑鏀炬墍鏈塴og淇℃伅杈撳嚭
TRACE_LOG_LEVEL聽聽 (聽聽聽 0) 錛氬紑鏀総race淇℃伅杈撳嚭(鍗矨LL_LOG_LEVEL)
DEBUG_LOG_LEVEL聽聽 (10000) 錛氬紑鏀綿ebug淇℃伅杈撳嚭
INFO_LOG_LEVEL聽聽聽 (20000) 錛氬紑鏀緄nfo淇℃伅杈撳嚭
WARN_LOG_LEVEL聽聽聽 (30000) 錛氬紑鏀緒arning淇℃伅杈撳嚭
ERROR_LOG_LEVEL聽聽 (40000) 錛氬紑鏀緀rror淇℃伅杈撳嚭
FATAL_LOG_LEVEL聽聽 (50000) 錛氬紑鏀緁atal淇℃伅杈撳嚭
OFF_LOG_LEVEL聽聽聽聽 (60000) 錛氬叧闂墍鏈塴og淇℃伅杈撳嚭
LogLevelManager璐熻矗璁劇疆logger鐨勪紭鍏堢駭錛屽悇涓猯ogger鍙互閫氳繃setLogLevel璁劇疆鑷繁鐨勪紭鍏堢駭錛?br />褰撴煇涓猯ogger鐨凩ogLevel璁劇疆鎴怤OT_SET_LOG_LEVEL鏃訛紝璇ogger浼?xì)鐟翩壙鐖秎ogger鐨勪紭鍏堢駭錛屽彟澶栵紝
濡傛灉瀹氫箟浜嗛噸鍚嶇殑澶氫釜logger, 瀵瑰叾涓換浣曚竴涓殑淇敼閮戒細(xì)鍚屾椂鏀瑰彉鍏跺畠logger,鎴戜滑涓句緥璇存槑錛?/pre>
銆栦緥6銆?/pre>
		
#include "log4cplus/logger.h"
#include "log4cplus/consoleappender.h"
#include "log4cplus/loglevel.h"
#include <iostream>
using namespace std;
using namespace log4cplus;
int main()
{
聽聽聽 SharedAppenderPtr _append(new ConsoleAppender());
聽聽聽 _append->setName("test");
聽聽聽 Logger::getRoot().addAppender(_append);
聽聽聽 Logger root = Logger::getRoot();
聽聽聽 Logger test = Logger::getInstance("test");
聽聽聽 Logger subTest = Logger::getInstance("test.subtest");
聽聽聽 LogLevelManager& llm = getLogLevelManager();
聽聽聽 cout << endl << "Before Setting, Default LogLevel" << endl;
聽聽聽 LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()))
聽聽聽 cout << endl << "Setting test.subtest to WARN" << endl;
聽聽聽 subTest.setLogLevel(WARN_LOG_LEVEL);
聽聽聽 LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()))
聽聽聽 cout << endl << "Setting test.subtest to TRACE" << endl;
聽聽聽 test.setLogLevel(TRACE_LOG_LEVEL);
聽聽聽 LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()))
聽聽聽 cout << endl << "Setting test.subtest to NO_LEVEL" << endl;
聽聽聽 subTest.setLogLevel(NOT_SET_LOG_LEVEL);
聽聽聽 LOG4CPLUS_FATAL(root, "root: " << llm.toString(root.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test.subtest: " << llm.toString(subTest.getChainedLogLevel()) << '\n')
聽聽聽 cout << "create a logger test_bak, named \"test_\", too. " << endl;
聽聽聽 Logger test_bak = Logger::getInstance("test");
聽聽聽 cout << "Setting test to INFO, so test_bak also be set to INFO" << endl;
聽聽聽 test.setLogLevel(INFO_LOG_LEVEL);
聽聽聽 LOG4CPLUS_FATAL(root, "test: " << llm.toString(test.getChainedLogLevel()))
聽聽聽 LOG4CPLUS_FATAL(root, "test_bak: " << llm.toString(test_bak.getChainedLogLevel()))
聽聽聽 return 0;
}
杈撳嚭緇撴灉錛?/pre>
		
Before Setting, Default LogLevel
FATAL - root: DEBUG
FATAL - test: DEBUG
FATAL - test.subtest: DEBUG
Setting test.subtest to WARN
FATAL - root: DEBUG
FATAL - test: DEBUG
FATAL - test.subtest: WARN
Setting test.subtest to TRACE
FATAL - root: DEBUG
FATAL - test: TRACE
FATAL - test.subtest: WARN
Setting test.subtest to NO_LEVEL
FATAL - root: DEBUG
FATAL - test: TRACE
FATAL - test.subtest: TRACE
create a logger test_bak, named "test_", too.
Setting test to INFO, so test_bak also be set to INFO
FATAL - test: INFO
FATAL - test_bak: INFO
				
涓嬮潰鐨勪緥瀛愭紨紺轟簡濡備綍閫氳繃璁劇疆LogLevel鏉ユ帶鍒剁敤鎴風(fēng)殑log淇℃伅杈撳嚭錛?/pre>
銆栦緥7銆?/pre>
		
#include "log4cplus/logger.h"
#include "log4cplus/consoleappender.h"
#include "log4cplus/loglevel.h"
#include <iostream>
using namespace std;
using namespace log4cplus;
void ShowMsg(void)
{
聽聽聽 LOG4CPLUS_TRACE(Logger::getRoot(),"info")
聽聽聽 LOG4CPLUS_DEBUG(Logger::getRoot(),"info")
聽聽聽 LOG4CPLUS_INFO(Logger::getRoot(),"info")
聽聽聽 LOG4CPLUS_WARN(Logger::getRoot(),"info")
聽聽聽 LOG4CPLUS_ERROR(Logger::getRoot(),"info")
聽聽聽 LOG4CPLUS_FATAL(Logger::getRoot(),"info")
}
int main()
{
聽聽聽 SharedAppenderPtr _append(new ConsoleAppender());
聽聽聽 _append->setName("test");
聽聽聽 _append->setLayout(std::auto_ptr(new TTCCLayout()));
聽聽聽 Logger root = Logger::getRoot();
聽聽聽 root.addAppender(_append);
聽聽聽 cout << endl << "all-log allowed" << endl;
聽聽聽 root.setLogLevel(ALL_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "trace-log and above allowed" << endl;
聽聽聽 root.setLogLevel(TRACE_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "debug-log and above allowed" << endl;
聽聽聽 root.setLogLevel(DEBUG_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "info-log and above allowed" << endl;
聽聽聽 root.setLogLevel(INFO_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "warn-log and above allowed" << endl;
聽聽聽 root.setLogLevel(WARN_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "error-log and above allowed" << endl;
聽聽聽 root.setLogLevel(ERROR_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "fatal-log and above allowed" << endl;
聽聽聽 root.setLogLevel(FATAL_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 cout << endl << "log disabled" << endl;
聽聽聽 root.setLogLevel(OFF_LOG_LEVEL);
聽聽聽 ShowMsg();
聽聽聽 return 0;
}
杈撳嚭緇撴灉錛?/pre>
		
all-log allowed
10-17-04 10:11:40,587 [1075298944] TRACE root <> - info
10-17-04 10:11:40,590 [1075298944] DEBUG root <> - info
10-17-04 10:11:40,591 [1075298944] INFO root <> - info
10-17-04 10:11:40,591 [1075298944] WARN root <> - info
10-17-04 10:11:40,592 [1075298944] ERROR root <> - info
10-17-04 10:11:40,592 [1075298944] FATAL root <> - info
trace-log and above allowed
10-17-04 10:11:40,593 [1075298944] TRACE root <> - info
10-17-04 10:11:40,593 [1075298944] DEBUG root <> - info
10-17-04 10:11:40,594 [1075298944] INFO root <> - info
10-17-04 10:11:40,594 [1075298944] WARN root <> - info
10-17-04 10:11:40,594 [1075298944] ERROR root <> - info
10-17-04 10:11:40,594 [1075298944] FATAL root <> - info
debug-log and above allowed
10-17-04 10:11:40,595 [1075298944] DEBUG root <> - info
10-17-04 10:11:40,595 [1075298944] INFO root <> - info
10-17-04 10:11:40,596 [1075298944] WARN root <> - info
10-17-04 10:11:40,596 [1075298944] ERROR root <> - info
10-17-04 10:11:40,596 [1075298944] FATAL root <> - info
info-log and above allowed
10-17-04 10:11:40,597 [1075298944] INFO root <> - info
10-17-04 10:11:40,597 [1075298944] WARN root <> - info
10-17-04 10:11:40,597 [1075298944] ERROR root <> - info
10-17-04 10:11:40,598 [1075298944] FATAL root <> - info
warn-log and above allowed
10-17-04 10:11:40,598 [1075298944] WARN root <> - info
10-17-04 10:11:40,598 [1075298944] ERROR root <> - info
10-17-04 10:11:40,599 [1075298944] FATAL root <> - info
error-log and above allowed
10-17-04 10:11:40,599 [1075298944] ERROR root <> - info
10-17-04 10:11:40,600 [1075298944] FATAL root <> - info
fatal-log and above allowed
10-17-04 10:11:40,600 [1075298944] FATAL root <> - info
log disabled
鐢ㄦ埛涔熷彲浠ヨ嚜琛屽畾涔塋ogLevel錛屾搷浣滄瘮杈冪畝鍗曪紝棣栧厛瑕佸畾涔塋EVEL鍊鹼紝姣斿HELLO_LOG_LEVEL瀹氫箟濡備笅錛?/pre>
		
/* DEBUG_LOG_LEVEL聽 < HELLO_LOG_LEVEL < INFO_LOG_LEVEL */
const LogLevel HELLO_LOG_LEVEL = 15000;
鐒跺悗瀹氫箟浠ヤ笅瀹忓嵆鍙細(xì)
/* define MACRO LOG4CPLUS_HELLO */
#define LOG4CPLUS_HELLO(logger, logEvent) \
聽聽聽 if(logger.isEnabledFor(HELLO_LOG_LEVEL)) { \
聽聽聽聽聽聽聽 log4cplus::tostringstream _log4cplus_buf; \
聽聽聽聽聽聽聽 _log4cplus_buf << logEvent; \
聽logger.forcedLog(HELLO_LOG_LEVEL, _log4cplus_buf.str(), __FILE__, __LINE__); \
聽聽聽 }
涓嶈繃log4cplus娌℃湁鎻愪緵緇欑敤鎴蜂竴涓帴鍙f潵瀹炵幇LEVEL鍊間笌瀛楃涓茬殑杞崲錛屾墍浠ュ綋甯︽牸寮忚緭鍑篖ogLevel瀛楃
涓叉椂鍊欎細(xì)鏄劇ず"UNKNOWN"錛?涓嶅鐞嗘兂銆傛瘮濡傜敤TTCCLayout鎺у埗杈撳嚭鐨勭粨鏋滃彲鑳戒細(xì)濡備笅鎵紺猴細(xì)
10-17-04 11:17:51,124 [1075298944] UNKNOWN root <> - info
鑰屼笉鏄湡鏈涚殑浠ヤ笅緇撴灉錛?br />10-17-04 11:17:51,124 [1075298944] HELLO root <> - info
瑕佹兂瀹炵幇絎簩縐嶇粨鏋滐紝鎸夌収log4cplus鐜版湁鐨勬帴鍙f満鍒訛紝鍙兘鏀瑰叾婧愪唬鐮佸悗閲嶆柊緙栬瘧錛屾柟娉曟槸鍦╨oglevel.cxx
涓姞鍏ワ細(xì)
#define _HELLO_STRING LOG4CPLUS_TEXT("HELLO")
鐒跺悗淇敼log4cplus::tstring聽 defaultLogLevelToStringMethod(LogLevel ll)鍑芥暟錛屽鍔犱竴涓垽鏂細(xì)
case HELLO_LOG_LEVEL:聽聽聽 return _HELLO_STRING;
閲嶆柊緙栬瘧log4cplus婧愪唬鐮佸悗鐢熸垚搴撴枃浠訛紝鍐嶄嬌鐢ㄦ椂鍗沖彲瀹炵幇婊℃剰鏁堟灉銆?/pre>
		
				
### 璋冭瘯妯″紡 ###
鍗抽氳繃loglog鏉ユ帶鍒惰緭鍑鴻皟璇曘佽鍛婃垨閿欒淇℃伅錛岃渚?錛岃繖閲屼笉鍐嶈禈榪般?/pre>
		
### 鍩轟簬鑴氭湰閰嶇疆鏉ヨ繃婊og淇℃伅 ###
闄や簡閫氳繃紼嬪簭瀹炵幇瀵筶og鐜鐨勯厤緗箣澶栵紝log4cplus閫氳繃PropertyConfigurator綾誨疄鐜頒簡鍩轟簬鑴氭湰閰嶇疆鐨勫姛鑳姐?br />閫氳繃鑴氭湰鍙互瀹屾垚瀵筶ogger銆乤ppender鍜宭ayout鐨勯厤緗紝鍥犳鍙互瑙e喅鎬庢牱杈撳嚭錛岃緭鍑哄埌鍝噷鐨勯棶棰橈紝鎴戝皢鍦?br />鍏ㄦ枃鐨勬渶鍚庝竴閮ㄥ垎涓彁鍒板綰跨▼鐜涓浣曞埄鐢ㄨ剼鏈厤緗潵閰嶅悎瀹炵幇鎬ц兘嫻嬭瘯錛屾湰鑺傚皢閲嶇偣浠嬬粛鍩鴻剼鏈疄鐜拌繃
婊og淇℃伅鐨勫姛鑳姐?/pre>
棣栧厛綆鍗曚粙緇嶄竴涓嬭剼鏈殑璇硶瑙勫垯錛?/pre>
		
鍖呮嫭Appender鐨勯厤緗娉曞拰logger鐨勯厤緗娉曪紝鍏朵腑錛?/pre>
		
1.Appender鐨勯厤緗娉?
錛?錛夎緗悕縐幫細(xì)
/*璁劇疆鏂規(guī)硶*/
log4cplus.appender.appenderName=fully.qualified.name.of.appender.class
渚嬪錛堝垪涓句簡鎵鏈夊彲鑳界殑Appender錛屽叾涓璖ocketAppender鍚庨潰浼?xì)璁插垘图?jí)錛?br />log4cplus.appender.append_1=log4cplus::ConsoleAppender
log4cplus.appender.append_2=log4cplus::FileAppender
log4cplus.appender.append_3=log4cplus::RollingFileAppender
log4cplus.appender.append_4=log4cplus::DailyRollingFileAppender
log4cplus.appender.append_4=log4cplus::SocketAppender
錛?錛夎緗瓼ilter錛?/pre>
		
鍖呮嫭閫夋嫨榪囨護(hù)鍣ㄥ拰璁劇疆榪囨護(hù)鏉′歡錛屽彲閫夋嫨鐨勮繃婊ゅ櫒鍖呮嫭錛歀ogLevelMatchFilter銆丩ogLevelRangeFilter銆?br />鍜孲tringMatchFilter錛?/pre>
		
瀵筁ogLevelMatchFilter鏉ヨ錛岃繃婊ゆ潯浠跺寘鎷琇ogLevelToMatch鍜孉cceptOnMatch錛坱rue|false錛夛紝 鍙湁
褰搇og淇℃伅鐨凩ogLevel鍊間笌LogLevelToMatch鐩稿悓錛屼笖AcceptOnMatch涓簍rue鏃舵墠浼?xì)鍖归厤銆?/pre>
LogLevelRangeFilter鏉ヨ錛岃繃婊ゆ潯浠跺寘鎷琇ogLevelMin銆丩ogLevelMax鍜孉cceptOnMatch錛屽彧鏈夊綋log淇℃伅
鐨凩ogLevel鍦↙ogLevelMin銆丩ogLevelMax涔嬮棿鍚屾椂AcceptOnMatch涓簍rue鏃舵墠浼?xì)鍖归厤銆?/pre>
瀵筍tringMatchFilter鏉ヨ錛岃繃婊ゆ潯浠跺寘鎷琒tringToMatch鍜孉cceptOnMatch錛屽彧鏈夊綋log淇℃伅鐨凩ogLevel鍊?br />涓嶴tringToMatch瀵瑰簲鐨凩ogLevel鍊間笌鐩稿悓錛?涓擜cceptOnMatch涓簍rue鏃朵細(xì)鍖歸厤銆?/pre>
		
				
榪囨護(hù)鏉′歡澶勭悊鏈哄埗綾諱技浜嶪PTABLE鐨凴esponsibility chain錛岋紙鍗沖厛deny銆佸啀allow錛変笉榪囨墽琛岄『搴忓垰濂界浉鍙嶏紝
鍚庡啓鐨勬潯浠朵細(xì)琚厛鎵ц錛屾瘮濡傦細(xì)
log4cplus.appender.append_1.filters.1=log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.append_1.filters.1.LogLevelToMatch=TRACE
log4cplus.appender.append_1.filters.1.AcceptOnMatch=true
#log4cplus.appender.append_1.filters.2=log4cplus::spi::DenyAllFilter
浼?xì)棣栧厛鎵цfilters.2鐨勮繃婊ゆ潯浠訛紝鍏抽棴鎵鏈夎繃婊ゅ櫒錛岀劧鍚庢墽琛宖ilters.1錛屼粎鍖歸厤TRACE淇℃伅銆?/pre>
		
錛?錛夎緗甃ayout
鍙互閫夋嫨涓嶈緗乀TCCLayout銆佹垨PatternLayout
濡傛灉涓嶈緗紝浼?xì)杈撳嚭绠鍗曟牸寮忕殑log淇℃伅銆?/pre>
		
璁劇疆TTCCLayout濡備笅鎵紺猴細(xì)
log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout
璁劇疆PatternLayout濡備笅鎵紺猴細(xì)
log4cplus.appender.append_1.layout=log4cplus::PatternLayout
log4cplus.appender.append_1.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S,%Q} [%t] %-5p - %m%n
				
2.logger鐨勯厤緗娉?/pre>
鍖呮嫭rootLogger鍜宯on-root logger銆?/pre>
		
瀵逛簬rootLogger鏉ヨ錛?br />log4cplus.rootLogger=[LogLevel], appenderName, appenderName, ...
瀵逛簬non-root logger鏉ヨ錛?br />log4cplus.logger.logger_name=[LogLevel|INHERITED], appenderName, appenderName, ...
				
鑴氭湰鏂瑰紡浣跨敤璧鋒潵闈炲父綆鍗曪紝鍙棣栧厛鍔犺澆閰嶇疆鍗沖彲錛坲rconfig.properties鏄嚜琛屽畾涔夌殑閰嶇疆鏂囦歡錛夛細(xì)
PropertyConfigurator::doConfigure("urconfig.properties");
				
涓嬮潰鎴戜滑閫氳繃渚嬪瓙浣撲細(xì)涓涓媗og4cplus寮哄ぇ鐨勫熀浜庤剼鏈繃婊og淇℃伅鐨勫姛鑳姐?/pre>
				
銆栦緥8銆?/pre>
/*
聽*聽聽聽 urconfig.properties
聽*/
log4cplus.rootLogger=TRACE, ALL_MSGS, TRACE_MSGS, DEBUG_INFO_MSGS, FATAL_MSGS
log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender
log4cplus.appender.ALL_MSGS.File=all_msgs.log
log4cplus.appender.ALL_MSGS.layout=log4cplus::TTCCLayout
log4cplus.appender.TRACE_MSGS=log4cplus::RollingFileAppender
log4cplus.appender.TRACE_MSGS.File=trace_msgs.log
log4cplus.appender.TRACE_MSGS.layout=log4cplus::TTCCLayout
log4cplus.appender.TRACE_MSGS.filters.1=log4cplus::spi::LogLevelMatchFilter
log4cplus.appender.TRACE_MSGS.filters.1.LogLevelToMatch=TRACE
log4cplus.appender.TRACE_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.TRACE_MSGS.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.DEBUG_INFO_MSGS=log4cplus::RollingFileAppender
log4cplus.appender.DEBUG_INFO_MSGS.File=debug_info_msgs.log
log4cplus.appender.DEBUG_INFO_MSGS.layout=log4cplus::TTCCLayout
log4cplus.appender.DEBUG_INFO_MSGS.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMin=DEBUG
log4cplus.appender.DEBUG_INFO_MSGS.filters.1.LogLevelMax=INFO
log4cplus.appender.DEBUG_INFO_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.DEBUG_INFO_MSGS.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.FATAL_MSGS=log4cplus::RollingFileAppender
log4cplus.appender.FATAL_MSGS.File=fatal_msgs.log
log4cplus.appender.FATAL_MSGS.layout=log4cplus::TTCCLayout
log4cplus.appender.FATAL_MSGS.filters.1=log4cplus::spi::StringMatchFilter
log4cplus.appender.FATAL_MSGS.filters.1.StringToMatch=FATAL
log4cplus.appender.FATAL_MSGS.filters.1.AcceptOnMatch=true
log4cplus.appender.FATAL_MSGS.filters.2=log4cplus::spi::DenyAllFilter
				
/*
聽*聽聽聽 main.cpp
聽*/
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/helpers/stringhelper.h>
using namespace log4cplus;
static Logger logger = Logger::getInstance("log");
void printDebug()
{
聽聽聽 LOG4CPLUS_TRACE_METHOD(logger, "::printDebug()");
聽聽聽 LOG4CPLUS_DEBUG(logger, "This is a DEBUG message");
聽聽聽 LOG4CPLUS_INFO(logger, "This is a INFO message");
聽聽聽 LOG4CPLUS_WARN(logger, "This is a WARN message");
聽聽聽 LOG4CPLUS_ERROR(logger, "This is a ERROR message");
聽聽聽 LOG4CPLUS_FATAL(logger, "This is a FATAL message");
}
int main()
{
聽聽聽 Logger root = Logger::getRoot();
聽聽聽 PropertyConfigurator::doConfigure("urconfig.properties");
聽聽聽 printDebug();
聽聽聽 return 0;
}
榪愯緇撴灉錛?/pre>
		
1. all_msgs.log
10-17-04 14:55:25,858 [1075298944] TRACE log <> - ENTER: ::printDebug()
10-17-04 14:55:25,871 [1075298944] DEBUG log <> - This is a DEBUG message
10-17-04 14:55:25,873 [1075298944] INFO log <> - This is a INFO message
10-17-04 14:55:25,873 [1075298944] WARN log <> - This is a WARN message
10-17-04 14:55:25,874 [1075298944] ERROR log <> - This is a ERROR message
10-17-04 14:55:25,874 [1075298944] FATAL log <> - This is a FATAL message
10-17-04 14:55:25,875 [1075298944] TRACE log <> - EXIT:聽 ::printDebug()
2. trace_msgs.log
10-17-04 14:55:25,858 [1075298944] TRACE log <> - ENTER: ::printDebug()
10-17-04 14:55:25,875 [1075298944] TRACE log <> - EXIT:聽 ::printDebug()
3. debug_info_msgs.log
10-17-04 14:55:25,871 [1075298944] DEBUG log <> - This is a DEBUG message
10-17-04 14:55:25,873 [1075298944] INFO log <> - This is a INFO message
4. fatal_msgs.log
10-17-04 14:55:25,874 [1075298944] FATAL log <> - This is a FATAL message
鏈儴鍒嗚緇嗕粙緇嶄簡濡備綍鏈夐夋嫨鍦版帶鍒秎og淇℃伅鐨勮緭鍑猴紝鏈鍚庝竴閮ㄥ垎鎴戜滑灝嗕粙緇嶄竴涓嬪綰跨▼銆?br />鍜孋/S妯″紡涓嬭濡備綍鎿嶄綔錛岄『渚挎彁涓涓婲DC鐨勬蹇點(diǎn)?/pre>


]]>寮婧愭棩蹇楃郴緇焞og4cplus(鍏?http://m.shnenglu.com/tx7do/articles/11720.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:50:00 GMThttp://m.shnenglu.com/tx7do/articles/11720.htmlhttp://m.shnenglu.com/tx7do/comments/11720.htmlhttp://m.shnenglu.com/tx7do/articles/11720.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11720.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11720.htmllog4cplus鍦ㄥ緢澶氭柟闈㈠仛鐨勯兘寰堝嚭鑹詫紝浣嗘槸浣跨敤榪囩▼鏈変簺鍦版柟鎰熻涓嶇埥銆傚湪緇х畫鍚規(guī)崸涔嬪墠鎴戝厛鎶婁笉鐖戒箣澶?br />紼嶅井鎻愪竴鎻愶紝鐒跺悗緇х畫浠嬬粛鍏充簬綰跨▼鍜屽鎺ュ瓧鐨勭煡璇嗐?br />

### 涓浜涘彲浠ユ敼榪涗箣澶?###
1. 鐢ㄦ埛鑷畾涔塋ogLevel鐨勫疄鐜版満鍒朵笉澶熷紑鏀?/pre>
		
鍦ㄧ浜旂瘒涓浘緇忎粙緇嶈繃濡備綍瀹炵幇鐢ㄦ埛鑷瀹氫箟LogLevel錛屼負(fù)浜嗗疄鐜版瘮杈冪悊鎯崇殑鏁堟灉錛岀敋鑷寵繕闇瑕佹敼log4cplus
鐨勬簮浠g爜銆傦細(xì)錛?/pre>
2. 鐢熸垚Logger瀵硅薄鐨勬満鍒跺彲浠ユ敼榪?/pre>
		
鎴戝湪浣跨敤鏃跺欙紝緇忓父闇瑕佸湪涓嶅悓鐨勬枃浠躲佸嚱鏁頒腑鎿嶄綔鍚屼竴涓猯ogger錛岃櫧鐒秎og4cplus瀹炵幇浜嗘爲(wèi)鐘跺瓨鍌ㄤ互鍙?qiáng)鏍规?br />鍚嶇О鐢熸垚Logger錛屽嵈娌℃湁鍏呭垎鍒╃敤榪欐牱鐨勭壒鐐圭‘淇濆悓涓涓悕縐板搴旂殑logger瀵硅薄鐨勫敮涓鎬э紝姣斿浠ヤ笅浠g爜錛?/pre>
		
聽聽聽 ... ...
聽聽聽
聽聽聽 Logger logger1 = Logger::getInstance("test");
聽聽聽 Logger logger2 = Logger::getInstance("test");
聽聽聽 Logger * plogger1 = &logger1;
聽聽聽 Logger * plogger2 = &logger2;
聽聽聽 std::cout << "plogger1: " << plogger1 << std::endl << "plogger2: " << plogger2 << std::endl;
聽聽聽
聽聽聽 ... ...
聽聽聽
聽聽聽
榪愯緇撴灉錛?/pre>
plogger1: 0xbfffe5a0
plogger2: 0xbfffe580
				
浠庣粨鏋滃彲浠ョ湅鍑猴紝鏄庢槑鏄悓涓涓狶ogger錛屼絾姣忔璋冪敤閮戒細(xì)浜х敓涓涓狶ogger鍓湰錛岃櫧鐒剁粨鏋滄槸姝g‘鐨勶紙鍥犱負(fù)灝嗗瓨
鍌ㄥ拰鎿嶄綔鍒嗗紑浜嗭級(jí)錛屼絾鏄祫婧愭湁浜涙氮璐癸紝鎴戠湅浜嗕竴涓媗og4cplus鐨勪唬鐮侊紝鍏跺疄鍙互鎸夌収濡備笅鏂瑰紡瀹炵幇錛堢ず鎰忔?br />鐨勶級(jí)錛?/pre>
#include <iostream>
#include <string>
#include <map>
/* forward declaration */
class Logger;
class LoggerContainer
{
public:
聽聽聽 ~LoggerContainer();
聽聽聽 Logger * getinstance(const std::string & strLogger);
private:
聽聽聽 typedef std::map<:string,> LoggerMap;
聽聽聽 LoggerMap loggerPtrs;
};
class Logger
{
public:
聽聽聽聽 Logger() {std::cout << "ctor of Logger " << std::endl; }
聽聽聽 ~Logger() {std::cout << "dtor of Logger " << std::endl; }
聽聽聽 static Logger * getInstance( const std::string & strLogger)
聽聽聽 {
聽聽聽聽聽聽聽 static LoggerContainer defaultLoggerContainer;
聽聽聽聽聽聽聽 return defaultLoggerContainer.getinstance(strLogger);
聽聽聽 }
};
LoggerContainer::~LoggerContainer()
{
聽聽聽 /* release all ptr in LoggerMap */
聽聽聽 LoggerMap::iterator itr = loggerPtrs.begin();
聽聽聽 for( ; itr != loggerPtrs.end(); ++itr )
聽{
聽聽聽聽 delete (*itr).second;
聽}
}
Logger * LoggerContainer::getinstance(const std::string & strLogger)
{
聽聽 LoggerMap::iterator itr = loggerPtrs.find(strLogger);
聽聽 if(itr != loggerPtrs.end())
聽聽 {
聽聽聽聽聽聽 /* logger exist, just return it */
聽聽聽聽聽聽 return (*itr).second;
聽聽 }
聽聽 else
聽聽 {
聽聽聽聽聽聽 /* return a new logger */
聽聽聽聽聽聽 Logger * plogger = new Logger();
聽聽聽聽聽聽 loggerPtrs.insert(std::make_pair(strLogger, plogger));
聽聽聽聽聽聽 return plogger;
聽聽 }
}
int main()
{
聽聽聽 Logger * plogger1 = Logger::getInstance("test");
聽聽聽 Logger * plogger2 = Logger::getInstance("test");
聽聽聽 std::cout << "plogger1: " << plogger1 << std::endl << "plogger2: " << plogger2 << std::endl;
聽聽聽 return 0;
}
				
榪愯緇撴灉錛?/pre>
ctor of Logger
plogger1: 0x804fc30
plogger2: 0x804fc30
dtor of Logger
榪欓噷鐨凩oggerContainer鐩稿綋浜巐og4cplus涓殑Hierarchy綾伙紝緇撴灉鍙互鐪嬪嚭錛岄氳繃鍚屼竴涓悕縐板彲浠ヨ幏鍙栫浉鍚岀殑
Logger瀹炰緥銆?/pre>
				
榪樻湁涓浜涘皬姣涚梾姣斿RollingFileAppender鍜孌ailyRollingFileAppender鐨勫弬鏁拌緭鍏ラ『搴忓彲浠ヨ皟鏁存垚緇熶竴鏂瑰紡
絳夌瓑錛屽氨涓嶇粏璇翠簡銆?/pre>
鏈儴鍒嗘彁鍒頒簡浣跨敤log4cplus鏃跺欐劅瑙変笉鐖界殑鍦版柟錛屾渶鍚庝竴閮ㄥ垎灝嗕粙緇嶄竴涓媗og4cplus涓嚎紼嬪拰濂楁帴瀛楀疄鐜版儏鍐?br />


]]>寮婧愭棩蹇楃郴緇焞og4cplus(浜?http://m.shnenglu.com/tx7do/articles/11716.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:49:00 GMThttp://m.shnenglu.com/tx7do/articles/11716.htmlhttp://m.shnenglu.com/tx7do/comments/11716.htmlhttp://m.shnenglu.com/tx7do/articles/11716.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11716.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11716.html闃呰鍏ㄦ枃

]]>
寮婧愭棩蹇楃郴緇焞og4cplus(涓?http://m.shnenglu.com/tx7do/articles/11717.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:49:00 GMThttp://m.shnenglu.com/tx7do/articles/11717.htmlhttp://m.shnenglu.com/tx7do/comments/11717.htmlhttp://m.shnenglu.com/tx7do/articles/11717.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11717.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11717.html鏈枃浠嬬粛浜嗕笁縐嶆帶鍒惰緭鍑烘牸寮忕殑甯冨眬綆$悊鍣ㄧ殑姒傚康鍜屼嬌鐢ㄦ儏鍐碉紝閫氳繃鎺屾彙榪欎簺鐭ヨ瘑錛屽彲浠ユ洿鏈夋晥鍦版帶鍒秎og緋葷粺杈撳嚭灝藉彲鑳借創(chuàng)榪戜綘闇姹傜殑淇℃伅鏉ャ?br />

				
### 濡備綍鎺у埗杈撳嚭娑堟伅鐨勬牸寮?###
鍓嶉潰宸茬粡璁茶繃錛宭og4cplus閫氳繃甯冨眬鍣紙Layouts錛夋潵鎺у埗杈撳嚭鐨勬牸寮忥紝log4cplus鎻愪緵浜嗕笁縐嶇被鍨嬬殑Layouts錛?br />鍒嗗埆鏄疭impleLayout銆丳atternLayout銆佸拰TTCCLayout銆傚叾涓細(xì)
1. SimpleLayout
鏄竴縐嶇畝鍗曟牸寮忕殑甯冨眬鍣紝鍦ㄨ緭鍑虹殑鍘熷淇℃伅涔嬪墠鍔犱笂LogLevel鍜屼竴涓?-"銆?/pre>
姣斿浠ヤ笅浠g爜鐗囨錛?/pre>
		
聽聽聽 ... ...
聽聽聽 /* step 1: Instantiate an appender object */
聽聽聽 SharedObjectPtr _append (new ConsoleAppender());
聽聽聽 _append->setName("append for test");
聽聽聽 /* step 2: Instantiate a layout object */
聽聽聽 std::auto_ptr聽 _layout(new log4cplus::SimpleLayout());
聽聽聽 /* step 3: Attach the layout object to the appender */
聽聽聽 _append->setLayout( _layout );
聽聽聽 /* step 4: Instantiate a logger object */
聽聽聽 Logger _logger = Logger::getInstance("test");
聽聽聽 /* step 5: Attach the appender object to the logger聽 */
聽聽聽 _logger.addAppender(_append);
聽聽聽聽 /* log activity */
聽聽聽 LOG4CPLUS_DEBUG(_logger, "This is the simple formatted log message...")
聽聽聽
聽聽聽 ... ...
聽聽聽
聽聽聽
灝嗘墦鍗扮粨鏋滐細(xì)
DEBUG - This is the simple formatted log message...
2. PatternLayout
鏄竴縐嶆湁璇嶆硶鍒嗘瀽鍔熻兘鐨勬ā寮忓竷灞鍣紝涓鎻愯搗妯″紡灝變細(xì)鎯寵搗姝e垯琛ㄨ揪寮忥紝榪欓噷鐨勬ā寮忓拰姝e垯琛ㄨ揪寮忕被浼鹼紝浣嗘槸
榪滄瘮鍚庤呯畝鍗曪紝鑳藉瀵歸瀹氫箟鐨勬爣璇嗙錛堢О涓篶onversion specifiers錛夎繘琛岃В鏋愶紝杞崲鎴愮壒瀹氭牸寮忚緭鍑恒備互涓?br />浠g爜鐗囨婕旂ず浜嗗浣曚嬌鐢≒atternLayout錛?/pre>
聽聽聽 ... ...
聽聽聽 /* step 1: Instantiate an appender object */
聽聽聽 SharedObjectPtr _append (new ConsoleAppender());
聽聽聽 _append->setName("append for test");
聽聽
聽聽聽 /* step 2: Instantiate a layout object */
聽聽聽 std::string pattern = "%d{%m/%d/%y %H:%M:%S}聽 - %m [%l]%n";
聽聽聽 std::auto_ptr _layout(new PatternLayout(pattern));
聽聽聽
聽聽聽 /* step 3: Attach the layout object to the appender */
聽聽聽 _append->setLayout( _layout );
聽聽聽 /* step 4: Instantiate a logger object */
聽聽聽 Logger _logger = Logger::getInstance("test_logger.subtest");
聽聽聽 /* step 5: Attach the appender object to the logger聽 */
聽聽聽 _logger.addAppender(_append);
聽聽聽聽 /* log activity */
聽聽聽 LOG4CPLUS_DEBUG(_logger, "teststr")
聽聽聽
聽聽聽 ... ...
聽聽聽
杈撳嚭緇撴灉錛?br />10/16/04 18:51:25聽 - teststr [main.cpp:51]
鍙互鐪嬪嚭閫氳繃濉啓鐗瑰畾鏍煎紡鐨勬ā寮忓瓧絎︿覆"pattern"錛屽師濮嬩俊鎭鍖呭惈鍒頒竴鍫嗘湁鏍煎紡鐨勪俊鎭綋涓簡錛岃繖灝變嬌寰?br />鐢ㄦ埛鍙互鏍規(guī)嵁鑷韓闇瑕佹潵瀹氬埗鏄劇ず鍐呭銆?pattern"鍙互鍖呭惈鏅氬瓧絎︿覆鍜岄瀹氫箟鐨勬爣璇嗙錛屽叾涓細(xì)
錛?錛夋櫘閫氬瓧絎︿覆錛岃兘澶熻鐩存帴鏄劇ず鐨勪俊鎭?br />錛?錛夐瀹氫箟鏍囪瘑絎︼紝閫氳繃"%"涓庝竴涓垨澶氫釜瀛楃鍏卞悓鏋勬垚棰勫畾涔夌殑鏍囪瘑絎︼紝鑳藉浜х敓鍑虹壒瀹氭牸寮忎俊鎭?/pre>
		
鍏充簬棰勫畾涔夋爣璇嗙錛宭og4cplus鏂囨。涓彁渚涗簡璇︾粏鐨勬牸寮忚鏄庯紝鎴戞瘡縐嶉兘璇曚簡涓涓嬶紝浠ヤ笂榪頒唬鐮佷負(fù)渚嬶紝鏍規(guī)嵁涓嶅悓
鐨刾attern錛屽悇縐嶆秷鎭牸寮忎嬌鐢ㄦ儏鍐靛垪涓懼涓嬶細(xì)
錛?錛?%%"錛岃漿涔変負(fù)%, 鍗籌紝std::string pattern = "%%" 鏃惰緭鍑? "%"
錛?錛?%c"錛岃緭鍑簂ogger鍚嶇О錛屾瘮濡俿td::string pattern ="%c" 鏃惰緭鍑? "test_logger.subtest"錛?br />聽聽聽聽 涔熷彲浠ユ帶鍒秎ogger鍚嶇О鐨勬樉紺哄眰嬈★紝姣斿"%c{1}"鏃惰緭鍑?test_logger"錛屽叾涓暟瀛楄〃紺哄眰嬈°?br />錛?錛?%D"錛屾樉紺烘湰鍦版椂闂達(dá)紝褰搒td::string pattern ="%D" 鏃惰緭鍑?"2004-10-16 18:55:45"錛?d鏄劇ず鏍囧噯鏃墮棿錛?br />聽聽聽聽 鎵浠ュ綋std::string pattern ="%d" 鏃惰緭鍑?"2004-10-16 10:55:45" 錛堝洜涓烘垜浠槸涓?鍖猴紝宸?涓皬鏃跺晩錛夈?br />聽聽聽聽 鍙互閫氳繃%d{...}瀹氫箟鏇磋緇嗙殑鏄劇ず鏍煎紡錛屾瘮濡?d{%H:%M:%s}琛ㄧず瑕佹樉紺哄皬鏃?鍒嗛挓錛氱銆傚ぇ鎷彿涓彲鏄劇ず鐨?br />聽聽聽聽 棰勫畾涔夋爣璇嗙濡備笅錛?br />聽聽聽聽
%a -- 琛ㄧず紺兼嫓鍑狅紝鑻辨枃緙╁啓褰㈠紡錛屾瘮濡?Fri"
%A -- 琛ㄧず紺兼嫓鍑狅紝姣斿"Friday"
%b -- 琛ㄧず鍑犳湀浠斤紝鑻辨枃緙╁啓褰㈠紡錛屾瘮濡?Oct"
%B -- 琛ㄧず鍑犳湀浠斤紝"October"
%c -- 鏍囧噯鐨勬棩鏈燂紜鏃墮棿鏍煎紡錛屽 "Sat Oct 16 18:56:19 2004"
%d -- 琛ㄧず浠婂ぉ鏄繖涓湀鐨勫嚑鍙?1-31)"16"
%H -- 琛ㄧず褰撳墠鏃跺埢鏄嚑鏃?0-23)錛屽 "18"
%I -- 琛ㄧず褰撳墠鏃跺埢鏄嚑鏃?1-12)錛屽 "6"
%j -- 琛ㄧず浠婂ぉ鏄摢涓澶?1-366)錛屽 "290"
%m -- 琛ㄧず鏈湀鏄摢涓鏈?1-12)錛屽 "10"
%M -- 琛ㄧず褰撳墠鏃跺埢鏄摢涓鍒嗛挓(0-59)錛屽 "59"
%p -- 琛ㄧず鐜板湪鏄笂鍗堣繕鏄笅鍗堬紝 AM or PM
%q -- 琛ㄧず褰撳墠鏃跺埢涓縐掗儴鍒?0-999)錛屽 "237"
%Q -- 琛ㄧず褰撳墠鏃跺埢涓甫灝忔暟鐨勬縐掗儴鍒?0-999.999)錛屽 "430.732"
%S -- 琛ㄧず褰撳墠鏃跺埢鐨勫灝戠(0-59)錛屽 "32"
%U -- 琛ㄧず鏈懆鏄粖騫寸殑絎嚑涓ぜ鎷滐紝浠ュ懆鏃ヤ負(fù)絎竴澶╁紑濮嬭綆?0-53)錛屽 "41"
%w -- 琛ㄧず紺兼嫓鍑狅紝(0-6, 紺兼嫓澶╀負(fù)0)錛屽 "6"
%W -- 琛ㄧず鏈懆鏄粖騫寸殑絎嚑涓ぜ鎷滐紝浠ュ懆涓涓虹涓澶╁紑濮嬭綆?0-53)錛屽 "41"
%x -- 鏍囧噯鐨勬棩鏈熸牸寮忥紝濡?"10/16/04"
%X -- 鏍囧噯鐨勬椂闂存牸寮忥紝濡?"19:02:34"
%y -- 涓や綅鏁扮殑騫翠喚(0-99)錛屽 "04"
%Y -- 鍥涗綅鏁扮殑騫翠喚錛屽 "2004"
%Z -- 鏃跺尯鍚嶏紝姣斿 "GMT"
錛?錛?%F"錛岃緭鍑哄綋鍓嶈褰曞櫒鎵鍦ㄧ殑鏂囦歡鍚嶇О錛屾瘮濡俿td::string pattern ="%F" 鏃惰緭鍑? "main.cpp"
錛?錛?%L"錛岃緭鍑哄綋鍓嶈褰曞櫒鎵鍦ㄧ殑鏂囦歡琛屽彿錛屾瘮濡俿td::string pattern ="%L" 鏃惰緭鍑? "51"
錛?錛?%l"錛岃緭鍑哄綋鍓嶈褰曞櫒鎵鍦ㄧ殑鏂囦歡鍚嶇О鍜岃鍙鳳紝姣斿std::string pattern ="%L" 鏃惰緭鍑?
聽聽聽聽 "main.cpp:51"
錛?錛?%m"錛岃緭鍑哄師濮嬩俊鎭紝姣斿std::string pattern ="%m" 鏃惰緭鍑? "teststr"錛屽嵆涓婅堪浠g爜涓?br />聽聽聽聽 LOG4CPLUS_DEBUG鐨勭浜屼釜鍙傛暟錛岃繖縐嶅疄鐜版満鍒跺彲浠ョ‘淇濆師濮嬩俊鎭宓屽叆鍒板甫鏍煎紡鐨勪俊鎭腑銆?br />錛?錛?%n"錛屾崲琛岀錛屾病浠涔堝ソ瑙i噴鐨?br />錛?錛?%p"錛岃緭鍑篖ogLevel錛屾瘮濡俿td::string pattern ="%p" 鏃惰緭鍑? "DEBUG"
錛?0錛?%t"錛岃緭鍑鴻褰曞櫒鎵鍦ㄧ殑綰跨▼ID錛屾瘮濡俿td::string pattern ="%t" 鏃惰緭鍑? "1075298944"
錛?1錛?%x"錛屽祵濂楄瘖鏂笂涓嬫枃NDC (nested diagnostic context) 杈撳嚭錛屼粠鍫嗘爤涓脊鍑轟笂涓嬫枃淇℃伅錛孨DC鍙互鐢ㄥ
聽聽聽聽聽 涓嶅悓婧愮殑log淇℃伅錛堝悓鏃跺湴錛変氦鍙夎緭鍑鴻繘琛屽尯鍒嗭紝鍏充簬NDC鏂歸潰鐨勮緇嗕粙緇嶄細(xì)鍦ㄤ笅鏂囦腑鎻愬埌銆?br />錛?2錛夋牸寮忓榻愶紝姣斿std::string pattern ="%-10m"鏃惰〃紺哄乏瀵歸綈錛屽搴︽槸10錛屾鏃朵細(xì)杈撳嚭"teststr聽聽 "錛屽綋
聽聽聽聽聽 鐒跺叾瀹冪殑鎺у埗瀛楃涔熷彲浠ョ浉鍚岀殑鏂瑰紡鏉ヤ嬌鐢紝姣斿"%-12d"錛?%-5p"絳夌瓑錛堝垰鎺ヨЕlog4cplus鏂囨。鏃惰繕浠ヤ負(fù)
聽聽聽聽聽 "%-5p"鏁翠釜瀛楃涓蹭唬琛↙ogLevel鍛紝鍛靛懙錛夈?/pre>
聽聽聽聽聽 
3. TTCCLayout
鏄湪PatternLayout鍩虹涓婂彂灞曠殑涓縐嶇己鐪佺殑甯︽牸寮忚緭鍑虹殑甯冨眬鍣紝 鍏舵牸寮忕敱鏃墮棿錛岀嚎紼婭D錛孡ogger鍜孨DC 緇?br />鎴愶紙consists of time, thread, Logger and nested diagnostic context information, hence the name錛夛紝
鍥犺屽緱鍚嶏紙鎬庝箞寰楀悕鐨勶紵Logger閲屽摢閲屾湁閭d釜"C"鐨勭緝鍐欏晩錛佸悕瀛楄搗寰楃湡澶熺儌鐨勶紝鎯蟲墎浜猴級(jí)銆傛彁渚涚粰閭d簺鎯蟲樉紺?br />鍏稿瀷鐨勪俊鎭紙涓鑸儏鍐典笅澶熺敤浜嗭級(jí)鍙堟噿寰楅厤緗畃attern鐨勫悓蹇椾滑銆?/pre>
TTCCLayout鍦ㄦ瀯閫犳椂鏈夋満浼?xì)閫夋嫨鏄劇ず鏈湴鏃墮棿鎴朑MT鏃墮棿錛岀己鐪佹槸鎸夌収鏈湴鏃墮棿鏄劇ず錛?br />TTCCLayout::TTCCLayout(bool use_gmtime聽 = false)
浠ヤ笅浠g爜鐗囨婕旂ず浜嗗浣曚嬌鐢═TCCLayout錛?/pre>
		
聽聽聽 ... ...
聽聽聽 /* step 1: Instantiate an appender object */
聽聽聽 SharedObjectPtr _append (new ConsoleAppender());
聽聽聽 _append->setName("append for test");
聽聽聽 /* step 2: Instantiate a layout object */
聽聽聽 std::auto_ptr _layout(new TTCCLayout());
聽聽聽 /* step 3: Attach the layout object to the appender */
聽聽聽 _append->setLayout( _layout );
聽聽聽 /* step 4: Instantiate a logger object */
聽聽聽 Logger _logger = Logger::getInstance("test_logger");
聽聽聽 /* step 5: Attach the appender object to the logger聽 */
聽聽聽 _logger.addAppender(_append);
聽聽聽聽 /* log activity */
聽聽聽 LOG4CPLUS_DEBUG(_logger, "teststr")
聽聽聽
聽聽聽 ... ...
聽聽聽
杈撳嚭緇撴灉錛?br />10-16-04 19:08:27,501 [1075298944] DEBUG test_logger <> - teststr
				
褰撴瀯閫燭TCCLayout瀵硅薄鏃墮夋嫨GMT鏃墮棿鏍煎紡鏃訛細(xì)
聽聽聽 ... ...
聽聽聽
聽聽聽 /* step 2: Instantiate a layout object */
聽聽聽 std::auto_ptr _layout(new TTCCLayout(true));
聽聽聽
聽聽聽 ... ...
聽聽聽
杈撳嚭緇撴灉錛?br />10-16-04 11:12:47,678 [1075298944] DEBUG test_logger <> - teststr
				
鏈枃浠嬬粛浜嗘帶鍒秎og淇℃伅鏍煎紡鐨勭浉鍏崇煡璇嗭紝涓嬩竴閮ㄥ垎灝嗚緇嗕粙緇峫og淇℃伅鐨勫嚑縐嶆枃浠舵搷浣滄柟寮忋?/pre>

]]>寮婧愭棩蹇楃郴緇焞og4cplus(涓)http://m.shnenglu.com/tx7do/articles/11715.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Fri, 25 Aug 2006 20:45:00 GMThttp://m.shnenglu.com/tx7do/articles/11715.htmlhttp://m.shnenglu.com/tx7do/comments/11715.htmlhttp://m.shnenglu.com/tx7do/articles/11715.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/11715.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/11715.htmllog4cplus鏄疌++緙栧啓鐨勫紑婧愮殑鏃ュ織緋葷粺錛屽姛鑳介潪甯稿叏闈紝鐢ㄥ埌鑷繁寮鍙戠殑宸ョ▼涓細(xì)姣旇緝涓撲笟鐨勶紝錛氾級(jí)錛屾湰鏂囦粙緇嶄簡log4cplus鍩烘湰姒傚康錛屼互鍙?qiáng)濡備綍瀹夎锛岄厤缃?

				
### 綆浠?###
log4cplus鏄疌++緙栧啓鐨勫紑婧愮殑鏃ュ織緋葷粺錛屽墠韜槸java緙栧啓鐨刲og4j緋葷粺.鍙桝pache Software License
淇濇姢銆備綔鑰呮槸Tad E. Smith銆俵og4cplus鍏鋒湁綰跨▼瀹夊叏銆佺伒媧匯佷互鍙?qiáng)澶毦_掑害鎺у埗鐨勭壒鐐癸紝閫氳繃灝嗕俊鎭垝鍒?br>浼樺厛綰т嬌鍏跺彲浠ラ潰鍚戠▼搴忚皟璇曘佽繍琛屻佹祴璇曘佸拰緇存姢絳夊叏鐢熷懡鍛ㄦ湡錛?浣犲彲浠ラ夋嫨灝嗕俊鎭緭鍑哄埌灞忓箷銆佹枃浠躲?br>NT event log銆佺敋鑷蟲槸榪滅▼鏈嶅姟鍣紱閫氳繃鎸囧畾絳栫暐瀵規(guī)棩蹇楄繘琛屽畾鏈熷浠界瓑絳夈?/pre>
 
### 涓嬭澆 ###
鏈鏂扮殑log4cplus鍙互浠庝互涓嬬綉鍧涓嬭澆 http://log4cplus.sourceforge.net
鏈枃浣跨敤鐨勭増鏈負(fù)錛?.0.2
 
### 瀹夎 ###
 
1. linux涓嬪畨瑁?/pre>
tar xvzf log4cplus-x.x.x.tar.gz
cd log4cplus
-x.x.x.
/configure --prefix=/where/to/install
make
make install

榪欓噷鎴戦噰鐢ㄧ己鐪佸畨瑁呰礬寰勶細(xì)/usr/local錛屼笅鏂囧鏃犵壒鍒鏄庯紝鍧囦互姝よ礬寰勪負(fù)鍑嗐?/pre>
 
2. windows涓嬪畨瑁?/pre>
涓嶉渶瑕佸畨瑁咃紝鏈変竴涓猰svc6瀛樻斁鍖呮嫭婧愪唬鐮佸拰鐢ㄤ緥鍦ㄥ唴鐨勫紑鍙戝伐紼嬶紙for VC6 only錛夛紝浣跨敤涔嬪墠璇峰厛緙栬瘧
"log4cplus_dll class"宸ョ▼鐢熸垚dll錛屾垨鑰呯紪璇?log4cplus_static class"宸ョ▼鐢熸垚lib.
 
### 浣跨敤鍓嶇殑閰嶇疆 ###
1. linux涓嬬殑閰嶇疆
紜繚浣犵殑Makefile涓寘鍚?/usr/local/lib/liblog4cplus.a錛堥潤鎬佸簱錛夋垨  -llog4cplus錛堝姩鎬佸簱錛夊嵆鍙紝
澶存枃浠跺湪/usr/local/include/log4cplus鐩綍涓嬨傚浜庡姩鎬佸簱錛岃鎯蟲甯鎬嬌鐢紝榪樺緱灝嗗簱瀹夎璺緞鍔犲叆鍒?br>LD_LIBRARY_PATH 涓紝鎴戜竴鑸槸榪欐牱鍋氱殑錛氫互綆$悊鍛樿韓浠界櫥褰曪紝鍦?etc/ld.so.conf涓姞鍏ュ畨瑁呰礬寰勶紝榪欓噷
鏄?usr/local/lib錛岀劧鍚庢墽琛宭dconfig浣胯緗敓鏁堝嵆鍙?/pre>
2. windows涓嬬殑閰嶇疆
灝?log4cplus_dll class"宸ョ▼鎴?log4cplus_static class"宸ョ▼鐨刣sp 鏂囦歡鎻掑叆鍒頒綘鐨勫伐紼嬩腑錛屾垨鑰呯洿鎺?br>鎶婁袱涓伐紼嬬紪璇戠敓鎴愮殑搴撲互鍙?qiáng)澶存枃錃g鎵鍦ㄧ洰褰曟斁鍒頒綘鐨勫伐紼嬬殑鎼滅儲(chǔ)璺緞涓紝濡傛灉浣犱嬌鐢ㄩ潤鎬佸簱錛岃鍦ㄤ綘鐨勫伐紼嬩腑
"project/setting/C++"鐨刾reprocessor definitions涓姞鍏OG4CPLUS_STATIC銆?/pre>
 
### 鏋勬垚瑕佺礌浠嬬粛 ###
铏界劧鍔熻兘寮哄ぇ錛屽簲璇ヨlog4cplus鐢ㄨ搗鏉ヨ繕鏄瘮杈冨鏉傜殑錛屼負(fù)浜嗘洿濂藉湴浣跨敤瀹冿紝鍏堜粙緇嶄竴涓嬪畠鐨勫熀鏈绱犮?/pre>
Layouts      錛氬竷灞鍣紝鎺у埗杈撳嚭娑堟伅鐨勬牸寮?
Appenders    錛氭寕鎺ュ櫒錛屼笌甯冨眬鍣ㄧ揣瀵嗛厤鍚堬紝灝嗙壒瀹氭牸寮忕殑娑堟伅杈撳嚭鍒版墍鎸傛帴鐨勮澶囩粓绔?br>               錛堝灞忓箷錛屾枃浠剁瓑絳?銆?br>Logger       錛氳褰曞櫒錛屼繚瀛樺茍璺熻釜瀵硅薄鏃ュ織淇℃伅鍙樻洿鐨勫疄浣擄紝褰撲綘闇瑕佸涓涓璞¤繘琛?br>               璁板綍鏃訛紝灝遍渶瑕佺敓鎴愪竴涓猯ogger銆?br>Categories   錛氬垎綾誨櫒錛屽眰嬈″寲錛坔ierarchy錛夌殑緇撴瀯錛岀敤浜庡琚褰曚俊鎭殑鍒嗙被錛屽眰嬈′腑
               姣忎竴涓妭鐐圭淮鎶や竴涓猯ogger鐨勬墍鏈変俊鎭?br>Priorities   錛氫紭鍏堟潈錛屽寘鎷琓RACE, DEBUG, INFO, WARNING, ERROR, FATAL銆?/pre>
				
鏈枃浠嬬粛浜唋og4cplus鍩烘湰姒傚康錛屼互鍙?qiáng)濡備綍瀹夎锛岄厤缃Q屼笅涓綃囧皢閫氳繃渚嬪瓙浠嬬粛濡備綍浣跨敤log4cplus銆?/pre>

]]> Linux Socket緙栫▼瀹炰緥(涓涓狧ello World紼嬪簭) http://m.shnenglu.com/tx7do/articles/5966.html鏉ㄧ布娉?/dc:creator>鏉ㄧ布娉?/author>Thu, 20 Apr 2006 09:49:00 GMThttp://m.shnenglu.com/tx7do/articles/5966.htmlhttp://m.shnenglu.com/tx7do/comments/5966.htmlhttp://m.shnenglu.com/tx7do/articles/5966.html#Feedback0http://m.shnenglu.com/tx7do/comments/commentRss/5966.htmlhttp://m.shnenglu.com/tx7do/services/trackbacks/5966.html闃呰鍏ㄦ枃

]]>
濡備綍鍦╨inux涓嬫嫻嬪唴瀛樻硠婕?/title><link>http://m.shnenglu.com/tx7do/articles/5964.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:45:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/articles/5964.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/5964.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/articles/5964.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/5964.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/5964.html</trackback:ping><description><![CDATA[     鎽樿: 杞澆鑷細(xì)http://www.ibm.com/developerworks/cn/linux/l-mleak/index.html 媧惃 (hcode@21cn.com), C++紼嬪簭鍛?2003 騫?7 鏈?26 鏃?鏈枃閽堝 linux 涓嬬殑 C++ 紼嬪簭鐨勫唴瀛樻硠婕忕殑媯(gè)嫻嬫柟娉曞強(qiáng)鍏跺疄鐜拌繘琛屾帰璁ㄣ傚叾涓寘鎷?C++ 涓殑 new 鍜?delete 鐨勫熀鏈師鐞嗭紝鍐呭瓨?gòu)個(gè)嫻嬪瓙緋葷粺鐨勫疄鐜板師鐞?..  <a href='http://m.shnenglu.com/tx7do/articles/5964.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/tx7do/aggbug/5964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:45 <a href="http://m.shnenglu.com/tx7do/articles/5964.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux瀹堟姢榪涚▼鐨勭紪紼嬫柟娉?/title><link>http://m.shnenglu.com/tx7do/articles/5963.html</link><dc:creator>鏉ㄧ布娉?/dc:creator><author>鏉ㄧ布娉?/author><pubDate>Thu, 20 Apr 2006 09:43:00 GMT</pubDate><guid>http://m.shnenglu.com/tx7do/articles/5963.html</guid><wfw:comment>http://m.shnenglu.com/tx7do/comments/5963.html</wfw:comment><comments>http://m.shnenglu.com/tx7do/articles/5963.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/tx7do/comments/commentRss/5963.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tx7do/services/trackbacks/5963.html</trackback:ping><description><![CDATA[ <p> <span id="hvzpftn" class="Contents">瀹堟姢榪涚▼錛圖aemon錛夋槸榪愯鍦ㄥ悗鍙扮殑涓縐嶇壒孌婅繘紼嬨傚畠鐙珛浜庢帶鍒剁粓绔茍涓斿懆鏈熸у湴鎵ц鏌愮浠誨姟鎴栫瓑寰呭鐞嗘煇浜涘彂鐢熺殑浜嬩歡銆傚畧鎶よ繘紼嬫槸涓縐嶅緢鏈夌敤鐨勮繘紼嬨侺inux鐨勫ぇ澶氭暟鏈嶅姟鍣ㄥ氨鏄敤瀹堟姢榪涚▼瀹炵幇鐨勩傛瘮濡傦紝Internet鏈嶅姟鍣╥netd錛學(xué)eb鏈嶅姟鍣╤ttpd絳夈傚悓鏃訛紝瀹堟姢榪涚▼瀹屾垚璁稿緋葷粺浠誨姟銆傛瘮濡傦紝浣滀笟瑙勫垝榪涚▼crond錛屾墦鍗拌繘紼媗pd絳夈?<br />瀹堟姢榪涚▼鐨勭紪紼嬫湰韜茍涓嶅鏉傦紝澶嶆潅鐨勬槸鍚勭鐗堟湰鐨刄nix鐨勫疄鐜版満鍒朵笉灝界浉鍚岋紝閫犳垚涓嶅悓Unix鐜涓嬪畧鎶よ繘紼嬬殑緙栫▼瑙勫垯騫朵笉涓鑷淬傝繖闇瑕佽鑰呮敞鎰忥紝鐓ф惉鏌愪簺涔︿笂鐨勮鍒欙紙鐗瑰埆鏄疊SD4.3鍜屼綆鐗堟湰鐨凷ystem V錛夊埌Linux浼?xì)鍑虹幇閿欒鐨勩備笅闈㈠皢鍏ㄩ潰浠嬬粛Linux涓嬪畧鎶よ繘紼嬬殑緙栫▼瑕佺偣騫剁粰鍑鴻緇嗗疄渚嬨?<br /><br />涓錛?瀹堟姢榪涚▼鍙?qiáng)鍏剁壱?guī)?<br /><br />瀹堟姢榪涚▼鏈閲嶈鐨勭壒鎬ф槸鍚庡彴榪愯銆傚湪榪欎竴鐐逛笂DOS涓嬬殑甯擱┗鍐呭瓨紼嬪簭TSR涓庝箣鐩鎬技銆傚叾嬈★紝瀹堟姢榪涚▼蹇呴』涓庡叾榪愯鍓嶇殑鐜闅旂寮鏉ャ傝繖浜涚幆澧冨寘鎷湭鍏抽棴鐨勬枃浠舵弿榪扮錛屾帶鍒剁粓绔紝浼?xì)璇濆拰杩浗E嬬粍錛屽伐浣滅洰褰曚互鍙?qiáng)鏂囦欢鍒涘缓鎺╂ā绛夈傝繖浜涚幆澧冮氬父鏄畧鎶よ繘紼嬩粠鎵ц瀹冪殑鐖惰繘紼嬶紙鐗瑰埆鏄痵hell錛変腑緇ф壙涓嬫潵鐨勩傛渶鍚庯紝瀹堟姢榪涚▼鐨勫惎鍔ㄦ柟寮忔湁鍏剁壒孌婁箣澶勩傚畠鍙互鍦↙inux緋葷粺鍚姩鏃朵粠鍚姩鑴氭湰/etc/rc.d涓惎鍔紝鍙互鐢變綔涓氳鍒掕繘紼媍rond鍚姩錛岃繕鍙互鐢辯敤鎴風(fēng)粓绔紙閫氬父鏄痵hell錛夋墽琛屻?br /><br />鎬諱箣錛岄櫎寮榪欎簺鐗規(guī)畩鎬т互澶栵紝瀹堟姢榪涚▼涓庢櫘閫氳繘紼嬪熀鏈笂娌℃湁浠涔堝尯鍒傚洜姝わ紝緙栧啓瀹堟姢榪涚▼瀹為檯涓婃槸鎶婁竴涓櫘閫氳繘紼嬫寜鐓т笂榪扮殑瀹堟姢榪涚▼鐨勭壒鎬ф敼閫犳垚涓哄畧鎶よ繘紼嬨傚鏋滆鑰呭榪涚▼鏈夋瘮杈冩繁鍏ョ殑璁よ瘑灝辨洿瀹規(guī)槗鐞嗚В鍜岀紪紼嬩簡銆?<br /><br />浜岋紟 瀹堟姢榪涚▼鐨勭紪紼嬭鐐?<br /><br />鍓嶉潰璁茶繃錛屼笉鍚孶nix鐜涓嬪畧鎶よ繘紼嬬殑緙栫▼瑙勫垯騫朵笉涓鑷淬傛墍騫哥殑鏄畧鎶よ繘紼嬬殑緙栫▼鍘熷垯鍏跺疄閮戒竴鏍鳳紝鍖哄埆鍦ㄤ簬鍏蜂綋鐨勫疄鐜扮粏鑺備笉鍚屻傝繖涓師鍒欏氨鏄婊¤凍瀹堟姢榪涚▼鐨勭壒鎬с傚悓鏃訛紝Linux鏄熀浜嶴yetem V鐨凷VR4騫墮伒寰狿osix鏍囧噯錛屽疄鐜拌搗鏉ヤ笌BSD4鐩告瘮鏇存柟渚褲傜紪紼嬭鐐瑰涓嬶紱 <br /><br /></span>1. 灞忚斀涓浜涙湁鍏蟲帶鍒剁粓绔搷浣滅殑淇″彿銆?br />榪欐槸涓轟簡闃叉鍦ㄥ畧鎶よ繘紼嬫病鏈夋甯歌繍杞搗鏉ユ椂錛屾帶鍒剁粓绔彈鍒板共鎵伴鍑烘垨鎸傝搗銆傜ず渚嬪涓嬶細(xì)<br /></p> <pre style="MARGIN-LEFT: 80px"> <ccid_code>signal(SIGTTOU,SIG_IGN); <br />signal(SIGTTIN,SIG_IGN); <br />signal(SIGTSTP,SIG_IGN); <br />signal(SIGHUP ,SIG_IGN);</ccid_code> </pre>銆鎵鏈夌殑淇″彿閮芥湁鑷繁鐨勫悕瀛椼傝繖浜涘悕瀛楅兘浠モ淪IG鈥濆紑澶達(dá)紝鍙槸鍚庨潰鏈夋墍涓嶅悓銆傚紑鍙戜漢鍛樺彲浠ラ氳繃榪欎簺鍚嶅瓧浜嗚В鍒扮郴緇熶腑鍙戠敓浜嗕粈涔堜簨銆傚綋淇″彿鍑虹幇鏃訛紝寮鍙戜漢鍛樺彲浠ヨ姹傜郴緇熻繘琛屼互涓嬩笁縐嶆搷浣滐細(xì)<br /><p align="left">銆蹇界暐淇″彿銆傚ぇ澶氭暟淇″彿閮芥槸閲囧彇榪欑鏂瑰紡榪涜澶勭悊鐨勶紝榪欓噷灝遍噰鐢ㄤ簡榪欑鐢ㄦ硶銆備絾鍊煎緱娉ㄦ剰鐨勬槸瀵筍IGKILL鍜孲IGSTOP淇″彿涓嶈兘鍋氬拷鐣ュ鐞嗐?br />銆鎹曟崏淇″彿銆傛渶甯歌鐨勬儏鍐靛氨鏄紝濡傛灉鎹曟崏鍒癝IGCHID淇″彿錛屽垯琛ㄧず瀛愯繘紼嬪凡緇忕粓姝€傜劧鍚庡彲鍦ㄦ淇″彿鐨勬崟鎹夊嚱鏁頒腑璋冪敤waitpid()鍑芥暟鍙栧緱璇ュ瓙榪涚▼鐨勮繘紼婭D鍜屽畠鐨勭粓姝㈢姸鎬併傚彟澶栵紝濡傛灉榪涚▼鍒涘緩浜嗕復(fù)鏃舵枃浠訛紝閭d箞灝辮涓鴻繘紼嬬粓姝俊鍙稴IGTERM緙栧啓涓涓俊鍙鋒崟鎹夊嚱鏁版潵娓呴櫎榪欎簺涓存椂鏂囦歡銆?br />銆鎵ц緋葷粺鐨勯粯璁ゅ姩浣溿傚緇濆ぇ澶氭暟淇″彿鑰岃█錛岀郴緇熺殑榛樿鍔ㄤ綔閮芥槸緇堟璇ヨ繘紼嬨傚榪欎簺鏈夊叧緇堢鐨勪俊鍙鳳紝涓鑸噰鐢ㄥ拷鐣ュ鐞嗭紝浠庤屼繚闅滀簡緇堢鍏嶅彈騫叉壈銆?br />銆榪欑被淇″彿鍒嗗埆鏄紝SIGTTOU錛堣〃紺哄悗鍙拌繘紼嬪啓鎺у埗緇堢錛夈丼IGTTIN錛堣〃紺哄悗鍙拌繘紼嬭鎺у埗緇堢錛夈丼IGTSTP錛堣〃紺虹粓绔寕璧鳳級(jí)鍜孲IGHUP錛堣繘紼嬬粍闀塊鍑烘椂鍚戞墍鏈変細(xì)璁垚鍛樺彂鍑虹殑錛夈?</p><span id="hvzpftn" class="Contents">2. 鍦ㄥ悗鍙拌繍琛屻?<br />涓洪伩鍏嶆寕璧鋒帶鍒剁粓绔皢Daemon鏀懼叆鍚庡彴鎵ц銆傛柟娉曟槸鍦ㄨ繘紼嬩腑璋冪敤fork浣跨埗榪涚▼緇堟錛岃Daemon鍦ㄥ瓙榪涚▼涓悗鍙版墽琛屻?<br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">if(pid=fork()) </span><br /><span id="hvzpftn" class="Contents">exit(0);//鏄埗榪涚▼錛岀粨鏉熺埗榪涚▼錛屽瓙榪涚▼緇х畫 <br /><br /></span></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">3. 鑴辯鎺у埗緇堢錛岀櫥褰曚細(xì)璇濆拰榪涚▼緇?<br />鏈夊繀瑕佸厛浠嬬粛涓涓婰inux涓殑榪涚▼涓庢帶鍒剁粓绔紝鐧誨綍浼?xì)璇濆拰杩浗E嬬粍涔嬮棿鐨勫叧緋伙細(xì)榪涚▼灞炰簬涓涓繘紼嬬粍錛岃繘紼嬬粍鍙鳳紙GID錛夊氨鏄繘紼嬬粍闀跨殑榪涚▼鍙鳳紙PID錛夈傜櫥褰曚細(xì)璇濆彲浠ュ寘鍚涓繘紼嬬粍銆傝繖浜涜繘紼嬬粍鍏變韓涓涓帶鍒剁粓绔傝繖涓帶鍒剁粓绔氬父鏄垱寤鴻繘紼嬬殑鐧誨綍緇堢銆?<br />鎺у埗緇堢錛岀櫥褰曚細(xì)璇濆拰榪涚▼緇勯氬父鏄粠鐖惰繘紼嬬戶鎵夸笅鏉ョ殑銆傛垜浠殑鐩殑灝辨槸瑕佹憜鑴卞畠浠紝浣夸箣涓嶅彈瀹冧滑鐨勫獎(jiǎng)鍝嶃傛柟娉曟槸鍦ㄧ1鐐圭殑鍩虹涓婏紝璋冪敤setsid()浣胯繘紼嬫垚涓轟細(xì)璇濈粍闀匡細(xì) <br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">setsid(); </span><br /></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">璇存槑錛氬綋榪涚▼鏄細(xì)璇濈粍闀挎椂setsid()璋冪敤澶辮觸銆備絾絎竴鐐瑰凡緇忎繚璇佽繘紼嬩笉鏄細(xì)璇濈粍闀褲俿etsid()璋冪敤鎴愬姛鍚庯紝榪涚▼鎴愪負(fù)鏂扮殑浼?xì)璇澗l勯暱鍜屾柊鐨勮繘紼嬬粍闀匡紝騫朵笌鍘熸潵鐨勭櫥褰曚細(xì)璇濆拰榪涚▼緇勮劚紱匯傜敱浜庝細(xì)璇濊繃紼嬪鎺у埗緇堢鐨勭嫭鍗犳э紝榪涚▼鍚屾椂涓庢帶鍒剁粓绔劚紱匯?<br /><br />4. 紱佹榪涚▼閲嶆柊鎵撳紑鎺у埗緇堢 <br />鐜板湪錛岃繘紼嬪凡緇忔垚涓烘棤緇堢鐨勪細(xì)璇濈粍闀褲備絾瀹冨彲浠ラ噸鏂扮敵璇鋒墦寮涓涓帶鍒剁粓绔傚彲浠ラ氳繃浣胯繘紼嬩笉鍐嶆垚涓轟細(xì)璇濈粍闀挎潵紱佹榪涚▼閲嶆柊鎵撳紑鎺у埗緇堢錛?<br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">if(pid=fork()) </span><br /><span id="hvzpftn" class="Contents">exit(0);//緇撴潫絎竴瀛愯繘紼嬶紝絎簩瀛愯繘紼嬬戶緇紙絎簩瀛愯繘紼嬩笉鍐嶆槸浼?xì)璇澗l勯暱錛?<br /><br /></span></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">5. 鍏抽棴鎵撳紑鐨勬枃浠舵弿榪扮 <br />榪涚▼浠庡垱寤哄畠鐨勭埗榪涚▼閭i噷緇ф壙浜嗘墦寮鐨勬枃浠舵弿榪扮銆傚涓嶅叧闂紝灝嗕細(xì)嫻垂緋葷粺璧勬簮錛岄犳垚榪涚▼鎵鍦ㄧ殑鏂囦歡緋葷粺鏃犳硶鍗鎬笅浠ュ強(qiáng)寮曡搗鏃犳硶棰勬枡鐨勯敊璇傛寜濡備笅鏂規(guī)硶鍏抽棴瀹冧滑(NOFILE鍦ㄥご鏂囦歡<sys>涓畾涔?錛?<br /></sys></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">for(i=0;i < NOFILE;i++)<br />close(i);<br /><br /></span></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">6. 鏀瑰彉褰撳墠宸ヤ綔鐩綍 <br />榪涚▼媧誨姩鏃訛紝鍏跺伐浣滅洰褰曟墍鍦ㄧ殑鏂囦歡緋葷粺涓嶈兘鍗鎬笅銆備竴鑸渶瑕佸皢宸ヤ綔鐩綍鏀瑰彉鍒版牴鐩綍銆傚浜庨渶瑕佽漿鍌ㄦ牳蹇冿紝鍐欒繍琛屾棩蹇楃殑榪涚▼灝嗗伐浣滅洰褰曟敼鍙樺埌鐗瑰畾鐩綍濡?tmp錛?br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">chdir("/tmp") <br /><br /></span></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">7. 閲嶈鏂囦歡鍒涘緩鎺╂ā <br />榪涚▼浠庡垱寤哄畠鐨勭埗榪涚▼閭i噷緇ф壙浜嗘枃浠跺垱寤烘帺妯°傚畠鍙兘淇敼瀹堟姢榪涚▼鎵鍒涘緩鐨勬枃浠剁殑瀛樺彇浣嶃備負(fù)闃叉榪欎竴鐐癸紝灝嗘枃浠跺垱寤烘帺妯℃竻闄わ細(xì)<br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">umask(0); <br /><br /></span></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">8. 澶勭悊SIGCHLD淇″彿 <br />澶勭悊SIGCHLD淇″彿騫朵笉鏄繀欏葷殑銆備絾瀵逛簬鏌愪簺榪涚▼錛岀壒鍒槸鏈嶅姟鍣ㄨ繘紼嬪線寰鍦ㄨ姹傚埌鏉ユ椂鐢熸垚瀛愯繘紼嬪鐞嗚姹傘傚鏋滅埗榪涚▼涓嶇瓑寰呭瓙榪涚▼緇撴潫錛屽瓙榪涚▼灝嗘垚涓哄兊灝歌繘紼嬶紙zombie錛変粠鑰屽崰鐢ㄧ郴緇熻祫婧愩傚鏋滅埗榪涚▼絳夊緟瀛愯繘紼嬬粨鏉燂紝灝嗗鍔犵埗榪涚▼鐨勮礋鎷咃紝褰卞搷鏈嶅姟鍣ㄨ繘紼嬬殑騫跺彂鎬ц兘銆傚湪Linux涓嬪彲浠ョ畝鍗曞湴灝?SIGCHLD淇″彿鐨勬搷浣滆涓篠IG_IGN銆?<br /></span><div style="MARGIN-LEFT: 40px"><div style="MARGIN-LEFT: 40px"><span id="hvzpftn" class="Contents">signal(SIGCHLD,SIG_IGN); </span><br /></div><span id="hvzpftn" class="Contents"></span></div><span id="hvzpftn" class="Contents">榪欐牱錛屽唴鏍稿湪瀛愯繘紼嬬粨鏉熸椂涓嶄細(xì)浜х敓鍍靛案榪涚▼銆傝繖涓鐐逛笌BSD4涓嶅悓錛孊SD4涓嬪繀欏繪樉寮忕瓑寰呭瓙榪涚▼緇撴潫鎵嶈兘閲婃斁鍍靛案榪涚▼銆?</span><img src ="http://m.shnenglu.com/tx7do/aggbug/5963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tx7do/" target="_blank">鏉ㄧ布娉?/a> 2006-04-20 17:43 <a href="http://m.shnenglu.com/tx7do/articles/5963.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://hsxinbao.com" target="_blank">在线午夜精品</a>| <a href="http://my7877.com" target="_blank">欧美一区二区三区精品</a>| <a href="http://56myf.com" target="_blank">免费观看国产成人</a>| <a href="http://www25sds.com" target="_blank">亚洲国产精品电影</a>| <a href="http://329aaa.com" target="_blank">欧美日韩视频专区在线播放</a>| <a href="http://eee2244.com" target="_blank">av不卡在线观看</a>| <a href="http://51shoudian.com" target="_blank">久久嫩草精品久久久久</a>| <a href="http://0000zz.com" target="_blank">久久国产精品第一页</a>| <a href="http://ssis378.com" target="_blank">亚洲国产成人久久</a>| <a href="http://8x1080x.com" target="_blank">欧美成人午夜视频</a>| <a href="http://340996.com" target="_blank">欧美在线观看一区二区</a>| <a href="http://345fz.com " target="_blank">99xxxx成人网</a>| <a href="http://428820.com" target="_blank">亚洲网站在线观看</a>| <a href="http://sfrecq.com" target="_blank">亚洲精品免费看</a>| <a href="http://378682.com" target="_blank">男女av一区三区二区色多</a>| <a href="http://www-544778.com" target="_blank">亚洲欧美激情视频在线观看一区二区三区</a>| <a href="http://sp106.com" target="_blank">在线观看av不卡</a>| <a href="http://000695.com" target="_blank">国产日本欧美一区二区</a>| <a href="http://www249aaa.com" target="_blank">欧美.日韩.国产.一区.二区</a>| <a href="http://qdzhudai.com" target="_blank">亚洲欧美日韩国产另类专区</a>| <a href="http://677968.com" target="_blank">亚洲国产日韩欧美综合久久</a>| <a href="http://456kp.com" target="_blank">久久久精品一区二区三区</a>| <a href="http://love136.com" target="_blank">亚洲视频大全</a>| <a href="http://6399128.com" target="_blank">99综合精品</a>| <a href="http://227002.com" target="_blank">99精品热视频</a>| <a href="http://www672hh.com" target="_blank">亚洲欧洲日韩综合二区</a>| <a href="http://74va.com" target="_blank">激情亚洲成人</a>| <a href="http://994745.com" target="_blank">国产亚洲免费的视频看</a>| <a href="http://essuee.com" target="_blank">国产精品人人做人人爽</a>| <a href="http://118017.com" target="_blank">欧美男人的天堂</a>| <a href="http://www62265.com" target="_blank">欧美精品一区二区精品网 </a>| <a href="http://97gaoba.com" target="_blank">国内自拍一区</a>| <a href="http://88848885.com" target="_blank">国产偷久久久精品专区</a>| <a href="http://azaz7.com" target="_blank">国产精品午夜久久</a>| <a href="http://7v51.com" target="_blank">亚洲激精日韩激精欧美精品</a>| <a href="http://wg246.com" target="_blank">国产欧美在线观看</a>| <a href="http://2225101.com" target="_blank">亚洲人成欧美中文字幕</a>| <a href="http://621765.com" target="_blank">一区二区三区三区在线</a>| <a href="http://26thb.com" target="_blank">久久尤物电影视频在线观看</a>| <a href="http://373gg.com" target="_blank">欧美在现视频</a>| <a href="http://tcgo903.com" target="_blank">亚洲国产一区二区三区高清</a>| <a href="http://hy1598.com" target="_blank">亚洲自拍偷拍视频</a>| <a href="http://er65.com" target="_blank">亚洲一区精品电影</a>| <a href="http://83wn.com" target="_blank">亚洲欧美日本在线</a>| <a href="http://xingmaokeji.com" target="_blank">欧美高清在线精品一区</a>| <a href="http://9113i.com" target="_blank">欧美大尺度在线</a>| <a href="http://www-88899.com" target="_blank">国产手机视频精品</a>| <a href="http://www-919198.com" target="_blank">亚洲综合首页</a>| <a href="http://2061851.com" target="_blank">午夜在线一区二区</a>| <a href="http://ekuyun.com" target="_blank">久久久无码精品亚洲日韩按摩</a>| <a href="http://666cmc.com" target="_blank">亚洲免费观看在线观看</a>| <a href="http://9511331.com" target="_blank">亚洲婷婷国产精品电影人久久 </a>| <a href="http://wb2014.com" target="_blank">欧美日韩国产欧</a>| <a href="http://yp8882.com" target="_blank">国产精品九九久久久久久久</a>| <a href="http://saobitv.com" target="_blank">国产麻豆一精品一av一免费</a>| <a href="http://033232.com" target="_blank">国产一区欧美</a>| <a href="http://hmm47.com" target="_blank">亚洲人成艺术</a>| <a href="http://wwwxigua66.com" target="_blank">免费一级欧美在线大片</a>| <a href="http://13789a.com" target="_blank">欧美一区影院</a>| <a href="http://wwwby6682.com" target="_blank">国产视频欧美</a>| <a href="http://hhsj31.com" target="_blank">久久精品国产一区二区三区免费看 </a>| <a href="http://balqueen.com" target="_blank">亚洲午夜伦理</a>| <a href="http://www369cf.com" target="_blank">久久免费偷拍视频</a>| <a href="http://wwww20.com" target="_blank">午夜一级久久</a>| <a href="http://56701sy.com" target="_blank">欧美激情视频网站</a>| <a href="http://660507jj.com" target="_blank">最新国产成人在线观看</a>| <a href="http://126900.com" target="_blank">亚洲国产精品日韩</a>| <a href="http://cp88966.com" target="_blank">欧美剧在线免费观看网站</a>| <a href="http://520844www.com" target="_blank">亚洲日本理论电影</a>| <a href="http://pigkrtv.com" target="_blank">欧美影视一区</a>| <a href="http://z169.com" target="_blank">久久成人亚洲</a>| <a href="http://njggmy.com" target="_blank">亚洲激情av在线</a>| <a href="http://489633.com" target="_blank">亚洲国产高清在线观看视频</a>| <a href="http://jgj230230.com" target="_blank">牛人盗摄一区二区三区视频</a>| <a href="http://miya2223.com" target="_blank">亚洲国产综合视频在线观看</a>| <a href="http://hkjccc.com" target="_blank">亚洲电影中文字幕</a>| <a href="http://6623555.com" target="_blank">欧美日产在线观看</a>| <a href="http://www-kj8777.com" target="_blank">欧美在线播放高清精品</a>| <a href="http://htzhuanli.com" target="_blank">欧美综合国产</a>| <a href="http://sdtricoop.com" target="_blank">亚洲人在线视频</a>| <a href="http://www39pao.com" target="_blank">一区二区三区精品视频在线观看</a>| <a href="http://wwwavtb2049.com" target="_blank">久久精品国产久精国产一老狼</a>| <a href="http://obatshaka.com" target="_blank">国产午夜精品理论片a级探花</a>| <a href="http://t3gg.com" target="_blank">久久久一区二区三区</a>| <a href="http://nagebbs.com" target="_blank">久色成人在线</a>| <a href="http://jlhao123.com" target="_blank">麻豆乱码国产一区二区三区</a>| <a href="http://wwwbbb888999.com" target="_blank">国产精品萝li</a>| <a href="http://428820.com" target="_blank">日韩一级在线</a>| <a href="http://www78778.com" target="_blank">亚洲视频第一页</a>| <a href="http://cnlbogs.com" target="_blank">小辣椒精品导航</a>| <a href="http://2061375.com" target="_blank">久久亚洲春色中文字幕久久久</a>| <a href="http://xp1025.com" target="_blank">亚洲欧美日韩国产成人精品影院</a>| <a href="http://sewuyueyue.com" target="_blank">国产亚洲福利</a>| <a href="http://8558585.com" target="_blank">欧美福利视频在线观看</a>| <a href="http://sihu121.com" target="_blank">亚洲欧美日韩精品在线</a>| <a href="http://maokk88.com" target="_blank">狠狠色丁香婷婷综合久久片</a>| <a href="http://www-498787.com" target="_blank">亚洲成色www8888</a>| <a href="http://057232.com" target="_blank">久久裸体视频</a>| <a href="http://d1112.com" target="_blank">欧美激情视频免费观看</a>| <a href="http://as777as.com" target="_blank">亚洲尤物在线</a>| <a href="http://ssss96.com" target="_blank">久久久久九九视频</a>| <a href="http://xccp4888.com" target="_blank">在线视频精品</a>| <a href="http://bgflee.com" target="_blank">久久综合精品国产一区二区三区</a>| <a href="http://hjersqc.com" target="_blank">99视频精品全部免费在线</a>| <a href="http://sese750.com" target="_blank">欧美一区二区三区播放老司机 </a>| <a href="http://889644.com" target="_blank">午夜国产精品影院在线观看 </a>| <a href="http://hhsp13.com" target="_blank">亚洲理伦电影</a>| <a href="http://zzmzit.com" target="_blank">欧美日韩国产精品一卡</a>| <a href="http://yp8882.com" target="_blank">欧美在线观看你懂的</a>| <a href="http://szzzzzzz.com" target="_blank">欧美精品福利视频</a>| <a href="http://686852a.com" target="_blank">久久久久久久波多野高潮日日</a>| <a href="http://my736.com" target="_blank">欧美精品videossex性护士</a>| <a href="http://zz-777.com" target="_blank">久久国产精品一区二区三区四区</a>| <a href="http://4hup23.com" target="_blank">欧美福利网址</a>| <a href="http://mm910.com" target="_blank">欧美sm重口味系列视频在线观看</a>| <a href="http://syddzs.com" target="_blank">国产精品久久久久久久久搜平片 </a>| <a href="http://fcponteggi.com" target="_blank">免费亚洲电影在线</a>| <a href="http://www-90443.com" target="_blank">久久精品人人做人人爽</a>| <a href="http://saohu79.com" target="_blank">国产精品久久久999</a>| <a href="http://gyzhoucheng.com" target="_blank">亚洲精品1234</a>| <a href="http://687989.com" target="_blank">亚洲欧美日韩综合一区</a>| <a href="http://hhh246.com" target="_blank">一区二区高清视频</a>| <a href="http://www51avav.com" target="_blank">裸体一区二区三区</a>| <a href="http://tuiliqi.com" target="_blank">久久偷看各类wc女厕嘘嘘偷窃</a>| <a href="http://211186.com" target="_blank">国产精品成人一区二区三区夜夜夜</a>| <a href="http://6k7a.com" target="_blank">欧美高清hd18日本</a>| <a href="http://372469.com" target="_blank">狠狠色狠狠色综合日日小说</a>| <a href="http://hazymall.com" target="_blank">亚洲欧美精品在线观看</a>| <a href="http://laodaohang.com" target="_blank">亚洲伊人一本大道中文字幕</a>| <a href="http://yzxq520.com" target="_blank">欧美激情视频网站</a>| <a href="http://743627.com" target="_blank">亚洲精品女人</a>| <a href="http://jyboke.com" target="_blank">亚洲国产1区</a>| <a href="http://yyyy456.com" target="_blank">老色鬼精品视频在线观看播放</a>| <a href="http://678665.com" target="_blank">久久精品99无色码中文字幕</a>| <a href="http://www227zh.com" target="_blank">国产精品视频一区二区高潮</a>| <a href="http://216667.com" target="_blank">一区二区久久久久</a>| <a href="http://jzsp94.com" target="_blank">亚洲一区二区不卡免费</a>| <a href="http://eee88888.com" target="_blank">欧美三区美女</a>| <a href="http://yichenep.com" target="_blank">久久男女视频</a>| <a href="http://cdcpt.com" target="_blank">亚洲激情影视</a>| <a href="http://www-35777.com" target="_blank">欧美日韩一卡</a>| <a href="http://shalxee.com" target="_blank">欧美成人一区二免费视频软件</a>| <a href="http://6767673.com" target="_blank">国产精品网红福利</a>| <a href="http://373336.com" target="_blank">亚洲一区二区高清视频</a>| <a href="http://sdgs6788.com" target="_blank">亚洲少妇一区</a>| <a href="http://hongzaixian.com" target="_blank">欧美亚一区二区</a>| <a href="http://yiluee.com" target="_blank">一区二区三区欧美成人</a>| <a href="http://tingxihuan.com" target="_blank">玖玖在线精品</a>| <a href="http://go1818.com" target="_blank">亚洲黄色免费网站</a>| <a href="http://cnlbogs.com" target="_blank">亚洲国产欧美一区二区三区丁香婷</a>| <a href="http://8eya.com" target="_blank">久久久www</a>| <a href="http://zgztby.com" target="_blank">亚洲欧美日韩精品在线</a>| <a href="http://124909.com" target="_blank">国产精品第一区</a>| <a href="http://bixiuge.com" target="_blank">亚洲欧美电影院</a>| <a href="http://725806.com" target="_blank">久久亚洲视频</a>| <a href="http://www-85489.com" target="_blank">亚洲黄色在线</a>| <a href="http://9niuw.com" target="_blank">国产精品v欧美精品v日本精品动漫 </a>| <a href="http://11867a.com" target="_blank">亚洲男人的天堂在线</a>| <a href="http://fangsling.com" target="_blank">国产精品久久久久久久免费软件</a>| <a href="http://yx3369.com" target="_blank">亚洲一区二区免费</a>| <a href="http://ycpeixun.com" target="_blank">久久久久免费视频</a>| <a href="http://baostat.com" target="_blank">亚洲精品少妇30p</a>| <a href="http://my736.com" target="_blank">欧美性事免费在线观看</a>| <a href="http://889028.com" target="_blank">亚洲免费久久</a>| <a href="http://www-77663.com" target="_blank">久久国产主播精品</a>| <a href="http://1181318.com" target="_blank">亚洲国产美女精品久久久久∴</a>| <a href="http://59199m.com" target="_blank">欧美国产成人在线</a>| <a href="http://833816.com" target="_blank">艳妇臀荡乳欲伦亚洲一区</a>| <a href="http://sdkingpin.com" target="_blank">销魂美女一区二区三区视频在线</a>| <a href="http://woniuminsu.com" target="_blank">韩日精品视频一区</a>| <a href="http://yye321.com" target="_blank">欧美高清在线一区</a>| <a href="http://337795.com" target="_blank">亚洲图片欧洲图片av</a>| <a href="http://www-90422.com" target="_blank">久久伊人一区二区</a>| <a href="http://66hhmm.com" target="_blank">日韩一二三区视频</a>| <a href="http://zzzz80.com" target="_blank">国产精品视频男人的天堂</a>| <a href="http://niceboybao.com" target="_blank">另类春色校园亚洲</a>| <a href="http://73cao.com" target="_blank">亚洲午夜精品一区二区三区他趣</a>| <a href="http://tcgo903.com" target="_blank">欧美一区二区三区久久精品</a>| <a href="http://688528.com" target="_blank">激情小说另类小说亚洲欧美</a>| <a href="http://559dd.com" target="_blank">欧美日韩一区二区高清</a>| <a href="http://74w4.com" target="_blank">久久精品盗摄</a>| <a href="http://2ejj.com" target="_blank">亚洲精品社区</a>| <a href="http://ythbhg.com" target="_blank">久久精品国产亚洲一区二区三区 </a>| <a href="http://shalxee.com" target="_blank">美腿丝袜亚洲色图</a>| <a href="http://3b6f.com" target="_blank">亚洲一区在线免费观看</a>| <a href="http://qqszdq.com" target="_blank">在线观看亚洲视频</a>| <a href="http://chinagreetown.com" target="_blank">亚洲精品视频免费在线观看</a>| <a href="http://y7y7s.com" target="_blank">中文国产一区</a>| <a href="http://hznaja.com" target="_blank">亚洲国产精彩中文乱码av在线播放</a>| <a href="http://fangsling.com" target="_blank">欧美日韩午夜视频在线观看</a>| <a href="http://www8888803.com" target="_blank">亚洲欧美高清</a>| <a href="http://wocao1997.com" target="_blank">亚洲精品影视在线观看</a>| <a href="http://cfqcgw.com" target="_blank">欧美一区二区三区四区在线观看 </a>| <a href="http://www-42189.com" target="_blank">亚洲国产精品热久久</a>| <a href="http://hernameplz.com" target="_blank">国产精品免费电影</a>| <a href="http://gykfqzgpt.com" target="_blank">欧美激情中文字幕一区二区</a>| <a href="http://caopormo.com" target="_blank">香蕉久久夜色精品国产使用方法</a>| <a href="http://114499com.com" target="_blank">亚洲第一天堂无码专区</a>| <a href="http://myasker.com" target="_blank">久久欧美中文字幕</a>| <a href="http://52wenxiu.com" target="_blank">久久成人精品一区二区三区</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>