python logging设置_python使用logging规范的日志配置代码

#! /usr/bin/env python

# -*- coding:utf-8 -*-

import os

import logging

from logging.handlers import TimedRotatingFileHandler

# 日志级别

CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

CURRENT_PATH = os.path.abspath(".")

LOG_PATH = os.path.join(CURRENT_PATH, 'log')

if not os.path.exists(LOG_PATH):

os.makedirs(LOG_PATH)

class LogHandler(logging.Logger):

"""

LogHandler

"""

def __init__(self, name, level=DEBUG, stream=True, file=True):

self.name = name

self.level = level

logging.Logger.__init__(self, self.name, level=level)

if stream:

self.__setStreamHandler__()

if file:

self.__setFileHandler__()

def __setFileHandler__(self, level=None):

"""

set file handler

:param level:

:return:

"""

file_name = os.path.join(LOG_PATH, '{name}.log'.format(name=self.name))

# 设置日志回滚, 保存在log目录, 一天保存一个文件, 保留15天

file_handler = TimedRotatingFileHandler(filename=file_name, when='D', interval=1, backupCount=15)

file_handler.suffix = '%Y-%m-%d.log'

if not level:

file_handler.setLevel(self.level)

else:

file_handler.setLevel(level)

formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s')

file_handler.setFormatter(formatter)

self.file_handler = file_handler

self.addHandler(file_handler)

def __setStreamHandler__(self, level=None):

"""

set stream handler

:param level:

:return:

"""

stream_handler = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s')

stream_handler.setFormatter(formatter)

if not level:

stream_handler.setLevel(self.level)

else:

stream_handler.setLevel(level)

self.addHandler(stream_handler)

def resetName(self, name):

"""

reset name

:param name:

:return:

"""

self.name = name

self.removeHandler(self.file_handler)

self.__setFileHandler__()

真正完整版按照时间午夜分割的日志系统

#! /usr/bin/env python

# -*- coding:utf-8 -*-

import os

from datetime import datetime

import time

import logging

from logging.handlers import BaseRotatingHandler

# 选择log需要存的地址

base_dir = "/root/log"

class LogHandler(logging.Logger):

"""

LogHandler

"""

def __init__(self, name, level=logging.DEBUG, stream=True, file=True):

self.name = name

self.level = level

logging.Logger.__init__(self, self.name, level=level)

if stream:

self.__setStreamHandler__()

if file:

self.__setFileHandler__()

def __setFileHandler__(self, level=None):

"""

set file handler

:param level:

:return:

"""

log_dir = os.path.join(base_dir, self.name)

if not os.path.exists(log_dir):

os.makedirs(log_dir)

file_handler = DailyRotatingFileHandler(log_dir)

if not level:

file_handler.setLevel(self.level)

else:

file_handler.setLevel(level)

formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s')

file_handler.setFormatter(formatter)

self.file_handler = file_handler

self.addHandler(file_handler)

def __setStreamHandler__(self, level=None):

"""

set stream handler

:param level:

:return:

"""

stream_handler = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s')

stream_handler.setFormatter(formatter)

if not level:

stream_handler.setLevel(self.level)

else:

stream_handler.setLevel(level)

self.addHandler(stream_handler)

def resetName(self, name):

"""

reset name

:param name:

:return:

"""

self.name = name

self.removeHandler(self.file_handler)

self.__setFileHandler__()

class DailyRotatingFileHandler(BaseRotatingHandler):

def __init__(self, path):

self.log_dir = path

filename = self.current_log_file()

super().__init__(filename, 'a')

# 做个缓存,提升一下日志的速率

self.last_check = None

def current_log_file(self, create_dir=False):

date = datetime.now().strftime('%Y-%m-%d')

import os

log_name = date + ".log"

log_path = os.path.join(self.log_dir, log_name)

return log_path

def shouldRollover(self, record):

now = time.monotonic()

# 60s 内只检查一次

if self.last_check is None or now - self.last_check > 60:

self.last_check = now

log_file = self.current_log_file()

if os.path.isfile(log_file):

return False

else:

return True

return False

def doRollover(self):

if self.stream:

self.stream.close()

self.stream = None

filename = self.current_log_file(create_dir=True)

self.baseFilename = filename

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、付费专栏及课程。

余额充值