欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python logging模塊使用

系統 1812 0

python logging模塊使用

?

?

?

?logging模塊

?

日志記錄的重要性

            在開發過程中,我們可以printf或者Debug來排查問題。
但是在生產環境中(黑盒環境)出現問題,我們并不能知道在運行的環境中的哪個地方出現了問題。如果我們當時有日志記錄,我們就可以方便地追蹤到在當時運行過程中出現了怎樣的狀況,從而排查問題。
日志記錄是非常有必要的,任何一款軟件如果沒有標準的日志記錄,都不能算作一個合格的軟件。作為開發者,我們需要重視并做好日志記錄過程。

          

logging的工作框圖

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

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

?

logging 模塊相比 print 有這么幾個優點:

            1.可以在 logging 模塊中設置日志等級,在不同的版本(如開發環境、生產環境)上通過設置不同的輸出等級來記錄對應的日志,非常靈活。
2.print 的輸出信息都會輸出到標準輸出流中,而 logging 模塊就更加靈活,可以設置輸出到任意位置,如寫入文件、寫入遠程服務器等。
3.logging 模塊具有靈活的配置和格式化功能,如配置輸出當前模塊信息、運行時間等,相比 print 的字符串格式化更加方便易用。

          

?

?

logging模塊基本使用

?

簡單示例

            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

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

?

靈活配置日志級別,日志格式,輸出位置

            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

可見在logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有
filename:用指定的文件名創建FiledHandler(后邊會具體講解handler的概念),這樣日志會被存儲在指定的文件中。
filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。
format:指定handler使用的日志顯示格式。?
datefmt:指定日期時間格式。?
level:設置rootlogger(后邊會講解具體概念)的日志級別?
stream:用指定的stream創建StreamHandler??梢灾付ㄝ敵龅絪ys.stderr,sys.stdout或者文件(f=open('test.log','w')),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。

format參數中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 數字形式的日志級別
%(levelname)s 文本形式的日志級別
%(pathname)s 調用日志輸出函數的模塊的完整路徑名,可能沒有
%(filename)s 調用日志輸出函數的模塊的文件名
%(module)s 調用日志輸出函數的模塊名
%(funcName)s 調用日志輸出函數的函數名
%(lineno)d 調用日志輸出函數的語句所在的代碼行
%(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d 輸出日志信息時的,自Logger創建以 來的毫秒數
%(asctime)s 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒
%(thread)d 線程ID??赡軟]有
%(threadName)s 線程名。可能沒有
%(process)d 進程ID??赡軟]有
%(message)s用戶輸出的消息

?

?

Logger對象

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

Logger對象提供應用程序可直接使用的接口

Handler發送日志到適當的目的地

Filter提供了過濾日志信息的方法

Formatter指定日志顯示格式。

?

簡單示例

          

?import ?logging

            
              logger 
            
            =
            
               logging.getLogger()

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


            
            
              #
            
            
               再創建一個handler,用于輸出到控制臺
            
            
ch =
            
               logging.StreamHandler()

              
#設置格式樣本 formatter = logging.Formatter( ' %(asctime)s - %(name)s - %(levelname)s - %(message)s ' )
#設置格式 fh.setFormatter(formatter)
ch.setFormatter(formatter) logger.addHandler(fh)
# logger對象可以添加多個fh和ch對象 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是一個樹形層級結構,輸出信息之前都要獲得一個Logger(如果沒有顯示的獲取則自動創建并使用root Logger,如第一個例子所示)。
?logger = logging.getLogger()返回一個默認的Logger也即root Logger,并應用默認的日志級別、Handler和Formatter設置。
當然也可以通過Logger.setLevel(lel)指定最低的日志級別,可用的日志級別有logging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR、logging.CRITICAL。
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical()輸出不同級別的日志,只有日志等級大于或等于設置的日志級別的日志才會被輸出。?

            輸出:
            
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。這里沒有用logger.setLevel(logging.Debug)顯示的為logger設置日志級別,所以使用默認的日志級別WARNIING,故結果只輸出了大于等于WARNIING級別的信息。

?

?

