• <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>
            <2006年10月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            • 隨筆 - 44
            • 文章 - 0
            • 評(píng)論 - 86
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類(lèi)(31)

            隨筆檔案(44)

            Mining

            最新隨筆

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            Pythong logging 到 Logging4cplus 的適配器

            Python 的logging 模塊的Socket 和 Logging4cplus 的 socket 的格式是不一樣的, 現(xiàn)實(shí)中需要將日志發(fā)送到logging4cplus 的服務(wù)器, 不得已, 寫(xiě)了個(gè) Python logging 模塊到 logging4cplus的Adapter

             1 #!/usr/bin/env python
             2 #-*- coding: gbk -*-
             3 from struct import pack, unpack 
             4 
             5 class BufferPack(object):    
             6     def __init__(self):
             7         self.buffer = ''
             8         
             9     def addChar(self, s, unsigned=False):
            10         self.buffer += pack(unsigned and '>b' or '>c', s )
            11 
            12     def addShort(self, s, unsigned=False):
            13         self.buffer += pack(unsigned and '>H' or '>h', s )
            14     
            15     def addInt(self, s, unsigned=False):
            16         self.buffer += pack(unsigned and '>I' or '>i', s )
            17     
            18     def addLong(self, s, unsigned=False):
            19         self.buffer += pack(unsigned and '>L' or '>l', s )
            20     
            21     def addString(self, s):
            22         self.addInt( len(s) ) 
            23         self.buffer += s 
            24     
            25     def addBuffer(self, s):
            26         self.buffer += s.buffer 
            27 
            28 class BufferUnpack(object):
            29     
            30     char_bits     = len( pack('>b', 0) ) 
            31     short_bits     = len( pack('>H', 0) ) 
            32     int_bits    = len( pack('>I', 0) ) 
            33     long_bits     = len( pack('>L', 0) )    
            34     
            35     def __init__(self, buffer):
            36         self.buffer = buffer 
            37         self.pos = 0
            38     
            39     def _read_item(self, unpackstr, len):
            40         v = unpack(unpackstr, self.buffer[self.pos:self.pos+len] )
            41         self.pos += len 
            42         return v 
            43     
            44     def readChar(self, unsigned=False):
            45         return self._read_item(unsigned and '<b' or '<c', self.char_bits)
            46     
            47     def readShort(self, unsigned=False):    
            48         return self._read_item(unsigned and '<H' or '<h', self.short_bits )
            49         
            50     def readInt(self, unsigned=False):
            51         return self._read_item(unsigned and '<I' or '<i', self.int_bits )
            52     
            53     def readLong(self, unsigned=False):
            54         return self._read_item(unsigned and '<L' or '<l', self.long_bits )
            55     
            56     def readString(self):
            57         len = self.readInt()
            58         v = self.buffer[self.pos:self.pos+len] 
            59         self.pos += len
            60         return v 
            61 
            62 def PackMessage( record ):
            63     bp = BufferPack()
            64     bp.addChar(2, True) 
            65     bp.addChar(1, True) 
            66     
            67     bp.addString("{log.servername}"
            68     bp.addString(record.name) 
            69     bp.addInt(record.levelno*1000
            70     bp.addString("")
            71     bp.addString(record.msg)
            72     bp.addString(str(record.threadName))
            73     bp.addString(str(record.process))
            74     bp.addInt( record.created ) 
            75     bp.addInt( record.msecs ) 
            76     bp.addString(record.filename)
            77     bp.addInt( 1 )     
            78     
            79     pkg = BufferPack()
            80     pkg.addInt(len(bp.buffer), True) 
            81     pkg.addBuffer( bp ) 
            82     
            83     return pkg.buffer
            84 
            85 if __name__=="__main__":
            86     import logging, logging.handlers 
            87     
            88     logger = logging.getLogger()
            89     logging.handlers.SocketHandler.makePickle = lambda self,rc : PackMessage(rc) 
            90     
            91     hdlr = logging.handlers.SocketHandler('{logserver.ip}'8888
            92     formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
            93     hdlr.setFormatter(formatter)
            94     logger.addHandler(hdlr)
            95     logger.setLevel(logging.NOTSET)
            96     
            97     logger.info("hello")

            使用的時(shí)候.
            1. 在logging 創(chuàng)建SocketHandler 的時(shí)候, 需要修改logging.handlers.SocketHandler.makePickle 為方法 PackMessage
            logging.handlers.SocketHandler.makePickle = lambda self,rc : PackMessage(rc)

            2. 需要修改代碼中的兩部分內(nèi)容 {log.servername} 和 {logserver.ip}

            posted on 2008-12-19 18:13 泡泡牛 閱讀(1006) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Develop

            欧美性大战久久久久久| 亚洲人成网站999久久久综合| 久久久91人妻无码精品蜜桃HD| 狠狠色丁香久久婷婷综合五月 | 欧美精品福利视频一区二区三区久久久精品 | 91精品国产9l久久久久| 欧美精品丝袜久久久中文字幕 | 精品久久久久久中文字幕大豆网| 99久久精品国产高清一区二区| 久久99精品国产99久久6| 亚洲国产视频久久| 99久久免费国产特黄| 欧美粉嫩小泬久久久久久久| 91久久福利国产成人精品| 久久最新免费视频| 精品熟女少妇aⅴ免费久久| 久久亚洲欧美国产精品| 久久97久久97精品免视看秋霞| 久久ZYZ资源站无码中文动漫| 久久久久久av无码免费看大片| 久久免费高清视频| 精品多毛少妇人妻AV免费久久| 成人免费网站久久久| 国产精品美女久久久| 久久久精品免费国产四虎| 久久久亚洲欧洲日产国码二区| 亚洲AV无码久久| 国产精品一区二区久久不卡| 亚洲精品第一综合99久久| 午夜视频久久久久一区 | 无码伊人66久久大杳蕉网站谷歌 | 欧美久久一区二区三区| 欧美麻豆久久久久久中文| 久久夜色精品国产亚洲| 国产—久久香蕉国产线看观看| 久久久精品人妻无码专区不卡| 久久亚洲国产精品123区| 久久国产乱子伦免费精品| 99久久99久久精品免费看蜜桃| 欧美日韩精品久久久久| 人人狠狠综合久久亚洲婷婷|