日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python logging模塊使用

系統(tǒng) 1974 0

python logging模塊使用

?

?

?

?logging模塊

?

日志記錄的重要性

            在開(kāi)發(fā)過(guò)程中,我們可以printf或者Debug來(lái)排查問(wèn)題。
但是在生產(chǎn)環(huán)境中(黑盒環(huán)境)出現(xiàn)問(wèn)題,我們并不能知道在運(yùn)行的環(huán)境中的哪個(gè)地方出現(xiàn)了問(wèn)題。如果我們當(dāng)時(shí)有日志記錄,我們就可以方便地追蹤到在當(dāng)時(shí)運(yùn)行過(guò)程中出現(xiàn)了怎樣的狀況,從而排查問(wèn)題。
日志記錄是非常有必要的,任何一款軟件如果沒(méi)有標(biāo)準(zhǔn)的日志記錄,都不能算作一個(gè)合格的軟件。作為開(kāi)發(fā)者,我們需要重視并做好日志記錄過(guò)程。

          

logging的工作框圖

python logging模塊使用_第1張圖片

  • Logger:即 Logger Main Class,是我們進(jìn)行日志記錄時(shí)創(chuàng)建的對(duì)象,我們可以調(diào)用它的方法傳入日志模板和信息,來(lái)生成一條條日志記錄,稱作 Log Record。
  • Log Record:就代指生成的一條條日志記錄。
  • Handler:即用來(lái)處理日志記錄的類,它可以將 Log Record 輸出到我們指定的日志位置和存儲(chǔ)形式等,如我們可以指定將日志通過(guò) FTP 協(xié)議記錄到遠(yuǎn)程的服務(wù)器上,Handler 就會(huì)幫我們完成這些事情。
  • Formatter:實(shí)際上生成的 Log Record 也是一個(gè)個(gè)對(duì)象,那么我們想要把它們保存成一條條我們想要的日志文本的話,就需要有一個(gè)格式化的過(guò)程,那么這個(gè)過(guò)程就由 Formatter 來(lái)完成,返回的就是日志字符串,然后傳回給 Handler 來(lái)處理。
  • Filter:另外保存日志的時(shí)候我們可能不需要全部保存,我們可能只需要保存我們想要的部分就可以了,所以保存前還需要進(jìn)行一下過(guò)濾,留下我們想要的日志,如只保存某個(gè)級(jí)別的日志,或只保存包含某個(gè)關(guān)鍵字的日志等,那么這個(gè)過(guò)濾過(guò)程就交給 Filter 來(lái)完成。
  • Parent Handler:Handler 之間可以存在分層關(guān)系,以使得不同 Handler 之間共享相同功能的代碼。

?

logging 模塊相比 print 有這么幾個(gè)優(yōu)點(diǎn):

            1.可以在 logging 模塊中設(shè)置日志等級(jí),在不同的版本(如開(kāi)發(fā)環(huán)境、生產(chǎn)環(huán)境)上通過(guò)設(shè)置不同的輸出等級(jí)來(lái)記錄對(duì)應(yīng)的日志,非常靈活。
2.print 的輸出信息都會(huì)輸出到標(biāo)準(zhǔn)輸出流中,而 logging 模塊就更加靈活,可以設(shè)置輸出到任意位置,如寫入文件、寫入遠(yuǎn)程服務(wù)器等。
3.logging 模塊具有靈活的配置和格式化功能,如配置輸出當(dāng)前模塊信息、運(yùn)行時(shí)間等,相比 print 的字符串格式化更加方便易用。

          

?

?

logging模塊基本使用

?

簡(jiǎn)單示例

            import
            
               logging  
logging.debug('debug message'
              
                )  
logging.info('info message'
                
                  )  
logging.warning('warning message'
                  
                    )  
logging.error('error message'
                    
                      )  
logging.critical('critical message')  
                    
                  
                
              
            
          

輸出:

WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message

可見(jiàn),默認(rèn)情況下Python的logging模塊將日志打印到了標(biāo)準(zhǔn)輸出中,且只顯示了大于等于WARNING級(jí)別的日志,這說(shuō)明默認(rèn)的日志級(jí)別設(shè)置為WARNING(日志級(jí)別等級(jí)CRITICAL > ERROR > WARNING >?INFO > DEBUG > NOTSET),默認(rèn)的日志格式為日志級(jí)別:Logger名稱:用戶輸出消息。

?

