logging模塊

1、logging介紹

        Logging是python自帶的模塊,這個模塊支持輸出不一樣級別的日誌,能夠輸出到控制檯和寫入文件,支持TCP、HTTP、GET/POST、SMTP、Socket等協議,將日誌信息發送到網絡等等。python

 

        Logging提供5個等級的輸出,CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,若是把looger的級別設置爲INFO, 那麼小於INFO級別的日誌都不輸出, 大於等於INFO級別的日誌都輸出網絡

 

        logging庫提供了多個組件:Logger、Handler、Filter、Formatter:函數

                Logger      對象提供應用程序可直接使用的接口,供應用代碼使用;
                Handler     發送日誌到適當的目的地;
                Filter          提供了過濾日誌信息的方法,控制輸出; 
                Formatter  指定日誌輸出和顯示的具體格式。spa

 

2、Logging輸出日誌到控制檯,同時寫入文件

 

#coding:utf-8  線程

# =======================================================================  debug

# FuncName: console_out.py  日誌

# Desc: output log to console and file  orm

# Date: 2016-02-19 17:32  對象

# Author: johnny  接口

# =======================================================================  

import logging  

def console_out(logFilename):  

''''' Output log to file and console '''  

# Define a Handler and set a format which output to file  

    logging.basicConfig(  

                    level    = logging.DEBUG,              # 定義輸出到文件的log級別,                                                              

                    format   = '%(asctime)s  %(filename)s : %(levelname)s  %(message)s',    # 定義輸出log的格式  

                    datefmt  = '%Y-%m-%d %A %H:%M:%S',                                     # 時間  

                    filename = logFilename,                # log文件名  

                    filemode = 'w')                        # 寫入模式「w」或「a」  

# Define a Handler and set a format which output to console  

    console = logging.StreamHandler()                  # 定義console handler  

    console.setLevel(logging.INFO)                     # 定義該handler級別  

    formatter = logging.Formatter('%(asctime)s  %(filename)s : %(levelname)s  %(message)s')  #定義該handler格式  

    console.setFormatter(formatter)  

# Create an instance  

    logging.getLogger().addHandler(console)           # 實例化添加handler  

# Print information              # 輸出日誌級別  

    logging.debug('logger debug message')       

    logging.info('logger info message')  

    logging.warning('logger warning message')  

    logging.error('logger error message')  

    logging.critical('logger critical message')  

if __name__ == "__main__":  

    console_out('logging.log')  


控制檯:
  1. 2016-03-06 14:38:49,714  console_out.py : INFO  logger info message  
  2. 2016-03-06 14:38:49,714  console_out.py : WARNING  logger warning message  
  3. 2016-03-06 14:38:49,714  console_out.py : ERROR  logger error message  
  4. 2016-03-06 14:38:49,714  console_out.py : CRITICAL  logger critical message  
文件: logging.log 
 
  1. 2016-03-06 Sunday 14:38:49  console_out.py : DEBUG  logger debug message  
  2. 2016-03-06 Sunday 14:38:49  console_out.py : INFO  logger info message  
  3. 2016-03-06 Sunday 14:38:49  console_out.py : WARNING  logger warning message  
  4. 2016-03-06 Sunday 14:38:49  console_out.py : ERROR  logger error message  
  5. 2016-03-06 Sunday 14:38:49  console_out.py : CRITICAL  logger critical message  
 
logging.basicConfig()函數中的具體參數:
filename:   指定的文件名建立FiledHandler,這樣日誌會被存儲在指定的文件中;
filemode:   文件打開方式,在指定了filename時使用這個參數,默認值爲「w」還可指定爲「a」;
format:      指定handler使用的日誌顯示格式;
datefmt:    指定日期時間格式。,格式參考strftime時間格式化(下文)
level:        設置rootlogger的日誌級別
stream:     用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout或者文件,默認爲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

用戶輸出的消息

 

python中時間日期格式化符號:
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年中的星期數(00-53)星期一爲星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號自己

 

計算毫秒

#!/usr/bin/env python  

#coding:utf-8  

import  datetime,time  

print time.strftime('%Y-%m-%d  %H:%M:%S'),datetime.datetime.now().strftime('%f')[:3]  

print datetime.datetime.now().strftime('%Y%m%d %H:%M:%S.%f')  

相關文章
相關標籤/搜索