創建兩個logger對象

            
              import
            
            
               logging


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


            
            
              #
            
            
               再創建一個handler,用于輸出到控制臺
            
            
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
            我們明明通過logger1.setLevel(logging.DEBUG)將logger1的日志級別設置為了DEBUG,為何顯示的時候沒有顯示出DEBUG級別的日志信息,而是從INFO級別的日志開始顯示呢?

       原來logger1和logger2對應的是同一個Logger實例,只要logging.getLogger(name)中名稱參數name相同則返回的Logger實例就是同一個,且僅有一個,也即name與Logger實例一一對應。在logger2實例中通過logger2.setLevel(logging.INFO)設置mylogger的日志級別
            
為logging.INFO,所以最后logger1的輸出遵從了后來設置的日志級別。

兩個子對象與一個root對象

            
              import
            
            
               logging


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


            
            
              #
            
            
               再創建一個handler,用于輸出到控制臺
            
            
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對應的每個輸出分別顯示兩次?
       這是因為我們通過logger = logging.getLogger()顯示的創建了root Logger,而logger1 = logging.getLogger('mylogger')創建了root Logger的孩子(root.)mylogger,logger2同樣。而孩子,孫子,重孫……既會將消息分發給他的handler進行處理也會傳遞
            
給所有的祖先Logger處理。

? ok,那么現在我們把

# logger.addHandler(fh)

# logger.addHandler(ch) ?注釋掉,我們再來看效果:

            
              輸出:
              
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
            因為我們注釋了logger對象顯示的位置,所以才用了默認方式,即標準輸出方式。因為它的父級沒有設置文件顯示方式,所以在這里只打印了一次。

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

Filter

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

 
     filter 
            
            = logging.Filter(
            
              '
            
            
              mylogger
            
            
              '
            
            
              ) 

     logger.addFilter(filter)

     這是只對logger這個對象進行篩選

     如果想對所有的對象進行篩選,則:

      filter 
            
            = logging.Filter(
            
              '
            
            
              mylogger
            
            
              '
            
            
              ) 

      fh.addFilter(filter)

      ch.addFilter(filter)

      這樣,所有添加fh或者ch的logger對象都會進行篩選。
            
          

?

              
                import
              
              
                 logging

logger 
              
              =
              
                 logging.getLogger()

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


              
              
                #
              
              
                 再創建一個handler,用于輸出到控制臺
              
              
ch =
              
                 logging.StreamHandler()

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

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


              
              
                #
              
              
                 定義一個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  
  

              
              
                #
              
              
                 創建一個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)  
  

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

              
              
                #
              
              
                 再創建一個handler,用于輸出到控制臺    
              
              
ch =
              
                 logging.StreamHandler()  
  

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

              
              
                #
              
              
                定義一個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
            
應用示例

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 奇米影视777中文久久爱 | 日韩美女一区二区三区在线观看 | 成年人免费小视频 | 国产精品日日摸夜夜添夜夜av | 成人亚洲A片V一区二区三区婷婷 | 91福利一区二区在线观看 | 国产一级视频 | 国产精品国产精品国产专区不卡 | 久久99国产亚洲精品观看 | 国产日韩精品视频 | 久久久一区二区三区视频 | 春色www视频在线观看 | 亚洲精品人成网在线播放影院 | 色妞色视频一区二区三区四区 | 韩国三级中文字幕hd久久精品 | 性欧美久久 | 亚洲综合久久久久久888 | 日韩1页| 狠狠色噜噜狠狠狠狠黑人 | 九九视频精品全部免费播放 | 国产亚洲欧美在线人成aaaa | 12345国产精品高清在线 | 国产精品亚洲片在线观看不卡 | 一级啪啪片| 亚洲国产精品一区二区第一页 | 日韩欧美专区 | 夜夜爱网站 | 免费看国产片 | 精品欧美一区二区三区久久久 | 亚洲一区二区视频在线观看 | 久久精品欧美 | 91高清视频在线观看 | 制服丝袜成人动漫 | 成人午夜免费视频 | 偷拍自拍一区 | 欧美不卡视频一区发布 | 69pao强力打造免费高清 | 成人在线免费观看网站 | 夜色视频网| 国产色图片 | 欧美aⅴ在线观看 |