婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python 實現(xiàn)logging動態(tài)變更輸出日志文件名

python 實現(xiàn)logging動態(tài)變更輸出日志文件名

熱門標簽:百應ai電銷機器人鄭州 如何在地圖標注文字 n400電話申請多少錢 地圖標注推廣單頁 女王谷地圖標注 長春人工智能電銷機器人官網 廈門crm外呼系統(tǒng)如何 西藏快速地圖標注地點 ai地圖標注

python作為一門非常容易上手的腳本語言,日志輸出更是簡單,logging模塊,簡單的設置配置和屬性,就能實現(xiàn)到控制臺輸出日志,在basicConfig()設置文件名,就能夠將日志信息寫入文件,簡直是簡單到不能再簡單。

最近在項目中就遇到一個日志問題,使用python編寫的服務程序一直運行,連續(xù)處理一些任務,每個任務的關鍵信息都需要輸出到文件中,便于維護人員查看,可是對于簡單實用logging來說,日志寫入文件非常簡單,由于服務程序連續(xù)運行,一直向一個文件記錄日志信息有些不妥,有常識的開發(fā)人員都知道,長時間的日志輸出會導致日志文件過大,可是如何在服務運行時,修改日志的輸出文件,以當天日期作為日志文件名。

代碼編寫環(huán)境:python3.4.3

1.logging.basicConfig()

首先,想到的是更改logging.basicConfig(filename=logfilename)參數(shù),來實現(xiàn)變更日志文件名的目的。編寫代碼如下:

log_fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
for i in range(1,4):
 filename = str.format('mylog%d.txt' % i)
 logging.basicConfig(format=log_fmt, level=logging.DEBUG, filename=filename)
 logging.debug('This is debug message')
 logging.info('This is info message')
 logging.warning('This is warning message')

運行結果沒有達到預期的效果,只有日志文件mylog1.txt被創(chuàng)建,mylog2.txt和mylog3.txt都未被創(chuàng)建,連續(xù)3次的輸出的內容都寫入mylog1.txt中。說明logging.basicConfig()設置屬性具有全局性,第一次設置之后,之后再設置將不再生效。查看官方文檔,也確實是如此。

logging.basicConfig(**kwargs)

Does basic configuration for the logging system by creating a StreamHandler with a default Formatter and adding it to the root logger. The functions debug(), info(), warning(), error() and critical() will call basicConfig() automatically if no handlers are defined for the root logger.

This function does nothing if the root logger already has handlers configured for it.

此路不通,只好用其他方法。

2.Handler對象

logging支持添加多個不同類型的handler對象,實現(xiàn)對控制臺(logging.StreamHandler)、文件(logging.FileHandler)等不同目標輸出日志。

logging支持的日志詳情見文檔logging.handlers

通過增加多個handler對象,可是實現(xiàn)同時在控制臺、文件同時輸出不同級別的日志信息。

# 默認配置logging寫入本地文件
logging.basicConfig(level=logging.DEBUG,
  format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  datefmt='%a, %d %b %Y %H:%M:%S',
  filename='myapp2.log',
  filemode='w')
#定義一個StreamHandler,將INFO級別或更高的日志信息打印到標準錯誤,并將其添加到當前的日志處理對象。
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

考慮實現(xiàn)簡單又能說明效果,寫入文件使用logging.basicConfig()設置,并添加輸出指向控制臺的流處理(StreamHandler)對象console,實現(xiàn)同時輸出日志。當然也可以反過來,默認設置控制臺輸出日志,之后創(chuàng)建文件對象(logging.FileHandler),并加入處理集合,實現(xiàn)同樣的效果。

logging.getLogger('')獲取的是名為'root'的默認根節(jié)點

同時,logging提供addHandler()的方法,自然也會有管理handler的方法。

延伸之前Handler的思路,我們可以實現(xiàn)對handler的動態(tài)管理,變更日志文件。每次需要變更輸出文件路徑前,使用handler管理清空原先的logging.FileHandler對象,重新創(chuàng)建一個新文件名的logging.FileHandler對象即可。

# 默認配置logging寫入本地文件
logging.basicConfig(level=logging.DEBUG,
  format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  datefmt='%a, %d %b %Y %H:%M:%S',
  filename='myapp2.log',
  filemode='w')
#定義一個StreamHandler,將INFO級別或更高的日志信息打印到標準錯誤,并將其添加到當前的日志處理對象。
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

使用for循環(huán)執(zhí)行3次處理,分別創(chuàng)建日志文件名稱為mylog1.txt, mylog2.tx, mylog3.txt,并寫入相同的內容。執(zhí)行結果確實產生不同名稱的文件,日志內容也正確寫入。

