python 多进程按天打印日志

encoding: utf-8

import os
import time
import logging

“”"
重写FileHandler类,用于多线程中日志按时间间隔分割
“”"

class SafeFileHandler(logging.FileHandler):
def init(self, filename, mode, timemode=“day”):
“”"
Use the specified filename for streamed logging
:param filename:
:param mode:
:param timemode: 日志的时间分片方式(天/小时/分/秒)
“”"
encoding = None
logging.FileHandler.init(self, filename, mode=‘a’, encoding=None, delay=False)
self.mode = mode
self.encoding = encoding
if timemode == “day”:
self.suffix = “%Y-%m-%d”
elif timemode == “hour”:
self.suffix = “%Y-%m-%d_%H”
elif timemode == “min”:
self.suffix = “%Y-%m-%d_%H:%M”
elif timemode == “sec”:
self.suffix = “%Y-%m-%d_%H:%M:%S”

    self.suffix_time = ""

def emit(self, record):
    """
    Emit a record.

    Always check time
    """
    try:
        if self.check_base_filename(record):
            self.build_base_filename()
        logging.FileHandler.emit(self, record)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        self.handleError(record)

def check_base_filename(self, record):
    """
    Determine if builder should occur.

    record is not used, as we are just comparing times,
    but it is needed so the method signatures are the same
    """
    time_tuple = time.localtime()

    if self.suffix_time != time.strftime(self.suffix, time_tuple) or not os.path.exists(
            self.baseFilename + '.' + self.suffix_time):
        return 1
    else:
        return 0

def build_base_filename(self):
    """
    do builder; in this case,
    old time stamp is removed from filename and
    a new time stamp is append to the filename
    """
    if self.stream:
        self.stream.close()
        self.stream = None

    # remove old suffix
    if self.suffix_time != "":
        index = self.baseFilename.find("." + self.suffix_time)
        if index == -1:
            index = self.baseFilename.rfind(".")
        self.baseFilename = self.baseFilename[:index]

    # add new suffix
    current_time_tuple = time.localtime()
    self.suffix_time = time.strftime(self.suffix, current_time_tuple)
    self.baseFilename = self.baseFilename + "." + self.suffix_time

    self.mode = 'a'
    if not self.delay:
        self.stream = self._open()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值