1. 通過logging.basicConfig函數(shù)對日志的輸出格式及方式做相關(guān)配置
logging.basicConfig(level=logging.INFO,\
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',\
datefmt='%a, %d %b %Y %H:%M:%S',\
filename=logfile,
filemode='a')
logging.basicConfig函數(shù)各參數(shù):
filename: 指定日志文件名
filemode: 和file函數(shù)意義相同秃症,指定日志文件的打開模式,'w'或'a'
format: 指定輸出的格式和內(nèi)容吕粹,format可以輸出很多有用信息种柑,如上例所示:
%(levelno)s: 打印日志級別的數(shù)值
%(levelname)s: 打印日志級別名稱
%(pathname)s: 打印當前執(zhí)行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執(zhí)行程序名
%(funcName)s: 打印日志的當前函數(shù)
%(lineno)d: 打印日志的當前行號
%(asctime)s: 打印日志的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日志信息
datefmt: 指定時間格式匹耕,同time.strftime()
level: 設(shè)置日志級別聚请,默認為logging.WARNING
stream: 指定將日志的輸出流,可以指定輸出到sys.stderr,sys.stdout或者文件稳其,默認輸出到sys.stderr驶赏,當stream和filename同時指定時,stream被忽略
2. logger.handlers
StreamHandler: 將日志信息輸出到sys.stdout, sys.stderr
FileHandler: 將日志信息輸出到磁盤文件
NullHandler:?
WatchedFileHandler: 監(jiān)視文件狀態(tài)既鞠,如果文件被改變了母市,就關(guān)閉當前流,重新打開文件
RotatingFileHandler: 支持循環(huán)日志文件损趋,比如文件大小達到設(shè)定值時患久,會創(chuàng)建一個日志文件
TimeRotatingFileHandler: 定時循環(huán)日志
3. 定義一個初始化log的函數(shù)
import os
import logging
import logging.handlers
def init_log(log_path, level=logging.INFO, when="D", backup=7, format="%(levelname)s: %(asctime)s: %(filename)s:%(lineno)d * %(thread)d %(message)s", datefmt="%m-%d %H:%M:%S"):
? ? ? formatter = logging.Formatter(format, datefmt)
? ? ? logger = logging.getLogger()
? ? ? logger.setLevel(level)
? ? ? dir = os.path.dirname(log_path)
? ? ? if not os.path.isdir(dir):
? ? ? ? ? os.makedirs(dir)
? ? ?handler = logging.handlers.TimedRotatingFileHandler(log_path + ".log", when=when, ?backupCount=backup)
? ? ?handler.setLevel(level)
? ? ?handler.setFormatter(formatter)
? ? ?logger.addHandler(handler)
if __name__ == '__main__':
? ? ?init_log('mylog')
? ? ?logging.info('start')
? ? ?logging.error('has error')
參考:
1.?http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html