靈活配置日志級(jí)別,日志格式,輸出位置

            import
            
               logging  
logging.basicConfig(level=
              
                logging.DEBUG,  
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
                
                  ,  
                    datefmt='%a, %d %b %Y %H:%M:%S'
                  
                    ,  
                    filename='/tmp/test.log'
                    
                      ,  
                    filemode='w'
                      
                        ) logging.debug('debug message'
                        
                          ) logging.info('info message'
                          
                            ) logging.warning('warning message'
                            
                              ) logging.error('error message'
                              
                                ) logging.critical('critical message')
                              
                            
                          
                        
                      
                    
                  
                
              
            
          

?

查看輸出:
cat /tmp/test.log?
Mon, 05 May 2014 16:29:53 test_logging.py[line:9] DEBUG debug message
Mon, 05 May 2014 16:29:53 test_logging.py[line:10] INFO info message
Mon, 05 May 2014 16:29:53 test_logging.py[line:11] WARNING warning message
Mon, 05 May 2014 16:29:53 test_logging.py[line:12] ERROR error message
Mon, 05 May 2014 16:29:53 test_logging.py[line:13] CRITICAL critical message

可見(jiàn)在logging.basicConfig()函數(shù)中可通過(guò)具體參數(shù)來(lái)更改logging模塊默認(rèn)行為,可用參數(shù)有
filename:用指定的文件名創(chuàng)建FiledHandler(后邊會(huì)具體講解handler的概念),這樣日志會(huì)被存儲(chǔ)在指定的文件中。
filemode:文件打開(kāi)方式,在指定了filename時(shí)使用這個(gè)參數(shù),默認(rèn)值為“a”還可指定為“w”。
format:指定handler使用的日志顯示格式。?
datefmt:指定日期時(shí)間格式。?
level:設(shè)置rootlogger(后邊會(huì)講解具體概念)的日志級(jí)別?
stream:用指定的stream創(chuàng)建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')),默認(rèn)為sys.stderr。若同時(shí)列出了filename和stream兩個(gè)參數(shù),則stream參數(shù)會(huì)被忽略。

format參數(shù)中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數(shù)字形式的日志級(jí)別
%(levelname)s 文本形式的日志級(jí)別
%(pathname)s 調(diào)用日志輸出函數(shù)的模塊的完整路徑名,可能沒(méi)有
%(filename)s 調(diào)用日志輸出函數(shù)的模塊的文件名
%(module)s 調(diào)用日志輸出函數(shù)的模塊名
%(funcName)s 調(diào)用日志輸出函數(shù)的函數(shù)名
%(lineno)d 調(diào)用日志輸出函數(shù)的語(yǔ)句所在的代碼行
%(created)f 當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的表示時(shí)間的浮 點(diǎn)數(shù)表示
%(relativeCreated)d 輸出日志信息時(shí)的,自Logger創(chuàng)建以 來(lái)的毫秒數(shù)
%(asctime)s 字符串形式的當(dāng)前時(shí)間。默認(rèn)格式是 “2003-07-08 16:49:45,896”。逗號(hào)后面的是毫秒
%(thread)d 線程ID。可能沒(méi)有
%(threadName)s 線程名。可能沒(méi)有
%(process)d 進(jìn)程ID。可能沒(méi)有
%(message)s用戶輸出的消息

?

?

Logger對(duì)象

python的logging模塊(logging是線程安全的)給應(yīng)用程序提供了標(biāo)準(zhǔn)的日志信息輸出接口。logging不僅支持把日志輸出到文件,還支持把日志輸出到TCP/UDP服務(wù)器,EMAIL服務(wù)器,HTTP服務(wù)器,UNIX的syslog系統(tǒng)等。在logging中主要有四個(gè)概念:logger、handler、filter和formatter。

Logger對(duì)象提供應(yīng)用程序可直接使用的接口

Handler發(fā)送日志到適當(dāng)?shù)哪康牡?

Filter提供了過(guò)濾日志信息的方法

Formatter指定日志顯示格式。

?

簡(jiǎn)單示例

          

?import ?logging

            
              logger 
            
            =
            
               logging.getLogger()

            
            
              #
            
            
               創(chuàng)建一個(gè)handler,用于寫入日志文件
            
            
fh = logging.FileHandler(
            
              '
            
            
              test.log
            
            
              '
            
            
              )


            
            
              #
            
            
               再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
            
            
