python利用loguru模块实现简易的通用代码日志系统(utils)
实现主要通用功能:
python日志同时输出到控制台(屏幕)和文件。(日志添加多个handler)
日志按功能划分为不同文件。
此处再提及一些新入坑loguru遇到的一些小问题,在代码中都有实现。
loguru如何格式化控制台输出日志(loguru修改了format后格式只在文件中生效,未在控制台生效)
loguru如何既输出到控制台(屏幕)又输出到文件。
loguru如何每隔多少大小分成新的log文件。
loguru如何实现日志文件按个数保存(到达某一日志文件数量后自动清理)
loguru如何实现日志文件按照天数保存,超过指定天数自动清理。
loguru如何实现日志文件压缩存储,分隔文件后旧文件自动压缩,节省磁盘空间。
python常用的日志实现模块通常是logging,但是后来发现配置起来较为复杂,又发现了一个更简易,实现起来更方便,显示效果更好的日志记录模块loguru,能够满足日常开发的一般需求,因此使用该模块实现了一个建议的日志记录框架。
代码实现demo
日志核心文件
logcore.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| import sys import loguru import copy
logger = loguru.logger logger.remove() logger1 = copy.deepcopy(logger) logger2 = copy.deepcopy(logger)
class LogCore(object): """ 使用指定format格式输出到控制台 """ def __init__(self): self.logger = logger
self.log_level = "DEBUG"
self.log_format = '{time} <red>{level}</red> {message}'
def log_conf(self): self.logger.add(format=self.log_format, sink=sys.stderr, level=self.log_level) return self.logger
class LogCore2(object): """ 使用默认输出格式输出到控制台 使用指定输出格式输出到文件 """ def __init__(self): self.logger = logger2
self.LOG_PATH = "./templogs/" self.log_name = "test2.log" self.log_file_size = "50 MB" self.log_retention = 20 self.log_level = "DEBUG"
self.log_format = '{time} <red>{level}</red> {message}'
def log_conf(self): self.logger.add( format=self.log_format, sink=self.LOG_PATH+self.log_name, rotation=self.log_file_size, retention=self.log_retention, level=self.log_level ) self.logger.add(sys.stderr) return self.logger
_logcore = LogCore() _logcore2 = LogCore2()
logcore = _logcore.log_conf() logcore2 = _logcore2.log_conf()
|
调用日志的测试文件
test.py
1 2 3 4 5 6 7 8
| from logcore import logcore, logcore2 def main(): logcore.error(11111) logcore2.error(22222)
if __name__ == '__main__': main()
|