至此,已經實現(xiàn)動態(tài)變更輸出文件日志名稱的功能。至于按照日志輸出文件名,只需要按照上述代碼的思路,將創(chuàng)建logging.FileHandler()的文件名參數(shù)變更就能達成目的。

簡單實現(xiàn)方案

瀏覽官方文檔logging.handlers一節(jié)內容,python考慮到日志的常規(guī)使用場景,已經封裝更為簡單的實現(xiàn)方案,TimedRotatingFileHandler,只需簡單的配置,即可實現(xiàn)對輸出日志文件的基本管理,靈活易用,代碼如下:

import logging, logging.handlers
import time
'''
TimedRotatingFileHandler構造函數(shù)聲明
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
filename 日志文件名前綴
when 日志名變更時間單位
 'S' Seconds
 'M' Minutes
 'H' Hours
 'D' Days
 'W0'-'W6' Weekday (0=Monday)
 'midnight' Roll over at midnight
interval 間隔時間,是指等待N個when單位的時間后,自動重建文件
backupCount 保留日志最大文件數(shù),超過限制,刪除最先創(chuàng)建的文件;默認值0,表示不限制。
delay 延遲文件創(chuàng)建,直到第一次調用emit()方法創(chuàng)建日志文件
atTime 在指定的時間(datetime.time格式)創(chuàng)建日志文件。
'''
def test_TimedRotatingFileHandler():
 # 定義日志輸出格式
 fmt_str = '%(asctime)s[level-%(levelname)s][%(name)s]:%(message)s'
 # 初始化
 logging.basicConfig()
 # 創(chuàng)建TimedRotatingFileHandler處理對象
 # 間隔5(S)創(chuàng)建新的名稱為myLog%Y%m%d_%H%M%S.log的文件,并一直占用myLog文件。
 fileshandle = logging.handlers.TimedRotatingFileHandler('myLog', when='S', interval=5, backupCount=3)
 # 設置日志文件后綴,以當前時間作為日志文件后綴名。
 fileshandle.suffix = "%Y%m%d_%H%M%S.log"
 # 設置日志輸出級別和格式
 fileshandle.setLevel(logging.DEBUG)
 formatter = logging.Formatter(fmt_str)
 fileshandle.setFormatter(formatter)
 # 添加到日志處理對象集合
 logging.getLogger('').addHandler(fileshandle)
if __name__ == '__main__':
 test_TimedRotatingFileHandler()
 # 測試在200s內創(chuàng)建文件多個日志文件
 for i in range(0, 100):
 logging.debug("logging.debug")
 logging.info("logging.info")
 logging.warning("logging.warning")
 logging.error("logging.error")
 time.sleep(2)

補充:使用Python的logging.config.fileConfig配置日志

Python的logging.config.fileConfig方式配置日志,通過解析conf配置文件實現(xiàn)。文件 logglogging.conf 配置如下:

[loggers]
keys=root,fileLogger,rotatingFileLogger
 
[handlers]
keys=consoleHandler,fileHandler,rotatingFileHandler
 
[formatters]
keys=simpleFormatter
 
[logger_root]
level=DEBUG
handlers=consoleHandler
 
[logger_fileLogger]
level=DEBUG
# 該logger中配置的handler
handlers=fileHandler
# logger 的名稱
qualname=fileLogger
propagate=0
 
[logger_rotatingFileLogger]
level=DEBUG
# 這樣配置,rotatingFileLogger中就同時配置了consoleHandler,rotatingFileHandler
# consoleHandler 負責將日志輸出到控制臺
# rotatingFileHandler 負責將日志輸出保存到文件中
handlers=consoleHandler,rotatingFileHandler
qualname=rotatingFileLogger
propagate=0
 
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
 
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('logs/logging.log', 'a')
 
