前言
Python 自带的 logging 模块来记录日志需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份,但是对于新手来说不太友好,所以决定封装一下。
将logging模块封装
import sys
import logging
from settings import *
from os import makedirs
from os. path import dirname, exists
创建Logger
类、init
初始化函数、get_logger
函数
class Logger(object):
def __init__(self):
pass
def get_logger(self,name=None):
pass
self. loggers = { }
self. LOG_ENABLED = LOG_ENABLED
self. LOG_TO_CONSOLE = LOG_TO_CONSOLE
self. LOG_TO_FILE = LOG_TO_FILE
self. LOG_PATH = LOG_PATH
self. LOG_LEVEL = LOG_LEVEL
self. LOG_FORMAT = LOG_FORMAT
get_logger
函数 判断是否输出到控制台代码
if self. LOG_ENABLED and self. LOG_TO_CONSOLE:
stream_handler = logging. StreamHandler( sys. stdout)
stream_handler. setLevel( level= self. LOG_LEVEL)
formatter = logging. Formatter( self. LOG_FORMAT)
stream_handler. setFormatter( formatter)
logger. addHandler( stream_handler)
if self. LOG_ENABLED and self. LOG_TO_FILE:
log_dir = dirname( self. LOG_PATH)
if not exists( log_dir) : makedirs( log_dir)
file_handler = logging. FileHandler( self. LOG_PATH, encoding= 'utf-8' )
file_handler. setLevel( level= self. LOG_LEVEL)
formatter = logging. Formatter( self. LOG_FORMAT)
file_handler. setFormatter( formatter)
logger. addHandler( file_handler)
至此log.py
文件就完成了 在创建一个settings.py
来存储log的配置选项(此文件可不创建直接在log.py
的初始化函数中配置)
LOG_ENABLED = os. getenv( 'LOG_ENABLED' , 'True' ) . upper( ) == 'TRUE'
LOG_TO_CONSOLE = os. getenv( 'LOG_TO_CONSOLE' , 'True' ) . upper( ) == 'TRUE'
LOG_TO_FILE = os. getenv( 'LOG_TO_FILE' , 'True' ) . upper( ) == 'TRUE'
LOG_LEVEL = os. getenv( 'LOG_LEVEL' , 'DEBUG' )
log_format = '%(levelname)s - %(asctime)s - process: %(process)d - %(filename)s - %(name)s - %(lineno)d - %(module)s - %(message)s'
LOG_FORMAT = os. getenv( 'LOG_FORMAT' , log_format)
BASE_DIR = os. path. dirname( os. path. abspath( __file__) )
PATH = os. path. join( BASE_DIR, 'logs' )
isExists = os. path. exists( PATH)
if not isExists:
os. makedirs( PATH)
now_date = datetime. datetime. now( ) . strftime( "%Y-%m-%d" )
LOG_PATH = os. path. join( PATH, f'proxy-log- { now_date} .log' )
from log import Logger
log = Logger( ) . get_logger( )
from settings import log
log. debug( 'This is a debug message!' )
log. error( 'This is an error message!' )
DEBUG - 2021 - 11 - 24 17 : 37 : 37 , 238 - process: 23652 - test. py - log - 10 - test - This is a debug message!
ERROR - 2021 - 11 - 24 17 : 37 : 37 , 238 - process: 23652 - test. py - log - 12 - test - This is an error message!
Process finished with exit code 0
结语