青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Log4cpp學習記錄

Posted on 2008-09-09 17:35 美洲豹 閱讀(5643) 評論(1)  編輯 收藏 引用

Log4cpp學習記錄

1.       下載

http://log4cpp.sourceforge.net/

2.       編譯(這一步一開始搞了比較久,后來搜到如下的信息幫助解決了)

問題:由于log4cpp-0.3.5rc3僅提供了vc6的工程文件,因此,使用vs2005打開后,需要進行轉換。但是轉換后,不能正確編譯,提示Custom Build Step時出現了錯誤。

分 析:因為log4cpp在生成NTEventLogAppender.dll時,需要連接NTEventLogCategories.mc文件。所以,項 目設置了自定義的生成步驟去生成NTEventLogAppender.dll。但從vc6的工程文件轉換時,這些步驟卻沒有正確的轉換過來。從而出現上 述問題。

解決方法:重新填寫Custom Build Step項。

其中,CommandLine填寫以下內容:

if not exist $(OutDir) md $(OutDir)
"mc.exe" -h $(OutDir) -r $(OutDir) $(ProjectDir)..\$(InputName).mc
"RC.exe" -r -fo $(OutDir)\$(InputName).res $(OutDir)\$(InputName).rc
"link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll $(OutDir)\$(InputName).res




適用范圍:log4cpp項目、log4cppDLL項目的DebugRelease配置。同時,該方法適用于vs2003(vc7.1)

問題:log4cppDLL項目編譯時會報8個連接錯誤,提示符號std::_Tree找不到
解決方案:
include\log4cpp\FactoryParams.hh文件中的

const_iterator find(const std::string& t) const;


修改為

const_iterator find(const std::string& t) const { return storage_.find(t); }


后重新編譯

問題:log4cppDLL項目編譯時會報1個連接錯誤,提示符號log4cpp::localtime找不到
解決方案:
src\localtime.cpp文件添加到項目中重新編譯

 

3.       使用

http://www-128.ibm.com/developerworks/cn/linux/l-log4cpp/index.html

log4cpp應用手冊

1
下載log4cpp并解壓。

2
打開\log4cpp-0.3.4b\msvc6\msvc6.dsw
 
編譯log4cpp工程Release版。
 
3
將編譯后的log4cpp.lib復制到VCLib目錄中。

4
將頭文件的目錄log4cpp-0.3.4b\include\log4cpp\
 
復制到VCInclude目錄.
  (
或者添加log4cpp-0.3.4b\includeVCInclude環境變量)

6
目標工程包含庫
log4cpp.lib ws2_32.lib
(要選擇庫連接方式相同的庫)

5
包含頭文件
日志記錄
#include <log4cpp/Category.hh>
日志配置讀取
#include <log4cpp/PropertyConfigurator.hh>
NDC
#include <log4cpp/NDC.hh>

9
日志代碼
每個類可以有自己的類別(log4cpp::Category)
可以在配置文件中添加該類別并設置日志級別。
所有的log4cpp::Category都使用同一個Appender
不同的Category配置為不同的日志級別,就可以控制日志輸出的范圍。
一般只使用四個記錄日志級:DEBUGINFOWARNERROR
如:
log4cpp::Category::getRoot().info("Now run line %d", __LINE__);
或使用非根類別
log4cpp::Category::getInstance("MyCat").info("Now run line %d", __LINE__);

使用流:
log4cpp::Category::getInstance("main_cat").infoStream()
    << "This will show up as "
    << 1 << " emergency message"
    << log4cpp::CategoryStream::ENDLINE;
   

具體的函數說明見api文檔.

7
讀取配置代碼
讀取log配置文件,應在log4cpp靜態成員初始化之后。
如在CXXXApp::InitInstance()

    try
    {
        log4cpp::PropertyConfigurator::configure("log.ini");
    }
    catch (log4cpp::ConfigureFailure e)
    {
        log4cpp::Category::getRoot().warn(e.what());
    }

   

8
配置文件

[log4cpp]
# Set root category priority to DEBUG and its only appender to A1. 
# priority enum: "FATAL", "ALERT", "CRIT", "ERROR", "WARN",
#            "NOTICE", "INFO", "DEBUG", "NOTSET", "UNKNOWN"
rootCategory=DEBUG,A1
additivity.rootCategory=false
               