[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
level=WARNING
formatter=simpleFormatter
args=("logs/rotating_logging.log", "a", 1*1024*1024, 5)
 
[formatter_simpleFormatter]
#format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
format=%(asctime)s - %(module)s - %(thread)d - %(levelname)s : %(message)s
datefmt=%Y-%m-%d %H:%M:%S

以上配置文件主要包含以下幾部分:

loggers : 配置logger信息。必須包含一個名字叫做root的logger,當使用無參函數(shù)logging.getLogger()時,默認返回root這個logger,其他自定義logger可以通過 logging.getLogger("fileLogger") 方式進行調用

handlers:定義聲明handlers信息。常用的handlers包括 StreamHandler(僅將日志輸出到kong控制臺)、FileHandler(將日志信息輸出保存到文件)、RotaRotatingFileHandler(將日志輸出保存到文件中,并設置單個日志wenj文件的大小和日志文件個數(shù))

formatter : 設置日志格式

logger_xxx : 對loggers中聲明的logger進行逐個配置,且要一一對應

handler_xxx : 對handlers中聲明的handler進行逐個配置,且要一一對應

formatter_xxx : 對聲明的formatterjinx進行配置

代碼示例

logging.config.fileConfig(“l(fā)ogging.conf”)
 
# 輸出日志到控制臺,獲取的是root對應的logger
console_logger = logging.getLogger()
 
# 輸出日志到單個文件
file_logger = logging.getLogger(name="fileLogger")
 
# rotatingFileLogger中額consoleHandler輸出到控制臺,rotatingHandler輸出日志到文件
rotating_logger = logging.getLogger(name="rotatingFileLogger")

友情提示

進行以上配置后,在項目中需要進行日志輸出的地方通過logging.getLogger()方式就可以獲取到du應的logger,然后就可以使用logger.info("xxx")jinx進行日志輸出了。

使用這種方式配置日志,一定要在項目的入口函數(shù)中就調用 logging.config.fileConfig(“l(fā)ogging.conf”)函數(shù),因為 logging.conf 文件中,在handler中配置的是日志文件的相對地址,如果在其他代碼文件中進行調用,由于相對地址的原因,將導致日志文件會出現(xiàn)在yixi意想不到的位置。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 解決python logging遇到的坑 日志重復打印問題
  • python (logging) 日志按日期、大小回滾的操作
  • Python日志打印里logging.getLogger源碼分析詳解
  • python 如何對logging日志封裝
  • Python logging自定義字段輸出及打印顏色
  • Python中l(wèi)ogging日志的四個等級和使用
  • Python+logging輸出到屏幕將log日志寫入文件
  • Python logging模塊handlers用法詳解
  • 如何理解python接口自動化之logging日志模塊

標簽:內江 廊坊 綿陽 黔東 亳州 渭南 拉薩 興安盟

巨人網絡通訊聲明:本文標題《python 實現(xiàn)logging動態(tài)變更輸出日志文件名》,本文關鍵詞  python,實現(xiàn),logging,動態(tài),變更,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 實現(xiàn)logging動態(tài)變更輸出日志文件名》相關的同類信息!
  • 本頁收集關于python 實現(xiàn)logging動態(tài)變更輸出日志文件名的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲二区视频在线| 国产成人av影院| 成人91在线观看| 日韩欧美电影一区| 亚洲成人激情自拍| 日韩三级在线观看| 97久久精品人人做人人爽| 91精品国产麻豆国产自产在线 | 久久av资源站| 亚洲午夜激情av| 自拍偷拍欧美精品| 日韩精品电影在线| 久久国产乱子精品免费女| 久久久噜噜噜久久中文字幕色伊伊| 99国产精品国产精品毛片| 免费成人在线视频观看| 亚洲综合久久av| 国产无人区一区二区三区| 久久一日本道色综合| 精品国免费一区二区三区| 91视频免费观看| 精品一区二区三区在线观看国产| 一区视频在线播放| 久久一区二区三区四区| 国产在线视频精品一区| 久久久久久久国产精品影院| 日本韩国视频一区二区| 一级特黄大欧美久久久| 精品国产乱码91久久久久久网站| 亚洲综合视频网| 国产精品视频线看| 欧美日韩一区二区三区免费看 | 91精品国产91久久久久久一区二区| 97精品久久久久中文字幕| 国产传媒久久文化传媒| 中文字幕免费一区| 亚洲一区二区三区四区不卡| 久久久久久99精品| 久久精品一区蜜桃臀影院| 91黄色在线观看| 91免费精品国自产拍在线不卡| 午夜av一区二区三区| 日韩视频一区二区在线观看| 99综合电影在线视频| 日韩av电影天堂| 石原莉奈在线亚洲二区| 亚洲成人av一区| 亚洲午夜精品在线| 亚洲一区在线免费观看| 天天综合日日夜夜精品| 久久综合视频网| 成人黄色软件下载| 91极品视觉盛宴| 国产婷婷色一区二区三区四区| 91久久国产最好的精华液| 亚洲人妖av一区二区| 亚洲成人资源网| 国产精品88888| 欧美人妇做爰xxxⅹ性高电影| 日韩国产欧美一区二区三区| 国产经典欧美精品| 亚洲欧美在线aaa| 亚洲成av人片一区二区梦乃| 一个色妞综合视频在线观看| 国产成人高清视频| 国产亚洲精品福利| 国产成人av自拍| 国产精品污网站| 性欧美大战久久久久久久久| 偷拍自拍另类欧美| 欧美精品九九99久久| 日韩黄色片在线观看| 91精品国产乱| 麻豆精品一区二区三区| 5858s免费视频成人| 亚洲乱码国产乱码精品精可以看 | 狠狠色狠狠色合久久伊人| 免费在线观看一区二区三区| 成人激情文学综合网| 中文字幕亚洲一区二区av在线 | 日韩高清中文字幕一区| 色婷婷av一区二区三区大白胸| 日韩国产欧美在线观看| 国产精品色哟哟网站| 欧美男女性生活在线直播观看| 亚洲福利电影网| 成人在线一区二区三区| 成人免费小视频| 久久久综合精品| av电影天堂一区二区在线| 中文字幕av一区 二区| 91国偷自产一区二区开放时间| 中文字幕佐山爱一区二区免费| 成人av影视在线观看| 亚洲欧美乱综合| 国产精品动漫网站| 欧美日本韩国一区二区三区视频| 蜜桃视频在线观看一区二区| 一区二区国产视频| 亚洲国产精品高清| 欧美精品粉嫩高潮一区二区| 亚洲一区国产视频| 日韩久久久精品| 一本久道中文字幕精品亚洲嫩| 亚洲国产视频网站| 国产精品灌醉下药二区| 日韩一级片在线观看| 午夜一区二区三区在线观看| 精品欧美乱码久久久久久1区2区| 美女免费视频一区| 一二三四社区欧美黄| 欧美性视频一区二区三区| 3d动漫精品啪啪1区2区免费 | 国产精品一区专区| 国产精品白丝av| 国产suv精品一区二区883| 蜜臀久久久久久久| 日韩一区和二区| 免费看日韩精品| 精品亚洲欧美一区| 9人人澡人人爽人人精品| hitomi一区二区三区精品| 亚洲一区二区三区免费视频| 亚洲精品视频免费观看| 一区二区三区四区视频精品免费| 亚洲欧洲综合另类| 五月婷婷综合激情| 日本在线不卡一区| 成人一级视频在线观看| 色欧美日韩亚洲| 欧美一区二区三区四区久久| 日韩欧美电影在线| 一区二区三区四区激情 | 日韩亚洲欧美在线观看| 久久亚洲综合av| 亚洲一二三四区不卡| 亚洲精品乱码久久久久久黑人| 91成人免费在线视频| 国产精品视频看| 成人av免费在线播放| 国产精品免费aⅴ片在线观看| 老司机午夜精品| 日韩视频免费观看高清完整版 | 免费视频一区二区| 欧美性生活一区| 亚洲一区二区美女| 欧美男男青年gay1069videost | 欧美体内she精高潮| 亚洲天堂免费看| 91免费小视频| 天堂av在线一区| 日本大胆欧美人术艺术动态| 在线观看亚洲一区| 亚洲欧美怡红院| eeuss鲁一区二区三区| 国产无遮挡一区二区三区毛片日本| 一区在线观看免费| 日韩不卡一区二区| 成人激情免费网站| 欧美日韩国产另类一区| 一区二区三区成人| 欧美吻胸吃奶大尺度电影| 亚洲精品亚洲人成人网| 久草精品在线观看| 欧美精品一区二区三区蜜臀| 精品欧美一区二区三区精品久久| 欧美色图免费看| 在线欧美小视频| 亚洲高清中文字幕| 日韩精品国产欧美| 亚洲免费电影在线| 成人综合婷婷国产精品久久 | 成人av电影在线观看| 一区二区三区不卡在线观看| 精品第一国产综合精品aⅴ| 欧美丝袜丝交足nylons| 88在线观看91蜜桃国自产| 国产精品99久久久久久久女警| 免费观看久久久4p| 亚洲欧美日韩成人高清在线一区| 91美女在线视频| 色国产综合视频| 成人免费视频app| 狠狠狠色丁香婷婷综合久久五月| 一区二区三区中文字幕精品精品| 久久免费偷拍视频| 在线不卡a资源高清| 99国产精品国产精品久久| 精品国产一区二区三区忘忧草| 亚洲欧洲国产日本综合| 99久久国产综合精品色伊| 亚洲男人的天堂网| 91精品国产麻豆| a在线播放不卡| 午夜久久久久久久久| 欧美国产禁国产网站cc| 91麻豆精品国产91久久久久久| 99r国产精品| 国产成人综合网| 免费人成精品欧美精品|