ch =
            
               logging.StreamHandler()

              
#設(shè)置格式樣本 formatter = logging.Formatter( ' %(asctime)s - %(name)s - %(levelname)s - %(message)s ' )
#設(shè)置格式 fh.setFormatter(formatter)
ch.setFormatter(formatter) logger.addHandler(fh)
# logger對(duì)象可以添加多個(gè)fh和ch對(duì)象 logger.addHandler(ch) logger.debug( ' logger debug message ' ) logger.info( ' logger info message ' ) logger.warning( ' logger warning message ' ) logger.error( ' logger error message ' ) logger.critical( ' logger critical message ' )

?Logger是一個(gè)樹(shù)形層級(jí)結(jié)構(gòu),輸出信息之前都要獲得一個(gè)Logger(如果沒(méi)有顯示的獲取則自動(dòng)創(chuàng)建并使用root Logger,如第一個(gè)例子所示)。
?logger = logging.getLogger()返回一個(gè)默認(rèn)的Logger也即root Logger,并應(yīng)用默認(rèn)的日志級(jí)別、Handler和Formatter設(shè)置。
當(dāng)然也可以通過(guò)Logger.setLevel(lel)指定最低的日志級(jí)別,可用的日志級(jí)別有l(wèi)ogging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR、logging.CRITICAL。
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical()輸出不同級(jí)別的日志,只有日志等級(jí)大于或等于設(shè)置的日志級(jí)別的日志才會(huì)被輸出。?

            輸出:
            
2014-05-06 12:54:43,222 - root - WARNING - logger warning message 2014-05-06 12:54:43,223 - root - ERROR - logger error message 2014-05-06 12:54:43,224 - root - CRITICAL - logger critical message

注意:logger = logging.getLogger()返回的Logger名為root。這里沒(méi)有用logger.setLevel(logging.Debug)顯示的為logger設(shè)置日志級(jí)別,所以使用默認(rèn)的日志級(jí)別WARNIING,故結(jié)果只輸出了大于等于WARNIING級(jí)別的信息。

?

?

創(chuàng)建兩個(gè)logger對(duì)象

            
              import
            
            
               logging


            
            
              #
            
            
               創(chuàng)建一個(gè)handler,用于寫入日志文件
            
            
fh = logging.FileHandler(
            
              '
            
            
              test.log
            
            
              '
            
            
              )


            
            
              #
            
            
               再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
            
            
ch =
            
               logging.StreamHandler()

logger1 
            
            = logging.getLogger(
            
              '
            
            
              mylogger
            
            
              '
            
            
              )
logger1.setLevel(logging.DEBUG)

logger2 
            
            = logging.getLogger(
            
              '
            
            
              mylogger
            
            
              '
            
            
              )
logger2.setLevel(logging.INFO)

logger1.addHandler(fh)
logger1.addHandler(ch)

logger2.addHandler(fh)
logger2.addHandler(ch)

logger1.debug(
            
            
              '
            
            
              logger1 debug message
            
            
              '
            
            
              )
logger1.info(
            
            
              '
            
            
              logger1 info message
            
            
              '
            
            
              )
logger1.warning(
            
            
              '
            
            
              logger1 warning message
            
            
              '
            
            
              )
logger1.error(
            
            
              '
            
            
              logger1 error message
            
            
              '
            
            
              )
logger1.critical(
            
            
              '
            
            
              logger1 critical message
            
            
              '
            
            
              )

logger2.debug(
            
            
              '
            
            
              logger2 debug message
            
            
              '
            
            
              )
logger2.info(
            
            
              '
            
            
              logger2 info message
            
            
              '
            
            
              )
logger2.warning(
            
            
              '
            
            
              logger2 warning message
            
            
              '
            
            
              )
logger2.error(
            
            
              '
            
            
              logger2 error message
            
            
              '
            
            
              )
logger2.critical(
            
            
              '
            
            
              logger2 critical message
            
            
              '
            
            )
          

?

            
              輸出:
              