# define appender
appender.A1=RollingFileAppender
#appender.A1.threshold=NOTSET
appender.A1.fileName=XXXX.log
#appender.A1.maxFileSize=10485760
#appender.A1.maxBackupIndex=1
appender.A1.layout=PatternLayout
appender.A1.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S}](%p)%c %x: %m%n

appender.Info_Cons=ConsoleAppender
appender.Info_Cons.threshold=INFO
appender.Info_Cons.layout=PatternLayout
appender.Info_Cons.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S}](%p)%c %x: %m%n

# category for sub1
category.sub1=DEBUG,A1,Info_Cons
additivity.sub1=false
category.sub2=INFO,A1
additivity.sub1=false

# other categories

[others]
djkf=dksajf

 

 

最基本的使用方法;

手動使用log4cpp的基本步驟如下:

  1. 實例化一個layout 對象;
  2. 初始化一個appender 對象;
  3. layout對象附著在appender對象上;
  4. 調用log4cpp::Category::getInstance("name"). 實例化一個category對象;
  5. appender對象附到category上(根據additivity的值取代其他appender或者附加在其他appender后)。
  6. 設置category的優先級;
// FileName: test_log4cpp1.cpp
// Test log4cpp by manual operation.
// Announce: use as your own risk.
// Compile : g++ -otest1 -llog4cpp test_log4cpp1.cpp
// Run     : ./test1
// Tested  : RedHat 7.2 log4cpp0.3.4b
// Author  : liqun (liqun@nsfocus.com)
// Data    : 2003-6-27
#include       "log4cpp/Category.hh"
#include       "log4cpp/FileAppender.hh"
#include       "log4cpp/BasicLayout.hh"
int main(int argc, char* argv[])
{
        // 1實例化一個layout 對象
        log4cpp::Layout* layout = 
        new log4cpp::BasicLayout();
        // 2. 初始化一個appender 對象
        log4cpp::Appender* appender = new 
              log4cpp::FileAppender("FileAppender",
              "./test_log4cpp1.log");
        // 3. layout對象附著在appender對象上
        appender->setLayout(layout);
        // 4. 實例化一個category對象
        log4cpp::Category& warn_log = 
        log4cpp::Category::getInstance("mywarn");
        // 5. 設置additivityfalse,替換已有的appender
        warn_log.setAdditivity(false);
        // 5. appender對象附到category
        warn_log.setAppender(appender);
        // 6. 設置category的優先級,低于此優先級的日志不被記錄
        warn_log.setPriority(log4cpp::Priority::WARN);
        // 記錄一些日志
        warn_log.info("Program info which cannot be wirten");
        warn_log.debug("This debug message will fail to write");
        warn_log.alert("Alert info");
        // 其他記錄日志方式
        warn_log.log(log4cpp::Priority::WARN, "This will be a logged warning");
        log4cpp::Priority::PriorityLevel priority;
        bool this_is_critical = true;
        if(this_is_critical)
               priority = log4cpp::Priority::CRIT;
        else
               priority = log4cpp::Priority::DEBUG;
        warn_log.log(priority,"Importance depends on context");
        
        warn_log.critStream() << "This will show up << as " 
        << 1 << " critical message" 
        << log4cpp::CategoryStream::ENDLINE;
        // clean up and flush all appenders
        log4cpp::Category::shutdown();
        return 0;
}

 

從以上例子,并結合文檔,可以看出,實際上,其Loglog4cpp::Category::的一部分,而這些Category可以綁定不同的appender,以使得log輸出到不同的出口,如文件或終端或網絡等。實際記錄的時候是靠優先級來實現的,即優先級低于目前的log所設定的優先級,則不需要記錄此信息,只有高于當前優先級的log信息才會被記錄。對于Category的層次,log4cpp::Category::getRoot()為最高層次,其它getInstance(“name”)得到的只有命名為”name”Category,應該是Root()的子層。

Log4cpp的優勢

1,提供應用程序運行上下文,方便跟蹤調試.這對開發人員很有幫助,特別是調試的時候,這一點log均可實現.

