- 极简版,利用Python logging模块实现往控制台和文件中添加日志
import logging
class GlobalLogger:
def __init__(self, log_file):
self.logger = self._setup_logger(log_file)
def _setup_logger(self, log_file):
logger = logging.getLogger("GlobalLogger")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
def __call__(self, msg):
self.logger.debug(msg)
logger = GlobalLogger("app.log")
logger("Debug message")
logger("Info message")
logger("Warning message")
logger("Error message")
import logging
class SimpleLogger:
def __init__(self, log_file=None, print_logs=True):
self.__logger = logging.getLogger(__name__)
self.__logger.setLevel(logging.DEBUG)
self.__log_file = log_file
self.__print_logs = print_logs
self.__file_handler = None
self.__console_handler = None
if self.__log_file:
self.enable_file_output(self.__log_file)
if self.__print_logs:
self.enable_console_output()
def enable_console_output(self):
"""开启控制台输出"""
if not self.__console_handler:
self.__console_handler = logging.StreamHandler()
self.__logger.addHandler(self.__console_handler)
def disable_console_output(self):
"""关闭控制台输出"""
if self.__console_handler:
self.__logger.removeHandler(self.__console_handler)
self.__console_handler = None
def enable_file_output(self, log_file):
"""
开启文件输出
:param log_file: 日志文件路径
"""
if self.__file_handler:
self.__logger.removeHandler(self.__file_handler)
self.__file_handler = logging.FileHandler(log_file)
self.__logger.addHandler(self.__file_handler)
self.__log_file = log_file
def disable_file_output(self):
"""关闭文件输出"""
if self.__file_handler:
self.__logger.removeHandler(self.__file_handler)
self.__file_handler = None
self.__log_file = None
def set_log_file(self, log_file):
"""
设置日志文件输出路径
:param log_file: 日志文件路径
"""
self.enable_file_output(log_file)
def __call__(self, message):
"""
将实例对象作为函数调用,实现日志输出
:param message: 日志消息
"""
self.__logger.info(message)
if __name__ == '__main__':
logger = SimpleLogger(log_file='default.log', print_logs=True)
logger.set_log_file('D:\\existed path\\simple.log')
logger('info mation')