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

主頁 > 知識庫 > python 實現多進程日志輪轉ConcurrentLogHandler

python 實現多進程日志輪轉ConcurrentLogHandler

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

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

日志輪轉:根據時間或者文件大小控制日志的文件個數,不用我們手動管理

python中logging模塊內置的有幾個支持日志輪轉的handler

常用的有TimedRotatingFileHandler根據時間輪轉 RotatingFileHandler根據文件大小輪轉

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

多進程的時候可以使用ConcurrentLogHandler(需要自行安裝)按照文件大小輪轉

pip install ConcurrentLogHandler

一、簡單的日志輪轉功能實現:

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import os
import logging
from cloghandler import ConcurrentRotatingFileHandler
from 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, # 保存日志的文件名(備份出的文件會以此名+.1、 .2命名)
         encoding=None,
         maxBytes=LOG_MAX_BYTES, # 每個日志文件的最大容量
         backupCount=3 # 最多備份幾個日志文件):
  # 判斷存放日志的文件夾是否存在 如果不存在新建
  if not os.path.exists(log_path):
    os.mkdir(log_path)
  # 存放log的文件名
  log_filename = os.path.join(log_path, log_filename)
 
  # 創建一個logger
  logger = logging.getLogger(logger_name)
  # 設置日志等級
  logger.setLevel(level)
  # 創建一個滾動日志處理器
  crfh = ConcurrentRotatingFileHandler(log_filename, mode=mode, maxBytes=maxBytes, backupCount=backupCount, delay=delay, debug=debug, encoding=encoding)
  # 定義handler的輸出格式
  # 設定日志輸出格式
  crfh.setFormatter(formatter)
  # 添加日志處理器
  logger.addHandler(crfh)
  # 返回logger對象
  return logger
 
# 日志格式
formatter_log = logging.Formatter('%(asctime)s - %(filename)s [line: %(lineno)d] 【%(levelname)s】 ----- %(message)s')
# 生成一個logger
logger = create_logger(log_path=LOG_PATH, logger_name="mylogger", formatter=formatter_log) 
 

這樣就可以在其他模塊導入logger進行使用了

logger.error("error msg") 

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

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

這樣就可以使用writer.info("msg")記錄數據了

二、使用ini配置文件

創建文件xxx.ini

[loggers]
keys = root,public
 
[handlers]
keys = consoleHandler,publicFileHandler
 
[formatters]
keys = my_formatter
 
[logger_root]
level = DEBUG
handlers = consoleHandler
 
[logger_public]
handlers = publicFileHandler
qualname = public
propagate = 0
 
[handler_consoleHandler]
class = StreamHandler
level = DEBUG
formatter = my_formatter
args = (sys.stdout,)
 