logger1 info message logger1 warning message logger1 error message logger1 critical message logger2 info message logger2 warning message logger2 error message logger2 critical message
            我們明明通過(guò)logger1.setLevel(logging.DEBUG)將logger1的日志級(jí)別設(shè)置為了DEBUG,為何顯示的時(shí)候沒(méi)有顯示出DEBUG級(jí)別的日志信息,而是從INFO級(jí)別的日志開(kāi)始顯示呢?

       原來(lái)logger1和logger2對(duì)應(yīng)的是同一個(gè)Logger實(shí)例,只要logging.getLogger(name)中名稱參數(shù)name相同則返回的Logger實(shí)例就是同一個(gè),且僅有一個(gè),也即name與Logger實(shí)例一一對(duì)應(yīng)。在logger2實(shí)例中通過(guò)logger2.setLevel(logging.INFO)設(shè)置mylogger的日志級(jí)別
            
為logging.INFO,所以最后logger1的輸出遵從了后來(lái)設(shè)置的日志級(jí)別。

兩個(gè)子對(duì)象與一個(gè)root對(duì)象

            
              import
            
            
               logging


            
            
              #
            
            
               創(chuàng)建一個(gè)handler,用于寫入日志文件
            
            
fh = logging.FileHandler(
            
              '
            
            
              test.log
            
            
              '
            
            
              )


            
            
              #
            
            
               再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
            
            
ch =
            
               logging.StreamHandler()

logger 
            
            =
            
               logging.getLogger()

logger1 
            
            = logging.getLogger(
            
              '
            
            
              mylogger
            
            
              '
            
            
              )
logger1.setLevel(logging.DEBUG)

logger2 
            
            = logging.getLogger(
            
              '
            
            
              mylogger
            
            
              '
            
            
              )
logger2.setLevel(logging.INFO)

logger.addHandler(fh)
logger.addHandler(ch)


logger1.addHandler(fh)
logger1.addHandler(ch)

logger2.addHandler(fh)
logger2.addHandler(ch)

logger.debug(
            
            
              '
            
            
              logger debug message
            
            
              '
            
            
              )
logger.info(
            
            
              '
            
            
              logger info message
            
            
              '
            
            
              )
logger.warning(
            
            
              '
            
            
              logger warning message
            
            
              '
            
            
              )
logger.error(
            
            
              '
            
            
              logger error message
            
            
              '
            
            
              )
logger.critical(
            
            
              '
            
            
              logger critical message
            
            
              '
            
            
              )

logger1.debug(
            
            
              '
            
            
              logger1 debug message
            
            
              '
            
            
              )
logger1.info(
            
            
              '
            
            
              logger1 info message
            
            
              '
            
            
              )
logger1.warning(
            
            
              '
            
            
              logger1 warning message
            
            
              '
            
            
              )
logger1.error(
            
            
              '
            
            
              logger1 error message
            
            
              '
            
            
              )
logger1.critical(
            
            
              '
            
            
              logger1 critical message
            
            
              '
            
            
              )

logger2.debug(
            
            
              '
            
            
              logger2 debug message
            
            
              '
            
            
              )
logger2.info(
            
            
              '
            
            
              logger2 info message
            
            
              '
            
            
              )
logger2.warning(
            
            
              '
            
            
              logger2 warning message
            
            
              '
            
            
              )
logger2.error(
            
            
              '
            
            
              logger2 error message
            
            
              '
            
            
              )
logger2.critical(
            
            
              '
            
            
              logger2 critical message
            
            
              '
            
            )
          

?

            
              輸出:
              
logger warning message logger error message logger critical message logger1 info message logger1 info message logger1 warning message logger1 warning message logger1 error message logger1 error message logger1 critical message logger1 critical message logger2 info message logger2 info message logger2 warning message logger2 warning message logger2 error message logger2 error message logger2 critical message logger2 critical message
            為什么logger1、logger2對(duì)應(yīng)的每個(gè)輸出分別顯示兩次?
       這是因?yàn)槲覀兺ㄟ^(guò)logger = logging.getLogger()顯示的創(chuàng)建了root Logger,而logger1 = logging.getLogger('mylogger')創(chuàng)建了root Logger的孩子(root.)mylogger,logger2同樣。而孩子,孫子,重孫……既會(huì)將消息分發(fā)給他的handler進(jìn)行處理也會(huì)傳遞
            
給所有的祖先Logger處理。

? ok,那么現(xiàn)在我們把

# logger.addHandler(fh)

# logger.addHandler(ch) ?注釋掉,我們?cè)賮?lái)看效果:

            
              輸出:
              
