• <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>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks

            fastlog 的使用

            C++ 通用框架的設計 作者: naven

            1           fastlog 介紹

            fastlog 是參考 log4j log4cplus 框架使用 javen c++ 庫設計實現的日志記錄庫,具有 log4j 庫類似的優點,記錄日志非常方便,擴展和配置也非常容易。 Log4j 日志庫我想應該在 java 的領域已經應用很廣泛了,這樣的日志庫可以非常方便地將日志輸出到屏幕、文件、 syslog 、遠程服務器等任何地方,而日志輸出的格式也可以任意調整,可以很容易控制輸出的日志級別,而這一切僅需修改一下配置文件,應用程序不用作任何修改。

             

            fastlog 主要有如下一些模塊

             

            Appenders                          掛接器,定義一些日志輸出的設備終端,如文件、屏幕等

            Layouts                                布局器,定義輸出的日志格式

                     Hierarchies                           分類器,用于對日志信息分類,即對日志分級,用戶不能直接調用

                     LoglevelManager               日志級別管理器,即 TRACE, DEBUG, INFO, WARNING, ERROR

            Logger                                  記錄器,即記錄日志的對象,每個應用模塊應該擁有一個 Logger

                     PropertyConfigurator         配置器,用于通過配置文件配置 Logger Appender 、 Layout

             

            2           Hello World!

            下面的程序示例如何使用 fastlog 記錄日志:

             

            //  定義一個該應用模塊使用的Logger記錄器,命名為”log”
            static  Logger _logger  =  Logger::getInstance( " log " );
            void  main() 
            {
            //  配置器讀取配置文件fastlog.properties初始化Logger,只初始化一次
                PropertyConfigurator::doConfigure( " fastlog.properties " ); 
                
            //  輸出日志
                _logger.notice( " This is the NOTICE log message”); 
            }

            日志輸出可能(與 fastlog.properties 配置有關)如下:

             

             

            2006-08-10 21:44:37 [log]-[NOTICE] This is the NOTICE log message

             

            1           fastlog 配置文件

            fastlog 配置文件可能會較復雜,下面先介紹一個典型的 fastlog.properties 如下:

             

             

            # 這一行不可缺少,定義 fastlog 的日志級別和輸出設備 

            # fastlog.rootLogger 是 fastlog 的配置標識,不可更改 

            # = 號后面即為具體設置,后面第一個逗號 ”,” 前是設置日志輸出級別,后面是設置輸出設備 

            # INFO & ERROR 表示同時輸出 INFO 和 ERROR 級別日志,所以可以任意定義輸出的級別,這跟 log4j 不一樣的 

            # A1, R 是表示兩個輸出設備,這個名字可以自己定義的,改成 OUT1, OUT2 等都可以 

            # 這個設備在下面定義輸出設備的詳細設置就會用到 

            fastlog.rootLogger = INFO & ERROR & CRIT & WARN & FATAL & ALERT & NOTICE & DEBUG, A1, R 

              

            # 這部分定義名為 ”A1” 的輸出設備,定義的名稱規則是 fastlog.appender. 加設備名,再加 . 設備屬性 

            # 這一行定義輸出的設備,即輸出到 Console 控制臺 

            fastlog.appender.A1 = fastlog::ConsoleAppender 

            # 這是定義輸出的日志格式,使用 PatternLayout ,即用可配置格式的 Layout 輸出 

            fastlog.appender.A1.layout = fastlog::PatternLayout 

            # 這就是定義具體的輸出格式,后面會詳細講 

            fastlog.appender.A1.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

              

            # 這是定義第二個輸出設備,即 DailyFileAppender 按日期文件輸出,后面詳細講 

            fastlog.appender.R = fastlog::DailyFileAppender 

            fastlog.appender.R.File = fastlog.log 

            fastlog.appender.R.Path = . 

            fastlog.appender.R.FilePrefixName = 

            fastlog.appender.R.FileExtendName = .log 

            fastlog.appender.R.TimeFormatPattern = %Y%m%d%H 

            fastlog.appender.R.Schedule = HOURLY 

            fastlog.appender.R.layout = fastlog::PatternLayout 

            fastlog.appender.R.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

            下面講講主要用到的 Appender Layout 的用法

            2           fastlog::ConsoleAppender 輸出設備

            輸出到控制臺的 Appender ,比較簡單就不詳細講了。

            還有 fastlog::FileAppender 也比較簡單,實際用處也不大,配置跟下面類似。

            還有 fastlog::NullAppender 比較特殊,哪里也不輸出,主要用于測試。

            3           fastlog::DailyFileAppender 輸出設備

            按日期時間等自動切分日志的 Appender ,意思是會輸出到帶時間格式命名的文件,到新的時間段如下一天,則自動生成新的日期命名的文件輸出,日志會自動切分,推薦使用。

            舉例,按上面的例子,如果當前時間是 2006-8-10 12:00:00 ,日志會自動輸出到 2006081012.log 的文件中,如果當前時間變成 2006-8-10 13:01:00 ,則日志系統會自動創建名為 2006081013.log 的文件,并將新日志輸出到此新文件中。

            配置定義如下:

             

            # 定義日志輸出設備為 fastlog::DailyFileAppender 

            fastlog.appender.R = fastlog::DailyFileAppender 

              

            # 這個名字可以不用管它 

            fastlog.appender.R.File = fastlog.log 

              

            # 日志輸出的目錄,此例為當前目錄 

            fastlog.appender.R.Path = . 

              

            # 日志文件名的前綴,如果定義了如 mylog ,則日志文件名前會帶此名字 

            fastlog.appender.R.FilePrefixName = 

              

            # 日志文件名的擴展名,一般都為 .log 吧 

            fastlog.appender.R.FileExtendName = .log 

              

            # 日志文件的日期名格式,與其他日期格式化類似,詳見后面的 PatternLayout 

            fastlog.appender.R.TimeFormatPattern = %Y%m%d%H 

              

            # 日志自動切分可以按如下幾種自動滾動日志 

            #     MONTHLY( 每月 ) WEEKLY( 每周 ) DAILY( 每天 ) TWICE_DAILY( 每兩天 ) 

            #     HOURLY( 每小時 ) MINUTELY( 每分鐘 ) 

            fastlog.appender.R.Schedule = HOURLY 

              

            # 日志輸出的 Layout 定義 

            fastlog.appender.R.layout = fastlog::PatternLayout 

            fastlog.appender.R.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

             

            4           fastlog::RollingFileAppender 輸出設備

            按文件大小自動滾動日志的 Appender ,這種方式 Unix syslog 用的比較多。當日志文件達到一定大小后就自動換一個名字備份起來,所以當前日志文件始終不會超過一定大小。

            配置定義如下:

             

            # 定義日志輸出設備為 fastlog:: RollingFileAppender 

            fastlog.appender.R2 = fastlog::RollingFileAppender 

              

            # 定義日志輸出的文件,可以帶具體路徑 

            fastlog.appender.R2.File = fastlog.log 

              

            # 定義滾動日志的文件大小,超過此大小則滾動日志,可以用 KB 或 MB 等表示 

            fastlog.appender.R2.MaxFileSize = 200KB 

              

            # 定義最多備份的日志文件數目 

            fastlog.appender.R2.MaxBackupIndex = 10 

              

            # 日志輸出的 Layout 定義 

            fastlog.appender.R2.layout = fastlog::PatternLayout 

            fastlog.appender.R2.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

            5           fastlog::DailyRollingFileAppender 輸出設備

            按日期自動滾動日志的 Appender 。它與上面的 RollingFileAppender 類似,不同就是時間經過一定時間段就自動滾動日志備份起來。而時間的處理又與 fastlog::DailyFileAppender 類似。

            配置定義如下:

             

            # 定義日志輸出設備為 fastlog:: DailyRollingFileAppender 

            fastlog.appender.R3 = fastlog::DailyRollingFileAppender 

              

            # 定義日志輸出的文件,可以帶具體路徑 

            fastlog.appender.R3.File = fastlog.log 

              

            # 日志文件的日期名格式,與其他日期格式化類似,詳見后面的 PatternLayout 

            fastlog.appender.R3.TimeFormatPattern = %Y%m%d%H 

              

            # 日志自動切分可以按如下幾種自動滾動日志 

            #     MONTHLY( 每月 ) WEEKLY( 每周 ) DAILY( 每天 ) TWICE_DAILY( 每兩天 ) 

            #     HOURLY( 每小時 ) MINUTELY( 每分鐘 ) 

            fastlog.appender.R3.Schedule = HOURLY 

              

            # 日志輸出的 Layout 定義 

            fastlog.appender.R3.layout = fastlog::PatternLayout 

            fastlog.appender.R3.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

             

            6           fastlog::SocketAppender 輸出設備

            這個比較特殊,它可以將日志輸出到某臺服務器,通過指定日志服務器的 IP/ 域名和端口。

            配置定義如下:

             

             

            # 定義日志輸出設備為 fastlog:: SocketAppender 

            fastlog.appender.R4 = fastlog::SocketAppender 

              

            # 定義日志服務器的 hostname ,此服務器的服務可以統一保存日志 

            fastlog.appender.R4.host = 192.168.2.1 

              

            # 日志服務器的服務端口 

            fastlog.appender.R4.port = 9998 

              

            # 連接超時時間,按秒 

            fastlog.appender.R4.TimeOut = 10 

              

            # 日志輸出的 Layout 定義 

            fastlog.appender.R4.layout = fastlog::PatternLayout 

            fastlog.appender.R4.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

             

            下面介紹幾種 Layout

            7           fastlog::SimpleLayout 布局器

            這個非常,只是在輸出的原始日志前加個 Loglevel 和一個 ”-” ,如:

             

             

            DEBUG - This is the simple formatted log message 

             

             

            8           fastlog::TTCCLayout 布局器

            這是一種缺省的帶格式輸出的布局器,其格式由時間、線程 ID Logger NDC 組成( consists of time, thread, Logger and nested diagnostic context information, hence the name )。 TTCCLayout 在使用時可以選擇顯示本地時間或 GMT 時間,缺省是按照本地時間顯示。

            典型輸出如下:

             

            10-16-06 12:12:23,321 [1075298944] DEBUG log <> - this is a TTCCLayout log format

             

             

            9           fastlog::PatternLayout 布局器

            這是一種有詞法分析功能的模式布局器,應用最廣泛,也最強大,推薦使用,下面詳細介紹。

            用戶可以根據一些定義好的標識符自定義輸出格式,如上面的例子:

             

             

            # 日志輸出的 Layout 定義 

            fastlog.appender.R4.layout = fastlog::PatternLayout 

            fastlog.appender.R4.layout.ConversionPattern = %D
            {%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 

             

             

                      其中的 %D{%Y-%m-%d %H:%M:%S.%q} [%c:%R:%T]-[%5p] %m %n 即是一種輸出模式。

            下面詳細介紹這些標識符的定義:

            ( 1 ) "%%" ,轉義為 % ,即 pattern = "%%" 時輸出 "%" 

            ( 2 ) "%c" ,輸出 logger 名稱,比如 pattern ="%c" 時輸出 : "test.logger.mytest " ,也可以控制 logger 名稱的顯示層次,比如 "%c
            {1}" 時輸出 "test_logger" ,其中數字表示層次。 

            ( 3 ) "%D" ,顯示本地時間,當 pattern ="%D" 時輸出 :"2006-8-10 20:55:25" , %d 顯示標準時間。還可以通過 %d
            {} 定義更詳細的顯示格式,比如 %d{%H:%M:%s} 表示要顯示小時:分鐘:秒。 

            大括號中可顯示的預定義標識符如下: 

            %a            表示禮拜幾,英文縮寫形式,比如 "Fri" 

            %A           表示禮拜幾,比如 "Friday" 

            %b             表示幾月份,英文縮寫形式,比如 "Oct" 

            %B           表示幾月份, "October" 

            %c            標準的日期+時間格式,如 "Sat Oct 16 18:56:19 2006" 

            %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            表示本周是今年的第幾個禮拜,以周日為第一天開始計算 (0-53) ,如 "41" 

            %w            表示禮拜幾, (0-6, 禮拜天為 0) ,如 "6" 

            %W           表示本周是今年的第幾個禮拜,以周一為第一天開始計算 (0-53) ,如 "41" 

            %x             標準的日期格式,如 "08/10/06" 

            %X            標準的時間格式,如 "19:02:34" 

            %y             兩位數的年份 (0-99) ,如 "06" 

            %Y            四位數的年份,如 "2006" 

            %Z            時區名,比如 "GMT" 

              

            ( 4 ) "%F" ,輸出當前記錄器所在的文件名稱,比如 pattern ="%F" 時輸出 : "main.cpp" 

            ( 5 ) "%L" ,輸出當前記錄器所在的文件行號,比如 pattern ="%L" 時輸出 : "51" 

            ( 6 ) "%l" ,輸出當前記錄器所在的文件名稱和行號,比如 pattern ="%L" 時輸出 :     "main.cpp:51" 

            ( 7 ) "%m" ,輸出原始信息,比如 pattern ="%m" 時輸出 : "this a test log" 。 

            ( 8 ) "%n" ,換行符 

            ( 9 ) "%p" ,輸出 LogLevel ,比如 pattern ="%p" 時輸出 : "DEBUG" 

            ( 10 ) "%R" ,輸出記錄器所在的進程 ID ,比如 pattern ="%R" 時輸出 : "567" 

            ( 11 ) "%T" ,輸出記錄器所在的線程 ID ,比如 pattern ="%T" 時輸出 : "2332" 

            ( 12 ) "%x" ,嵌套診斷上下文 NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息。 

            ( 13 )格式對齊,比如 pattern ="%-10m" 時表示左對齊,寬度是 10 ,此時會輸出 "teststr   " ,當然其它的控制字符也可以相同的方式來使用,比如 "%-12d" , "%-5p" 等。 

              

             

             

             

             

            C++ 通用框架的設計 作者: naven 日期: 2006-8-10

             

            posted on 2006-08-10 23:20 Javen-Studio 閱讀(1542) 評論(2)  編輯 收藏 引用

            評論

            # re: fastlog的使用 2009-06-30 20:59 DZ
            向樓主請假一個問題哦

            要使用fastlog需要配置什么?fastlog是否支持跨平臺,在Linux和arm上使用的情況怎么樣呢?

            我在網上想搜一下fastlog的主頁,可是沒有找到,樓主能推薦一些關于fastlog的資料么?  回復  更多評論
              

            # re: fastlog的使用 2009-07-05 00:37 navy
            感謝支持,fastlog是javen庫的一部份,現在有一個linux版本,請到這里下載https://sourceforge.net/projects/javen/  回復  更多評論
              

            亚洲国产精品无码久久一线| 国产精品嫩草影院久久| 亚洲伊人久久成综合人影院| 2020国产成人久久精品| 久久久精品人妻一区二区三区蜜桃| 亚洲乱码精品久久久久..| 久久精品国产99国产电影网 | 国产亚州精品女人久久久久久| 伊人久久大香线蕉影院95| 久久精品免费全国观看国产| 久久久久无码精品国产| 午夜精品久久久久久久无码| 精品国际久久久久999波多野 | 久久亚洲国产成人精品性色| 国产2021久久精品| 精品久久久久久久无码 | 久久久久亚洲AV无码专区网站| 久久久久久国产精品美女| 国产精品99久久久久久www| 性高湖久久久久久久久| 久久国产福利免费| 精品国产福利久久久| 精品国产99久久久久久麻豆| 国产精品久久久久乳精品爆| 日产精品久久久久久久| 97香蕉久久夜色精品国产| 久久久久亚洲AV成人网人人网站 | 色噜噜狠狠先锋影音久久| 亚洲va久久久噜噜噜久久天堂| 久久精品国产99久久久香蕉| 99久久这里只有精品| 久久精品国产亚洲AV嫖农村妇女| 2020国产成人久久精品| 久久综合久久美利坚合众国| 久久男人AV资源网站| 久久久久亚洲AV无码专区网站| 99久久综合狠狠综合久久| 国产成人精品久久综合| 国产高清国内精品福利99久久| 日韩一区二区久久久久久| 国产激情久久久久影院老熟女免费|