[handler_publicFileHandler]
class = cloghandler.ConcurrentRotatingFileHandler
level = INFO
formatter = my_formatter
kwargs = {"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)s
datefmt = %Y-%m-%d %H:%M:%S
 

創建mylogger.py

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

補充:python日志輪轉RotatingFileHandler動態加載導致不能記錄日志問題

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:\Python27\lib\logging\handlers.py”, line 77, in emit self.doRollover() File “F:\Python27\lib\logging\handlers.py”, line 142, in doRollover os.rename(self.baseFilename, dfn) WindowsError: [Error 32] Logged from file utils.py, line 89

這是由于django開發模式時會同時啟動兩個進程加載settings.py,導致日志文件占用后無法重命名或者刪除

都知道django開發模式下如果有文件變動會自動重新啟動,所以同時又兩個進程,一個是程序正常運行的進程,另一個是用來監聽變更并重啟服務的進程,他們都會加載一遍settings.py,可以在settings.py中加print然后啟動會看到控制臺又兩次輸出。

解決方式:

python C:\Users\pc\Desktop\yunserver-1.1\manage.py runserver --noreload 0.0.0.0:8000

使用不動態加載方式運行(這樣可能會影響開發環境中動態加載)

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

您可能感興趣的文章:
  • Python多進程的使用詳情
  • Python多線程與多進程相關知識總結
  • python實現多進程并發控制Semaphore與互斥鎖LOCK
  • python 多進程和多線程使用詳解
  • Python 多進程原理及實現
  • python多進程基礎詳解

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

巨人網絡通訊聲明:本文標題《python 實現多進程日志輪轉ConcurrentLogHandler》,本文關鍵詞  python,實現,多,進程,日志,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 實現多進程日志輪轉ConcurrentLogHandler》相關的同類信息!
  • 本頁收集關于python 實現多進程日志輪轉ConcurrentLogHandler的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久久久久久久看片| 亚洲自拍偷拍av| 综合久久久久综合| 亚洲第一久久影院| 懂色av中文字幕一区二区三区| 色就色 综合激情| 久久精品日韩一区二区三区| 天使萌一区二区三区免费观看| 成人黄色大片在线观看| 日韩三级电影网址| 日韩中文字幕av电影| 99久久免费精品| 国产免费久久精品| 国产美女久久久久| 精品国产第一区二区三区观看体验 | 国产人久久人人人人爽| 七七婷婷婷婷精品国产| 91久久线看在观草草青青| 国产日韩欧美一区二区三区乱码 | 激情综合五月天| 欧美日韩三级在线| 一区二区三区资源| 日本韩国一区二区三区视频| 国产精品久久夜| 成人黄动漫网站免费app| 精品国产免费人成在线观看| 美女精品一区二区| 日韩欧美国产三级| 麻豆91免费观看| 亚洲精品一区二区三区在线观看| 青青草精品视频| 日韩一区二区三区视频| 日韩电影在线免费| 日韩欧美一二区| 久久se这里有精品| 久久蜜桃香蕉精品一区二区三区| 精品中文字幕一区二区小辣椒| 日韩视频在线你懂得| 精品一二三四区| 久久精品夜夜夜夜久久| 国产不卡一区视频| 18成人在线视频| 色婷婷久久综合| 亚洲电影中文字幕在线观看| 91精品国产综合久久婷婷香蕉| 秋霞电影一区二区| 国产欧美精品一区二区色综合 | 午夜国产精品一区| 精品国产自在久精品国产| 国产高清在线精品| 亚洲精选一二三| 777久久久精品| 国产一二精品视频| 亚洲三级小视频| 在线电影国产精品| 国产乱一区二区| 亚洲精品视频免费看| 91精品一区二区三区久久久久久| 久久99久久久久久久久久久| 欧美国产成人在线| 欧美日韩一区三区| 国产成人亚洲精品狼色在线| 亚洲欧美成人一区二区三区| 欧美一区二区视频在线观看2022 | 国产日韩欧美一区二区三区综合 | 久久久午夜精品理论片中文字幕| 91免费国产在线观看| 蜜桃视频一区二区三区| 国产精品传媒入口麻豆| 欧美久久免费观看| 成人永久aaa| 日本一不卡视频| 亚洲天天做日日做天天谢日日欢 | 久久久亚洲高清| 日本伦理一区二区| 国产精品18久久久| 午夜成人免费电影| 国产欧美视频一区二区三区| 91精品国产91久久久久久一区二区 | 波多野结衣在线一区| 五月天国产精品| 亚洲欧洲另类国产综合| 日韩欧美自拍偷拍| 在线视频欧美精品| 成人小视频免费在线观看| 日本不卡免费在线视频| 亚洲综合一区二区| 亚洲欧洲日本在线| 国产精品系列在线| 精品不卡在线视频| 日韩一级免费观看| 欧美日本一区二区| 欧美探花视频资源| 99riav久久精品riav| 国产伦精一区二区三区| 日韩精品色哟哟| 性久久久久久久久| 一区二区在线观看免费视频播放| 中文字幕 久热精品 视频在线| 日韩美女视频在线| 日韩午夜在线观看视频| 欧美日韩国产免费一区二区| 欧美中文字幕亚洲一区二区va在线| www.欧美.com| 99精品视频在线观看免费| 成人午夜在线播放| 99久久伊人精品| 成人国产精品免费网站| 波多野结衣视频一区| 成人av网址在线| a级精品国产片在线观看| 丰满少妇在线播放bd日韩电影| 国产精品一区二区在线观看网站| 美女mm1313爽爽久久久蜜臀| 精品无人区卡一卡二卡三乱码免费卡| 日韩高清欧美激情| 精品午夜一区二区三区在线观看| 久久99国内精品| 国产传媒久久文化传媒| 国产成人免费在线观看不卡| 成人禁用看黄a在线| 91无套直看片红桃| 91福利国产精品| 91精品欧美一区二区三区综合在| 91精品欧美久久久久久动漫| 欧美α欧美αv大片| 国产亚洲福利社区一区| 自拍偷拍国产精品| 亚洲va欧美va国产va天堂影院| 图片区小说区区亚洲影院| 美女看a上一区| 福利视频网站一区二区三区| 在线中文字幕不卡| 日韩三级高清在线| 中国色在线观看另类| 亚洲va欧美va人人爽| 国产一区二区看久久| 在线观看国产91| 日韩色视频在线观看| 17c精品麻豆一区二区免费| 手机精品视频在线观看| 激情综合色综合久久| 99re6这里只有精品视频在线观看| 在线免费观看日本欧美| 26uuu成人网一区二区三区| 国产精品蜜臀av| 亚洲成av人片在线观看| 丰满白嫩尤物一区二区| 在线不卡中文字幕| 国产精品久久二区二区| 日韩 欧美一区二区三区| 成人小视频免费在线观看| 宅男在线国产精品| 国产精品久久久久四虎| 久久99九九99精品| 欧美日韩一区二区三区不卡 | 337p日本欧洲亚洲大胆精品| 亚洲欧美日韩在线不卡| 国产一区二区三区美女| 欧美日韩你懂得| 国产精品国产三级国产三级人妇| 日本sm残虐另类| 色婷婷久久99综合精品jk白丝| 精品国产免费人成在线观看| 亚洲在线视频免费观看| 懂色av一区二区三区免费观看| 欧美人与性动xxxx| 一区二区三区中文字幕精品精品| 国内精品伊人久久久久av影院| 欧美日韩大陆一区二区| 国产精品对白交换视频 | 激情五月激情综合网| 欧美片在线播放| 亚洲嫩草精品久久| 成人久久久精品乱码一区二区三区| 欧美日韩一级大片网址| 一区二区三区四区在线| 成人黄色av网站在线| 国产清纯美女被跳蛋高潮一区二区久久w | 美脚の诱脚舐め脚责91| 91行情网站电视在线观看高清版| 国产亚洲欧美中文| 国产在线精品不卡| 精品免费日韩av| 蜜桃av一区二区| 欧美喷潮久久久xxxxx| 亚洲小说欧美激情另类| 91官网在线免费观看| 一区二区三区成人| 一本一道久久a久久精品综合蜜臀| 国产精品午夜在线观看| 成人免费电影视频| 中文字幕欧美三区| 懂色av一区二区夜夜嗨| 日本一区二区三区四区| 成人一区二区三区| 国产精品天干天干在观线| 成人av资源站| 亚洲乱码国产乱码精品精的特点| 色综合久久66|