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

            飄雪

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              31 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks
                改進(jìn)log4c的時(shí)間戳結(jié)構(gòu):

                log4c里對(duì)于事件時(shí)間戳的定義是這樣的:
            1 #ifndef _WIN32
            2     struct timeval evt_timestamp;
            3 #else
            4     FILETIME evt_timestamp;
            5 #endif
               
                這個(gè)不用說(shuō)是很惡了,存的是各個(gè)平臺(tái)的api得到的原始時(shí)間,格式化的時(shí)候還要按不同平臺(tái)寫不同的格式化代碼,而我們輸出日志的時(shí)候通常是按年月日時(shí)分秒的結(jié)構(gòu)來(lái)輸出,存一個(gè)通用的結(jié)構(gòu)更好,time.h里就有一個(gè)比較好的結(jié)構(gòu)struct tm, 可以使用gmtime或localtime來(lái)得到。

             1 struct tm {
             2         int tm_sec;     /* seconds after the minute - [0,59] */
             3         int tm_min;     /* minutes after the hour - [0,59] */
             4         int tm_hour;    /* hours since midnight - [0,23] */
             5         int tm_mday;    /* day of the month - [1,31] */
             6         int tm_mon;     /* months since January - [0,11] */
             7         int tm_year;    /* years since 1900 */
             8         int tm_wday;    /* days since Sunday - [0,6] */
             9         int tm_yday;    /* days since January 1 - [0,365] */
            10         int tm_isdst;   /* daylight savings time flag */
            11         };

                時(shí)間精確到秒,而且可惜的是,這些函數(shù)的跨平臺(tái)性不夠好,windows ce上就沒(méi)有,所以定義一個(gè)通用的時(shí)間結(jié)構(gòu)如下:

             1 typedef struct 
             2 {
             3     int tm_milli;   /* millisecond - [0,999] */
             4     int tm_sec;     /* seconds after the minute - [0,59] */
             5     int tm_min;     /* minutes after the hour - [0,59] */
             6     int tm_hour;    /* hours since midnight - [0,23] */
             7     int tm_mday;    /* day of the month - [1,31] */
             8     int tm_mon;     /* months since January - [0,11] */
             9     int tm_year;    /* years since 1900 */
            10     int tm_wday;    /* days since Sunday - [0,6] */
            11     int tm_yday;    /* days since January 1 - [0,365] */
            12 } log4c_common_time_t;

                跟struct tm相比,增加了一個(gè)tm_milli,因?yàn)橐蕾嚻脚_(tái)相關(guān)api的話,可以取到更精確的時(shí)間。這樣輸出的時(shí)候把它的fields格式化就可以了。

                接下來(lái)就是取當(dāng)前時(shí)間戳的函數(shù)來(lái),跟平臺(tái)相關(guān),支持struct tm,localtime的版本如下,精度為秒:

             1 void xp_gettimeofday(log4c_common_time_t* p,void* reserve)
             2 {
             3     struct tm tm;
             4     time_t t = time(0);
             5     tm = *localtime(&t);
             6 
             7     p->tm_hour    = tm.tm_hour;
             8     p->tm_isdst   = tm.tm_isdst;
             9     p->tm_mday    = tm.tm_mday;
            10     p->tm_milli   = 0;
            11     p->tm_min     = tm.tm_min;
            12     p->tm_mon     = tm.tm_mon;
            13     p->tm_sec     = tm.tm_sec;
            14     p->tm_wday    = tm.tm_wday;
            15     p->tm_yday    = tm.tm_yday;
            16     p->tm_year    = tm.tm_year + 1900;
            17 }

                Windows CE使用的版本如下,精度為毫秒,當(dāng)然windows也可以使用:

             1 void xp_gettimeofday(log4c_common_time_t* p)
             2 {
             3     SYSTEMTIME time;
             4     GetSystemTime(&time);
             5     p->tm_milli    = time.wMilliseconds;
             6     p->tm_sec    = time.wSecond;
             7     p->tm_min    = time.wMinute;
             8     p->tm_hour    = time.wHour;
             9     p->tm_mday    = time.wDay;
            10     p->tm_mon    = time.wMonth;
            11     p->tm_wday    = time.wDayOfWeek;
            12     p->tm_year    = time.wYear;
            13 }


            posted on 2009-01-05 11:32 飄雪 閱讀(1467) 評(píng)論(1)  編輯 收藏 引用

            Feedback

            # re: 改進(jìn)log4c(2) 2009-01-05 17:19 洪松
            學(xué)習(xí)了,謝謝  回復(fù)  更多評(píng)論
              


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久久无码人妻精品无码| 99久久精品无码一区二区毛片| 麻豆精品久久精品色综合| 77777亚洲午夜久久多喷| 亚洲精品无码久久久| 久久精品国产只有精品66 | 99久久婷婷国产综合精品草原| 国内精品人妻无码久久久影院 | 国产香蕉97碰碰久久人人| 免费精品99久久国产综合精品| 国产精品无码久久久久久| 久久精品男人影院| 亚洲综合婷婷久久| 亚洲Av无码国产情品久久| 中文字幕无码久久人妻| 99久久精品国产一区二区 | 国产免费久久精品99re丫y| 久久永久免费人妻精品下载| 精品久久久噜噜噜久久久| 国产AV影片久久久久久| 亚洲婷婷国产精品电影人久久 | 999久久久无码国产精品| 99久久精品免费| 久久精品国产亚洲AV香蕉| 激情伊人五月天久久综合| 久久AAAA片一区二区| 久久精品日日躁夜夜躁欧美| 99久久精品费精品国产一区二区 | 午夜精品久久久久久久久| 日韩精品久久久久久| 久久久久久精品无码人妻| 99精品久久精品一区二区| 亚洲性久久久影院| 97久久精品无码一区二区 | 狠狠色丁香婷婷久久综合不卡| 亚洲国产日韩欧美久久| 国产精品欧美久久久天天影视| 一本色道久久88综合日韩精品 | 伊人久久大香线蕉综合影院首页 | 久久久免费观成人影院| 国产亚洲欧美精品久久久|