步驟:
1.配置日志信息 logging.basicConfig
2.取得 logging.Logger 對象
3.使用 Logger 對象輸出信息
以下是一個簡單的封裝,模擬實現 Android 中的 Log 類
import logging import sys str_def_fmt = "%(asctime)s.%(msecs)03d %(thread)d %(levelname)s " \ "%(module)s %(filename)s:%(lineno)d %(funcName)s: %(message)s" logging.basicConfig(level=logging.DEBUG , format=str_def_fmt , datefmt="%Y:%m:%d %H:%M:%S" , stream=sys.stdout) logger = logging.getLogger("log") def setAsDebugLevel(): logger.setLevel(logging.DEBUG) def setAsInfoLevel(): logger.setLevel(logging.INFO) def setAsWarnLevel(): logger.setLevel(logging.WARN) def setAsErrorLevel(): logger.setLevel(logging.ERROR) def setAsFatalLevel(): logger.setLevel(logging.FATAL) d = logger.debug i = logger.info w = logger.warning e = logger.error f = logger.fatal def main(): d("test debug msg") i("test info msg") w("test warn msg") e("test err msg") f("test fatal msg") if __name__ == "__main__": main()
相關參數說明:
logging.basicConfig 參數說明 默認會創建一個 StreamHandler 並輸出到 sys.stderr, 並且使用 BASIC_FORMAT(%(levelname)s:%(name)s:%(message)s) 格式化信息 filename: 指定日志文件名, 此時不會再輸出到 StreamHandler 中, 即使指定了新的 stream filemode: 指定日志文件的打開模式, 'w'或者'a', 默認為'a' format: 指定輸出的內容格式, 其配置信息見下文 datefmt: 輸出日期和時間的格式字符串. 與 time.strftime 格式兼容, 不能指定到毫秒級別, 其詳細信息見下文 level 設置日志輸出的級別, 小於此級別的信息將被忽略, 默認為 WARNING stream 指定輸出的流, 默認為 sys.stderr, 如果指定了 filename, 此參數不起作用 handlers If specified, this should be an iterable of already created handlers, which will be added to the root handler. Any handler in the list which does not have a formatter assigned will be assigned the formatter created in this function. force If this keyword is specified as true, any existing handlers attached to the root logger are removed and closed, before carrying out the configuration as specified by the other arguments. 日志級別: 級別 值 描述 CRITICAL/FATAL 50 關鍵錯誤消息 ERROR 40 錯誤 WARNING(WARN) 30 警告消息 INFO 20 通知消息 DEBUG 10 調試 NOTSET 0 無級別 format 配置格式: %(name)s logger 名稱, 即調用 logging.getLogger 函數傳入的參數 %(levelno)s 數字形式的日志記錄級別 %(levelname)s 日志級別文本描述, 即"DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" %(pathname)s 執行日志記錄調用的源文件路徑 %(filename)s 執行日志記錄調用的源文件名 %(module)s 執行日志記錄調用的模塊名稱 %(lineno)d 執行日志記錄調用的行號 %(funcName)s 執行日志記錄調用的函數路徑 %(created)f 執行日志記錄調用的時間, 它是 time.time() 返回的數字 %(asctime)s 執行日志記錄調用的ascii格式的時間, 其格式由 datefmt 指定 %(msecs)d 執行日志記錄調用的時間中的毫秒部分 %(thread)d 線程id (if available) %(threadName)s 線程名稱 (if available) %(process)d 進程ID (if available) %(message)s 記錄的消息, 如 logging.getLogger().debug(msg) 指定的 msg datefmt %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 當前時區的名稱 %% %號本身