2,把記錄的日志輸送到多種方式上.包括命令行,控制臺(調試的時候馬上就能看到哪里有問題),文件(把完整的日志信息保存起來,以利于整個系統的維護,統計),回卷文件、內存等.這一點是有特色的地方,因為其只有一個輸出內容,但可綁定到多個輸出源,比如,你可以用控制臺輸出看到即時結果的同時,將輸出的內容存到文件中。或者你為了在測試的時候盡量不影響性能,可以將日志輸出到內存,待關閉程序的時候再將其寫回到硬盤。

3,可以動態控制日志記錄級別,在效率和功能中進行調整.當執行等級小于設定等級時就不輸出.其設定了INFO,DEBUG,ALERT,EMERGE等不同的級別,當當前Log的級別低于設定的需記錄的級別時,將忽略此信息,這個對記錄不同程度的信息詳細度有幫助,可以專注于特定的重要級別的錯誤的調試。

4,所有配置可以通過配置文件進行動態調整.這個暫時還沒有使用,若要使用可參見 《便利的開發工具-log4cpp快速使用指南》(http://www.ibm.com/developerworks/cn/linux/l-log4cpp/index.html)

中第三節

5,現在log4**系列已經開始支持其他語言了.Java(log4j),C++log4cpplog4cplus),Clog4c),pythonlog4p)等.好的東西容易被人借鑒和傳播.

Log4cpp有三個主要的組件:日志類別(Category)、輸出源( Appenders)和布局(Layouts)。這三種類型的組件一起工作使得開發員可以根據信息的類型和級別記錄它們,并且在運行時控制這些信息的輸出格式和位置。

Feedback

# re: Log4cpp學習記錄  回復  更多評論   

2008-11-03 11:55 by 呵呵
謝謝了..............

posts - 15, comments - 2, trackbacks - 0, articles - 29

