python 日志記錄logging模塊使用

最近想在python flask項(xiàng)目中使用日志功能湾盒,于是想到了python自帶的日志模塊logging. 在學(xué)習(xí)這個(gè)logging模塊之前,我們先來了解四個(gè)比較重要的概念:Logger诅妹,Handler罚勾,F(xiàn)ormatter,F(xiàn)ilter.

Logger記錄器:應(yīng)用程序代碼能直接使用的接口.

Handler處理器:將Logger記錄器產(chǎn)生的的日志發(fā)送到指定的目的地.

Filter過濾器:可以有更好的粒度控制去決定輸出哪些日志.

Formatter格式化器:決定輸出的日志格式.

Logger記錄器:

要使用logging模塊來記錄日志吭狡,首先要?jiǎng)?chuàng)建一個(gè)Logger記錄器尖殃,如果沒有顯式的進(jìn)行創(chuàng)建,則默認(rèn)創(chuàng)建一個(gè)root logger划煮,并且默認(rèn)的日志級(jí)別為WARN和處理器Handler(StreamHandler送丰,即將日志信息打印輸出在標(biāo)準(zhǔn)輸出).

創(chuàng)建Logger的方法:

logger = logging.getLogger(logger_name) #這個(gè)logger_name可以自己定義

創(chuàng)建了Logger實(shí)例之后,可以用以下方法對(duì)日志級(jí)別進(jìn)行設(shè)置:

logger.setLevel(logging.ERROR) #日志級(jí)別為ERROR弛秋,大于或者等于ERROR級(jí)別的日志才會(huì)進(jìn)行輸出

為L(zhǎng)ogger實(shí)例增加一個(gè)處理器:

logger.addHandler(handler_name) #handler_name可以自定定義

為L(zhǎng)ogger實(shí)例移除一個(gè)處理器:

logger.removeHandler(handler_name)


Handler處理器:

比較常用的處理器有三種:StreamHandler蚪战、FileHandler牵现、NullHandler

StreamHandler,即將日志信息打印輸出在標(biāo)準(zhǔn)輸出

創(chuàng)建一個(gè)StreamHandler:sh = logging.StreamHandler(stream=None)

FileHandler邀桑,即將日志信息打印輸出到文件

創(chuàng)建一個(gè)FileHandler:fh = logging.FileHandler(filename,mode='a')

NullHandler瞎疼,不做任何的格式化輸出,本質(zhì)上它是一個(gè)“什么都不做”的Handler.


Formatter格式化器:

使用Formatter格式化器設(shè)置日志信息的格式壁畸,內(nèi)容贼急,它由兩部分組成,分別是fmt和datefmt

其中fmt是日志消息格式化字符串樣式捏萍,datefmt是日期字符串樣式. 如果不指定fmt太抓,將默認(rèn)使用'%(message)s',如果不指定datefmt令杈,將默認(rèn)使用ISO8601日期格式.

fmt允許使用的變量如下:

%(name)s : Logger的名字

%(levelno)s :數(shù)字標(biāo)明日志就別

%(levelname)s :日志級(jí)別(INFO走敌、WARNING、ERROR逗噩、CRITICAL)

%(pathname)s :調(diào)用日志輸出函數(shù)的模塊的所在完整路徑

%(filename)s :調(diào)用日志輸出函數(shù)的模塊的文件名

%(module)s :調(diào)用日志輸出函數(shù)的模塊名

%(funcName)s :調(diào)用日志輸出函數(shù)的函數(shù)名

%(lineo)d :調(diào)用日志輸出函數(shù)的語句所在的代碼行

%(created)f :當(dāng)前時(shí)間掉丽,用unix標(biāo)準(zhǔn)的表示時(shí)間的浮點(diǎn)數(shù)表示

%(asctime)s :當(dāng)前時(shí)間格式,可以自定義時(shí)間格式异雁,如"%Y-%m-%d %H:%M:%S"

%(message)s :用戶自定義的日志消息


說了那么多捶障,還是來實(shí)踐一把吧,代碼如下:


import logging

try:

    conn = mysql.connector.connect(

            user = db_user,

            password = db_passwd,

            host = db_host,

            port = db_port,

            database = access_db)

    cur = conn.cursor()

    cur.execute(unormal_task_sql)

    unormal_task_results = cur.fetchall()

except Exception,e:

    logger = getLogger()

    logger.error('fail to get data from oss db: %s:%s,cluster_name:%s'%(db_host,db_port,cluster_name))

def getLogger(logger_name="app.log",log_level=logging.ERROR,log_path="log/app.log"):

    #create logger

    logger = logging.getLogger(logger_name)

    #create file handler

    fh = logging.FileHandler(log_path,mode='a')

    fh.setLevel(log_level)

    #create formatter

    fmt = "%(asctime)s %(levelname)s %(lineno)d %(filename)s %(message)s"

    datefmt = "%Y-%m-%d %H:%M:%S"

    formatter = logging.Formatter(fmt,datefmt)

    #add handler and formatter to logger

    fh.setFormatter(formatter)

    logger.addHandler(fh)

    return logger

日志路徑為:log/app.log #這個(gè)log目錄需要自行創(chuàng)建纲刀,app.log會(huì)自動(dòng)生成

logger記錄器的名字為:app_log

日志級(jí)別log_level為:ERROR級(jí)別

現(xiàn)在來看看日志輸出內(nèi)容:

2018-01-26 15:04:34 ERROR 59 util.py fail to get data from oss db: xx.xx.xx.xx:3307,cluster_name:上海金橋VPC

經(jīng)過實(shí)驗(yàn)證明项炼,handler設(shè)置了日志級(jí)別,那么logger可以不設(shè)置日志級(jí)別示绊,也同樣可以記錄日志.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锭部,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子面褐,更是在濱河造成了極大的恐慌拌禾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盆耽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扼菠,警方通過查閱死者的電腦和手機(jī)摄杂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來循榆,“玉大人析恢,你說我怎么就攤上這事⊙硪” “怎么了映挂?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵泽篮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我柑船,道長(zhǎng)帽撑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任鞍时,我火速辦了婚禮亏拉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逆巍。我一直安慰自己及塘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布锐极。 她就那樣靜靜地躺著笙僚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灵再。 梳的紋絲不亂的頭發(fā)上肋层,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音檬嘀,去河邊找鬼槽驶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸳兽,可吹牛的內(nèi)容都是我干的掂铐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼揍异,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼全陨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衷掷,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤辱姨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后戚嗅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雨涛,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年懦胞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了替久。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躏尉,死狀恐怖蚯根,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胀糜,我是刑警寧澤颅拦,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布蒂誉,位于F島的核電站,受9級(jí)特大地震影響距帅,放射性物質(zhì)發(fā)生泄漏右锨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一锥债、第九天 我趴在偏房一處隱蔽的房頂上張望陡蝇。 院中可真熱鬧,春花似錦哮肚、人聲如沸登夫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恼策。三九已至,卻和暖如春潮剪,著一層夾襖步出監(jiān)牢的瞬間涣楷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工抗碰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狮斗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓弧蝇,卻偏偏與公主長(zhǎng)得像碳褒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子看疗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348