logger warning message logger error message logger critical message logger1 info message logger1 warning message logger1 error message logger1 critical message logger2 info message logger2 warning message logger2 error message logger2 critical message
            因?yàn)槲覀冏⑨屃薼ogger對(duì)象顯示的位置,所以才用了默認(rèn)方式,即標(biāo)準(zhǔn)輸出方式。因?yàn)樗母讣?jí)沒(méi)有設(shè)置文件顯示方式,所以在這里只打印了一次。

孩子,孫子,重孫……可逐層繼承來(lái)自祖先的日志級(jí)別、Handler、Filter設(shè)置,也可以通過(guò)Logger.setLevel(lel)、Logger.addHandler(hdlr)、Logger.removeHandler(hdlr)、Logger.addFilter(filt)、Logger.removeFilter(filt)。
            
設(shè)置自己特別的日志級(jí)別、Handler、Filter。若不設(shè)置則使用繼承來(lái)的值。

Filter

            
                限制只有滿足過(guò)濾規(guī)則的日志才會(huì)輸出。
     比如我們定義了filter 
            
            = logging.Filter(
            
              '
            
            
              a.b.c
            
            
              '
            
            
              ),并將這個(gè)Filter添加到了一個(gè)Handler上,則使用該Handler的Logger中只有名字帶          a.b.c前綴的Logger才能輸出其日志。

 
     filter 
            
            = logging.Filter(
            
              '
            
            
              mylogger
            
            
              '
            
            
              ) 

     logger.addFilter(filter)

     這是只對(duì)logger這個(gè)對(duì)象進(jìn)行篩選

     如果想對(duì)所有的對(duì)象進(jìn)行篩選,則:

      filter 
            
            = logging.Filter(
            
              '
            
            
              mylogger
            
            
              '
            
            
              ) 

      fh.addFilter(filter)

      ch.addFilter(filter)

      這樣,所有添加fh或者ch的logger對(duì)象都會(huì)進(jìn)行篩選。
            
          

?

              
                import
              
              
                 logging

logger 
              
              =
              
                 logging.getLogger()

              
              
                #
              
              
                 創(chuàng)建一個(gè)handler,用于寫入日志文件
              
              
fh = logging.FileHandler(
              
                '
              
              
                test.log
              
              
                '
              
              
                )


              
              
                #
              
              
                 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)
              
              
ch =
              
                 logging.StreamHandler()

formatter 
              
              = logging.Formatter(
              
                '
              
              
                %(asctime)s - %(name)s - %(levelname)s - %(message)s
              
              
                '
              
              
                )

fh.setFormatter(formatter)
ch.setFormatter(formatter)


              
              
                #
              
              
                 定義一個(gè)filter
              
              
filter = logging.Filter(
              
                '
              
              
                mylogger
              
              
                '
              
              
                )
fh.addFilter(filter)
ch.addFilter(filter)


              
              
                #
              
              
                 logger.addFilter(filter)
              
              
                logger.addHandler(fh)
logger.addHandler(ch)




logger.setLevel(logging.DEBUG)

logger.debug(
              
              
                '
              
              
                logger debug message
              
              
                '
              
              
                )
logger.info(
              
              
                '
              
              
                logger info message
              
              
                '
              
              
                )
logger.warning(
              
              
                '
              
              
                logger warning message
              
              
                '
              
              
                )
logger.error(
              
              
                '
              
              
                logger error message
              
              
                '
              
              
                )
logger.critical(
              
              
                '
              
              
                logger critical message
              
              
                '
              
              
                )


              
              
                #
              
              
                #################################################
              
              
logger1 = logging.getLogger(
              
                '
              
              
                mylogger
              
              
                '
              
              
                )
logger1.setLevel(logging.DEBUG)

logger2 
              
              = logging.getLogger(
              
                '
              
              
                mylogger
              
              
                '
              
              
                )
logger2.setLevel(logging.INFO)

logger1.addHandler(fh)
logger1.addHandler(ch)

logger2.addHandler(fh)
logger2.addHandler(ch)

logger1.debug(
              
              
                '
              
              
                logger1 debug message
              
              
                '
              
              
                )
logger1.info(
              
              
                '
              
              
                logger1 info message
              
              
                '
              
              
                )
logger1.warning(
              
              
                '
              
              
                logger1 warning message
              
              
                '
              
              
                )
logger1.error(
              
              
                '
              
              
                logger1 error message
              
              
                '
              
              
                )
logger1.critical(
              
              
                '
              
              
                logger1 critical message
              
              
                '
              
              
                )

logger2.debug(
              
              
                '
              
              
                logger2 debug message
              
              
                '
              
              
                )