Copyright © 美洲豹

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线视频精品| 欧美88av| 亚洲国产国产亚洲一二三| 久久久久久久97| 久久国内精品视频| 久久亚洲欧美| 欧美激情一区三区| 亚洲人www| 一区二区高清在线| 亚洲一区二区三区免费观看| 日韩午夜黄色| 亚洲一区二区影院| 欧美在线视频免费| 欧美成年人视频网站欧美| 欧美日韩亚洲网| 国产亚洲精品久久久久久| 在线观看精品视频| 亚洲视频视频在线| 久久久91精品国产一区二区三区 | 欧美日韩一区免费| 久久国产视频网站| 欧美一区2区视频在线观看| 久久久精品日韩| 欧美激情黄色片| 国产精品亚洲综合久久| 激情综合网激情| 亚洲毛片在线免费观看| 欧美一区二区三区免费观看视频 | 最新日韩在线视频| 亚洲欧美激情诱惑| 亚洲电影中文字幕| 欧美一站二站| 欧美日韩一区二区免费视频| 国产亚洲欧美中文| 亚洲午夜av在线| 欧美777四色影视在线| 亚洲天堂av在线免费| 久久伊人一区二区| 国产精品少妇自拍| 日韩一级黄色片| 免费成人高清视频| 亚洲欧美一区二区激情| 欧美日韩国产色综合一二三四| 狠狠色综合网站久久久久久久| 亚洲午夜精品久久久久久浪潮| 蜜桃久久精品乱码一区二区| 亚洲午夜在线观看视频在线| 欧美美女福利视频| 亚洲欧洲一级| 欧美成人久久| 久久亚洲精品网站| 永久久久久久| 美脚丝袜一区二区三区在线观看 | 欧美二区在线播放| 久久国产天堂福利天堂| 国产精品一二三视频| 99精品欧美| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久国产精品亚洲77777| 国产日韩精品视频一区二区三区| 亚洲伊人网站| 国产精品99久久久久久人| 欧美视频国产精品| 午夜激情久久久| 亚洲中午字幕| 国产一区二区三区四区| 久久免费国产精品| 久久亚洲国产精品日日av夜夜| 在线成人黄色| 亚洲国产精品精华液2区45| 模特精品在线| 正在播放亚洲一区| 亚洲影院色在线观看免费| 国产精品一卡二卡| 久久婷婷成人综合色| 美女国产一区| 久久精品国产99精品国产亚洲性色 | 国产日韩欧美精品一区| 欧美一区二区高清在线观看| 亚洲午夜精品福利| 国产日韩欧美一区| 免费精品视频| 欧美日本乱大交xxxxx| 亚洲天堂av在线免费| 亚洲一区二区三区精品视频| 国产视频综合在线| 欧美高清一区二区| 欧美午夜免费电影| 久久久噜噜噜久久中文字幕色伊伊 | 欧美丰满少妇xxxbbb| 欧美精品一区二区三区很污很色的 | 国产精品一区二区三区免费观看| 欧美一区二区黄色| 麻豆精品精品国产自在97香蕉| 亚洲人在线视频| 一区二区三区精密机械公司 | 久久久久久有精品国产| 亚洲精品国产精品久久清纯直播 | 久久亚洲国产精品日日av夜夜| 久久婷婷蜜乳一本欲蜜臀| 99re66热这里只有精品3直播 | 欧美黄色成人网| 国产精品久久久久久av下载红粉| 久久综合婷婷| 国产精品国产三级国产普通话三级| 久久激情视频免费观看| 欧美精品一区在线| 久久久精品日韩| 欧美日韩久久不卡| 猫咪成人在线观看| 国产精品国产三级国产普通话蜜臀 | 亚洲欧美国产另类| 午夜精品久久久久久久99水蜜桃| 伊人婷婷久久| 中文国产一区| 99国产精品自拍| 久久精品亚洲一区二区三区浴池| 亚洲一区二区高清| 欧美成人高清| 久久综合国产精品台湾中文娱乐网| 欧美日韩一区二区高清| 欧美成人综合一区| 国产一区二区0| 99精品国产在热久久下载| 亚洲高清资源| 久久久不卡网国产精品一区| 午夜日韩在线| 国产精品乱码一区二区三区| 亚洲日韩中文字幕在线播放| 伊人夜夜躁av伊人久久| 欧美一级淫片aaaaaaa视频| 亚洲自拍三区| 欧美日韩在线观看视频| 亚洲国产精品欧美一二99| 国产麻豆精品theporn| 亚洲视频一区二区免费在线观看| 亚洲麻豆av| 欧美电影免费| 欧美不卡福利| 亚洲国产精品嫩草影院| 久久久久久成人| 久久综合亚洲社区| 黄色av成人| 欧美与欧洲交xxxx免费观看 | 亚洲美女电影在线| 久久伊人亚洲| 美女国产精品| 亚洲福利视频一区| 欧美在线黄色| 久久精品国产久精国产爱 | 91久久综合| 欧美成人精精品一区二区频| 久久亚洲不卡| 今天的高清视频免费播放成人 | 欧美激情bt| 99视频在线观看一区三区| 亚洲一区二区日本| 国产欧美 在线欧美| 欧美亚洲一区二区在线| 久久综合久久久久88| 亚洲国内精品| 欧美手机在线| 久久大香伊蕉在人线观看热2| 嫩草国产精品入口| 99国内精品久久| 国产精品亚洲综合| 麻豆9191精品国产| 日韩视频不卡中文| 久久福利资源站| 亚洲福利电影| 国产精品久久久久久久久久妞妞| 午夜精品福利一区二区蜜股av| 久久久久在线观看| 欧美国产亚洲另类动漫| 久久国产精品第一页| aa亚洲婷婷| 国产精品五区| 久久久久久精| 99视频一区二区三区| 久久久www成人免费无遮挡大片| 亚洲高清免费在线| 欧美天堂亚洲电影院在线播放| 午夜日韩福利| 亚洲国产精品一区二区久| 亚洲调教视频在线观看| 一区二区在线观看视频在线观看| 欧美精品一区二区蜜臀亚洲| 亚洲欧美日韩国产另类专区| 亚洲电影自拍| 久久精品卡一| 亚洲私人影院在线观看| 狠狠色综合网| 国产精品一区二区你懂的| 久久综合伊人77777尤物| 亚洲天堂av在线免费| 亚洲激情啪啪| 欧美成年人在线观看| 久久久久国产一区二区三区四区| 在线一区欧美| 亚洲精品一区二|