logger.py 多线程
# -*- coding: utf-8 -*-
import logging
import re
from logging.handlers import TimedRotatingFileHandler
import inspect
import threading
class Logger:
def __init__(self, module):
self.logger = logging.getLogger(module)
self.logger.setLevel(logging.DEBUG)
self.lock = threading.Lock()
#formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s')
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s')
log_file_handler = TimedRotatingFileHandler(filename="logs/" + module + ".log", when="D", interval=1, backupCount=7)
log_file_handler.setFormatter(formatter)
log_file_handler.setLevel(logging.DEBUG)
self.logger.addHandler(log_file_handler)
def error(self, msg):
self.lock.acquire()
self.logger.error("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
self.lock.release()
def info(self, msg):
self.lock.acquire()
self.logger.info("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
self.lock.release()
def debug(self, msg):
self.lock.acquire()
self.logger.debug("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
self.lock.release()
'''
用法
from logger import Logger
file_name = __file__.split('/')[-1].strip('.py')
logger = Logger(file_name)
logger.info("hello logger")
'''
logger.py 多进程
# -*- coding: utf-8 -*-
import logging
import re
from cloghandler import ConcurrentRotatingFileHandler
import inspect
import threading
class Logger:
def __init__(self, module):
self.logger = logging.getLogger(module)
self.logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s')
log_file_handler = ConcurrentRotatingFileHandler("logs/" + module + ".log", "a", 20*1024*1024, 7)
log_file_handler.setFormatter(formatter)
log_file_handler.setLevel(logging.DEBUG)
self.logger.addHandler(log_file_handler)
def error(self, msg):
self.logger.error("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
def info(self, msg):
self.logger.info("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
def debug(self, msg):
self.logger.debug("[%s:%d] %s" % (inspect.stack()[1][1], inspect.stack()[1][2], str(msg)))
'''
用法
from logger import Logger
file_name = __file__.split('/')[-1].strip('.py')
logger = Logger(file_name)
logger.info("hello logger")
'''
format: 指定输出的格式和内容如下:
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息