logger2.info(
              
              
                '
              
              
                logger2 info message
              
              
                '
              
              
                )
logger2.warning(
              
              
                '
              
              
                logger2 warning message
              
              
                '
              
              
                )
logger2.error(
              
              
                '
              
              
                logger2 error message
              
              
                '
              
              
                )
logger2.critical(
              
              
                '
              
              
                logger2 critical message
              
              
                '
              
              )
            
參考示例1

?

              
                #
              
              
                coding:utf-8  
              
              
                import
              
              
                 logging  
  

              
              
                #
              
              
                 創(chuàng)建一個(gè)logger    
              
              
logger =
              
                 logging.getLogger()  
  
logger1 
              
              = logging.getLogger(
              
                '
              
              
                mylogger
              
              
                '
              
              
                )  
logger1.setLevel(logging.DEBUG)  
  
logger2 
              
              = logging.getLogger(
              
                '
              
              
                mylogger
              
              
                '
              
              
                )  
logger2.setLevel(logging.INFO)  
  
logger3 
              
              = logging.getLogger(
              
                '
              
              
                mylogger.child1
              
              
                '
              
              
                )  
logger3.setLevel(logging.WARNING)  
  
logger4 
              
              = logging.getLogger(
              
                '
              
              
                mylogger.child1.child2
              
              
                '
              
              
                )  
logger4.setLevel(logging.DEBUG)  
  
logger5 
              
              = logging.getLogger(
              
                '
              
              
                mylogger.child1.child2.child3
              
              
                '
              
              
                )  
logger5.setLevel(logging.DEBUG)  
  

              
              
                #
              
              
                 創(chuàng)建一個(gè)handler,用于寫入日志文件    
              
              
fh = logging.FileHandler(
              
                '
              
              
                /tmp/test.log
              
              
                '
              
              
                )  
  

              
              
                #
              
              
                 再創(chuàng)建一個(gè)handler,用于輸出到控制臺(tái)    
              
              
ch =
              
                 logging.StreamHandler()  
  

              
              
                #
              
              
                 定義handler的輸出格式formatter    
              
              
formatter = logging.Formatter(
              
                '
              
              
                %(asctime)s - %(name)s - %(levelname)s - %(message)s
              
              
                '
              
              
                )  
fh.setFormatter(formatter)  
ch.setFormatter(formatter)  
  

              
              
                #
              
              
                定義一個(gè)filter  
              
              
                
#
              
              
                filter = logging.Filter('mylogger.child1.child2')  
              
              
                
#
              
              
                fh.addFilter(filter)    
              
              
                #
              
              
                 給logger添加handler    
              
              
                
#
              
              
                logger.addFilter(filter)  
              
              
                logger.addHandler(fh)  
logger.addHandler(ch)  
  

              
              
                #
              
              
                logger1.addFilter(filter)  
              
              
                logger1.addHandler(fh)  
logger1.addHandler(ch)  
  
logger2.addHandler(fh)  
logger2.addHandler(ch)  
  

              
              
                #
              
              
                logger3.addFilter(filter)  
              
              
                logger3.addHandler(fh)  
logger3.addHandler(ch)  
  

              
              
                #
              
              
                logger4.addFilter(filter)  
              
              
                logger4.addHandler(fh)  
logger4.addHandler(ch)  
  
logger5.addHandler(fh)  
logger5.addHandler(ch)  
  

              
              
                #
              
              
                 記錄一條日志    
              
              
logger.debug(
              
                '
              
              
                logger debug message
              
              
                '
              
              
                )  
logger.info(
              
              
                '
              
              
                logger info message
              
              
                '
              
              
                )  
logger.warning(
              
              
                '
              
              
                logger warning message
              
              
                '
              
              
                )  
logger.error(
              
              
                '
              
              
                logger error message
              
              
                '
              
              
                )  
logger.critical(
              
              
                '
              
              
                logger critical message
              
              
                '
              
              
                )  
  
logger1.debug(
              
              
                '
              
              
                logger1 debug message
              
              
                '
              
              
                )  
logger1.info(
              
              
                '
              
              
                logger1 info message
              
              
                '
              
              
                )  
logger1.warning(
              
              
                '
              
              
                logger1 warning message
              
              
                '
              
              
                )  
logger1.error(
              
              
                '
              
              
                logger1 error message
              
              
                '
              
              
                )  
