电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python 實(shí)現(xiàn)多進(jìn)程日志輪轉(zhuǎn)ConcurrentLogHandler

瀏覽:26日期:2022-06-24 18:52:45

記錄日志是我們程序中必不可少的一個(gè)功能,但是日志文件如果沒有合理的管理,時(shí)間長了幾百兆的日志文件就很難分析了(都不想打開看),但是又不可能經(jīng)常手動(dòng)去管理它

日志輪轉(zhuǎn):根據(jù)時(shí)間或者文件大小控制日志的文件個(gè)數(shù),不用我們手動(dòng)管理

python中l(wèi)ogging模塊內(nèi)置的有幾個(gè)支持日志輪轉(zhuǎn)的handler

常用的有TimedRotatingFileHandler根據(jù)時(shí)間輪轉(zhuǎn) RotatingFileHandler根據(jù)文件大小輪轉(zhuǎn)

但是內(nèi)置的這些handler是多線程安全的,而不支持多進(jìn)程(可以修改源碼加鎖保證進(jìn)程安全)

多進(jìn)程的時(shí)候可以使用ConcurrentLogHandler(需要自行安裝)按照文件大小輪轉(zhuǎn)

pip install ConcurrentLogHandler一、簡單的日志輪轉(zhuǎn)功能實(shí)現(xiàn):

#!/usr/bin/env python# -*- coding: utf-8 -*- import osimport loggingfrom cloghandler import ConcurrentRotatingFileHandlerfrom config import LOG_PATH, LOG_FILENAME, LOG_MAX_BYTES def create_logger(log_path=os.getcwd(), # 存放日志的目錄 level=logging.DEBUG, formatter=logging.BASIC_FORMAT, # 日志輸出格式 logger_name='', # 可以使用logging.getlogger(logger_name)使用此logger mode=’a’, delay=0, debug=True, log_filename=LOG_FILENAME, # 保存日志的文件名(備份出的文件會(huì)以此名+.1、 .2命名) encoding=None, maxBytes=LOG_MAX_BYTES, # 每個(gè)日志文件的最大容量 backupCount=3 # 最多備份幾個(gè)日志文件): # 判斷存放日志的文件夾是否存在 如果不存在新建 if not os.path.exists(log_path): os.mkdir(log_path) # 存放log的文件名 log_filename = os.path.join(log_path, log_filename) # 創(chuàng)建一個(gè)logger logger = logging.getLogger(logger_name) # 設(shè)置日志等級(jí) logger.setLevel(level) # 創(chuàng)建一個(gè)滾動(dòng)日志處理器 crfh = ConcurrentRotatingFileHandler(log_filename, mode=mode, maxBytes=maxBytes, backupCount=backupCount, delay=delay, debug=debug, encoding=encoding) # 定義handler的輸出格式 # 設(shè)定日志輸出格式 crfh.setFormatter(formatter) # 添加日志處理器 logger.addHandler(crfh) # 返回logger對(duì)象 return logger # 日志格式formatter_log = logging.Formatter(’%(asctime)s - %(filename)s [line: %(lineno)d] 【%(levelname)s】 ----- %(message)s’)# 生成一個(gè)loggerlogger = create_logger(log_path=LOG_PATH, logger_name='mylogger', formatter=formatter_log)

這樣就可以在其他模塊導(dǎo)入logger進(jìn)行使用了

logger.error('error msg')

有時(shí)候我們會(huì)記錄一些數(shù)據(jù)到文件中,如果多個(gè)程序同時(shí)寫入同一文件會(huì)把數(shù)據(jù)寫亂 我們也可以使用這個(gè)模塊來代替f.write()

from config import CHANNEL_PATH, CHANNEL_FILENAME, LOG_MAX_BYTES# 只需要把日志的格式改為只存入信息就可以了formatter_writer = logging.Formatter(’%(message)s’)# 創(chuàng)建一個(gè)寫入器(logger)writer = create_logger(logger_name='writer',log_path=CHANNEL_PATH, log_filename=CHANNEL_FILENAME, formatter=formatter_writer, level=logging.INFO)

這樣就可以使用writer.info('msg')記錄數(shù)據(jù)了

二、使用ini配置文件

創(chuàng)建文件xxx.ini

[loggers]keys = root,public [handlers]keys = consoleHandler,publicFileHandler [formatters]keys = my_formatter [logger_root]level = DEBUGhandlers = consoleHandler [logger_public]handlers = publicFileHandlerqualname = publicpropagate = 0 [handler_consoleHandler]class = StreamHandlerlevel = DEBUGformatter = my_formatterargs = (sys.stdout,) [handler_publicFileHandler]class = cloghandler.ConcurrentRotatingFileHandlerlevel = INFOformatter = my_formatterkwargs = {'filename': './logs/public.log', 'maxBytes': 1024 * 1024 * 10, 'backupCount': 10, 'delay': True, 'debug': True} [formatter_my_formatter]format = %(asctime)s - %(filename)s [line: %(lineno)d] [%(levelname)s] ----- %(message)sdatefmt = %Y-%m-%d %H:%M:%S

創(chuàng)建mylogger.py

import loggingimport logging.config logging.config.fileConfig('./xxx.ini') logger = logging.getLogger('public') logger.info('hello world!')

補(bǔ)充:python日志輪轉(zhuǎn)RotatingFileHandler動(dòng)態(tài)加載導(dǎo)致不能記錄日志問題

linux下:

Traceback (most recent call last): File “/usr/lib64/python2.7/logging/handlers.py”, line 77, in emit self.doRollover() File “/usr/lib64/python2.7/logging/handlers.py”, line 136, in doRollover os.rename(sfn, dfn) OSError: [Errno 13] Permission denied Logged from file utils.py, line 89

windows下:

Traceback (most recent call last): File “F:Python27liblogginghandlers.py”, line 77, in emit self.doRollover() File “F:Python27liblogginghandlers.py”, line 142, in doRollover os.rename(self.baseFilename, dfn) WindowsError: [Error 32] Logged from file utils.py, line 89

這是由于django開發(fā)模式時(shí)會(huì)同時(shí)啟動(dòng)兩個(gè)進(jìn)程加載settings.py,導(dǎo)致日志文件占用后無法重命名或者刪除

都知道django開發(fā)模式下如果有文件變動(dòng)會(huì)自動(dòng)重新啟動(dòng),所以同時(shí)又兩個(gè)進(jìn)程,一個(gè)是程序正常運(yùn)行的進(jìn)程,另一個(gè)是用來監(jiān)聽變更并重啟服務(wù)的進(jìn)程,他們都會(huì)加載一遍settings.py,可以在settings.py中加print然后啟動(dòng)會(huì)看到控制臺(tái)又兩次輸出。

解決方式:

python C:UserspcDesktopyunserver-1.1manage.py runserver --noreload 0.0.0.0:8000

使用不動(dòng)態(tài)加載方式運(yùn)行(這樣可能會(huì)影響開發(fā)環(huán)境中動(dòng)態(tài)加載)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 深圳3D打印服务-3D打印加工-手板模型加工厂-悟空打印坊 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 361°官方网站| 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 光照全温振荡器(智能型)-恒隆仪器| 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 |