[Python系列]Python日志模塊詳解

參考:https://docs.python.org/2/library/logging.html

Logging模塊介紹

  • 模塊:logging
  • 類:
    • Loggers:暴露直接給用戶使用的接口
    • Handler:可以指定日志的輸出源(文件/console等)
    • Filters:可以用于指定哪些日志可以輸出
    • Formatters:指定日志的格式

我們通過下面的場景和源碼來理解Loggers/Handler/Formatters的作用和區(qū)別

場景一:輸出單一文件日志

logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s > %(message)s',
                        datefmt='%Y/%m/%d %H:%M:%S',
                        filename='testlog.log',
                        filemode='w')

# 輸出日志
logging.info("test")

直接使用logging.info()通過root logger輸出求泰,且通過logging.basciConfig()可以指定root logger()的參數(shù)

場景二:輸出單一文件日志和控制臺(tái)日志

def __init_root_file_log():
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s > %(message)s',
                        datefmt='%Y/%m/%d %H:%M:%S',
                        filename='ui-test.log',
                        filemode='w')
    return


def __init_console_log():
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    console.setFormatter(formatter)

    logging.getLogger('').addHandler(console)
    return

__init_root_file_log()
__init_console_log()

這里相比上一個(gè)場景萤厅,多了需要將日志輸出到控制臺(tái)橙困,python是通過向logger對象添加一個(gè)handler對象(StreamHandler對象)實(shí)現(xiàn)的:
logger.getLogger('')獲取root logger對象,然后addHandler(console)

場景三:輸出多個(gè)文件日志(附帶控制臺(tái)日志)

例如:相比場景二盟萨,我需要添加一個(gè)process_monitor.log,用來專門寫進(jìn)程監(jiān)控日志

loggers = {}

def init_log():
    __init_root_file_log()
    __init_process_log()
    __init_console_log()


def __init_root_file_log():
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s > %(message)s',
                        datefmt='%Y/%m/%d %H:%M:%S',
                        filename='ui-test.log',
                        filemode='w')
    return


def __init_console_log():
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    console.setFormatter(formatter)

    logging.getLogger('').addHandler(console)
    return


def __init_process_log():
    loggerName = "processlog"
    logger = logging.getLogger(loggerName)
    fh = logging.FileHandler("process_monitor.log")
    formatter = logging.Formatter("%(asctime)s > %(message)s")
    fh.setFormatter(formatter)

    logger.setLevel(logging.INFO)
    logger.addHandler(fh)

    loggers[loggerName] = logger

使用process_monitor.log輸出日志的調(diào)用方式如下:

# 在整個(gè)應(yīng)用開始時(shí)調(diào)用睡毒,初始化所有的logger對象
init_log()

# 輸出日志
loggers['processlog'].info("process test")

效果如下:

  • 控制臺(tái)
  • root logger:
  • process_monitor.log:

?相比場景二的代碼谱秽,?多了__init_process_log()方法,它的處理如下:
1.logging.getLogger()獲取了一個(gè)logger對象耙蔑,這里參數(shù)可以是任意字符串
2.向logger對象添加了format對象和handler對象(FileHandler對象)
3.指定logger對象的日志級別
4.【非必須】將創(chuàng)建的logger對象添加到loggers這個(gè)dict對象中见妒,方便日志文件較多的時(shí)候?qū)θ罩緦ο筮M(jìn)行管理

上面的基本可以覆蓋大部分的硬盤日志需求,如果涉及網(wǎng)絡(luò)日志纵潦,可以看看Python的各種Handler實(shí)現(xiàn)徐鹤,這里后續(xù)如果有具體的業(yè)務(wù)場景的話,可以再講講

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邀层,一起剝皮案震驚了整個(gè)濱河市返敬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寥院,老刑警劉巖劲赠,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秸谢,居然都是意外死亡凛澎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門估蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塑煎,“玉大人,你說我怎么就攤上這事臭蚁∽钐” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵垮兑,是天一觀的道長冷尉。 經(jīng)常有香客問我,道長系枪,這世上最難降的妖魔是什么雀哨? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上雾棺,老公的妹妹穿的比我還像新娘膊夹。我一直安慰自己,他們只是感情好垢村,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布割疾。 她就那樣靜靜地躺著,像睡著了一般嘉栓。 火紅的嫁衣襯著肌膚如雪宏榕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天侵佃,我揣著相機(jī)與錄音麻昼,去河邊找鬼。 笑死馋辈,一個(gè)胖子當(dāng)著我的面吹牛抚芦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迈螟,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叉抡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了答毫?” 一聲冷哼從身側(cè)響起褥民,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洗搂,沒想到半個(gè)月后消返,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耘拇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年撵颊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惫叛。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倡勇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘉涌,到底是詐尸還是另有隱情妻熊,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布洛心,位于F島的核電站固耘,受9級特大地震影響题篷,放射性物質(zhì)發(fā)生泄漏词身。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一番枚、第九天 我趴在偏房一處隱蔽的房頂上張望法严。 院中可真熱鬧损敷,春花似錦、人聲如沸深啤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溯街。三九已至诱桂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呈昔,已是汗流浹背挥等。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堤尾,地道東北人肝劲。 一個(gè)月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像郭宝,于是被迫代替她去往敵國和親辞槐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • logging模塊介紹: logging是python內(nèi)置的標(biāo)準(zhǔn)庫模塊粘室,模塊提供不同的日志級別榄檬,并可以采用不同的方...
    4ffde5305e8f閱讀 2,848評論 0 2
  • 本篇文章主要對 python logging 的介紹加深理解。更主要是 討論在多進(jìn)程環(huán)境下如何使用logging ...
    doudou0o閱讀 41,148評論 52 42
  • 前言 在自動(dòng)化測試實(shí)踐過程中育特,必不可少的就是進(jìn)行日志管理丙号,方便調(diào)試和生產(chǎn)問題追蹤,python提供了logg...
    苦葉子閱讀 823評論 0 0
  • 本文首發(fā)于Gevin的博客 原文鏈接:Python 日志功能詳解 未經(jīng) Gevin 授權(quán)缰冤,禁止轉(zhuǎn)載 軟件開發(fā)中通過...
    Gevin閱讀 4,924評論 1 24
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理犬缨,服務(wù)發(fā)現(xiàn),斷路器棉浸,智...
    卡卡羅2017閱讀 134,711評論 18 139