logger1.critical(
              
              
                '
              
              
                logger1 critical message
              
              
                '
              
              
                )  
  
logger2.debug(
              
              
                '
              
              
                logger2 debug message
              
              
                '
              
              
                )  
logger2.info(
              
              
                '
              
              
                logger2 info message
              
              
                '
              
              
                )  
logger2.warning(
              
              
                '
              
              
                logger2 warning message
              
              
                '
              
              
                )  
logger2.error(
              
              
                '
              
              
                logger2 error message
              
              
                '
              
              
                )  
logger2.critical(
              
              
                '
              
              
                logger2 critical message
              
              
                '
              
              
                )  
  
logger3.debug(
              
              
                '
              
              
                logger3 debug message
              
              
                '
              
              
                )  
logger3.info(
              
              
                '
              
              
                logger3 info message
              
              
                '
              
              
                )  
logger3.warning(
              
              
                '
              
              
                logger3 warning message
              
              
                '
              
              
                )  
logger3.error(
              
              
                '
              
              
                logger3 error message
              
              
                '
              
              
                )  
logger3.critical(
              
              
                '
              
              
                logger3 critical message
              
              
                '
              
              
                )  
  
logger4.debug(
              
              
                '
              
              
                logger4 debug message
              
              
                '
              
              
                )  
logger4.info(
              
              
                '
              
              
                logger4 info message
              
              
                '
              
              
                )  
logger4.warning(
              
              
                '
              
              
                logger4 warning message
              
              
                '
              
              
                )  
logger4.error(
              
              
                '
              
              
                logger4 error message
              
              
                '
              
              
                )  
logger4.critical(
              
              
                '
              
              
                logger4 critical message
              
              
                '
              
              
                )  
  
logger5.debug(
              
              
                '
              
              
                logger5 debug message
              
              
                '
              
              
                )  
logger5.info(
              
              
                '
              
              
                logger5 info message
              
              
                '
              
              
                )  
logger5.warning(
              
              
                '
              
              
                logger5 warning message
              
              
                '
              
              
                )  
logger5.error(
              
              
                '
              
              
                logger5 error message
              
              
                '
              
              
                )  
logger5.critical(
              
              
                '
              
              
                logger5 critical message
              
              
                '
              
              )
            
參考示例2

?

              
                import
              
              
                 os

              
              
                import
              
              
                 time

              
              
                import
              
              
                 logging

              
              
                from
              
               config 
              
                import
              
              
                 settings



              
              
                def
              
              
                 get_logger(card_num, struct_time):

    
              
              
                if
              
               struct_time.tm_mday < 23
              
                :
        file_name 
              
              = 
              
                "
              
              
                %s_%s_%d
              
              
                "
              
               %(struct_time.tm_year, struct_time.tm_mon, 22
              
                )
    
              
              
                else
              
              
                :
        file_name 
              
              = 
              
                "
              
              
                %s_%s_%d
              
              
                "
              
               %(struct_time.tm_year, struct_time.tm_mon+1, 22
              
                )

    file_handler 
              
              =
              
                 logging.FileHandler(
        os.path.join(settings.USER_DIR_FOLDER, card_num, 
              
              
                '
              
              
                record
              
              
                '
              
              
                , file_name),
        encoding
              
              =
              
                '
              
              
                utf-8
              
              
                '
              
              
                
    )
    fmt 
              
              = logging.Formatter(fmt=
              
                "
              
              
                %(asctime)s :  %(message)s
              
              
                "
              
              
                )
    file_handler.setFormatter(fmt)

    logger1 
              
              = logging.Logger(
              
                '
              
              
                user_logger
              
              
                '
              
              , level=
              
                logging.INFO)
    logger1.addHandler(file_handler)
    
              
              
                return
              
               logger1
            
應(yīng)用示例

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 六盘水市| 乌兰县| 五河县| 隆化县| 新邵县| 湘潭县| 梁山县| 兴国县| 宣汉县| 类乌齐县| 汕尾市| 四川省| 大埔区| 灵山县| 监利县| 来宾市| 新疆| 余庆县| 恩施市| 榆树市| 金堂县| 突泉县| 临桂县| 通化市| 池州市| 保定市| 慈溪市| 陆川县| 名山县| 综艺| 宕昌县| 靖边县| 个旧市| 无锡市| 曲麻莱县| 贵溪市| 专栏| 沙湾县| 大余县| 当雄县| 南陵县|