python3 log工具

python3 log工具 logutil.py

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

import os,sys,traceback
import logging
from logging.handlers import RotatingFileHandler
import getpass




def singleton(cls):
    instances = {}
    def get_instance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return get_instance()

@singleton
class GConfig:
    def __init__(self):
        self.logger_filename = "server.log"
        self.logger_lv = "INFO"

@singleton
class Logger(object):
    def __init__(self):
        log_path = os.path.join(os.path.expanduser("."), "logs")
        Log_filename = os.path.join(log_path, GConfig.logger_filename)
        self.loggername = getpass.getuser()
        self.logr = logging.getLogger()
        if GConfig.logger_lv.upper().strip() == 'DEBUG':
            self.logr.setLevel(logging.DEBUG)
        elif GConfig.logger_lv.upper().strip() == 'WARNING':
            self.logr.setLevel(logging.WARNING)
        elif GConfig.logger_lv.upper().strip() == 'ERROR':
            self.logr.setLevel(logging.ERROR)
        elif GConfig.logger_lv.upper().strip() == 'CRITICAL':
            self.logr.setLevel(logging.CRITICAL)
        else:
            self.logr.setLevel(logging.INFO)
        # self.logr.setLevel(logging.WARNING)
        
        handler = None
        if not os.path.isdir(log_path):
            try:
                os.mkdir(log_path) # create dir if it doesn't exist
            except:
                raise IOError("Couldn't create \"" + log_path + "\" folder. Check" \
                          " permissions")
        try:
            handler = logging.FileHandler(Log_filename, "a")
            # create RotatingFileHandler,最多备份1个日志文件,每个日志文件最大20M
            handler = RotatingFileHandler(Log_filename, maxBytes = 20*1024*1024,backupCount = 5)
            formatter = logging.Formatter("%(asctime)s  %(name)s - %(filename)s[line:%(lineno)d] - %(levelname)s - %(message)s")
            handler.setFormatter(formatter)
        except:
            raise IOError("Couldn't create/open file \"" + Log_filename + "\". Check permissions.")
        
        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(formatter)
        if handler:
            self.logr.addHandler(handler)
        self.logr.addHandler(ch)
    
if __name__ =="__main__":
        # 'application' code
        Logger.logr.warning('debug message')

使用

from logutil import Logger
Logger.logr.info("hello world")
posted @ 2024-10-14 15:16  BrianSun  阅读(6)  评论(0编辑  收藏  举报