pip install loguru
from logrur import logger
logger.debug('Hello logger')
# 2020-11-09 17:11:25.015 | DEBUG | __main__:<module>:1 - Hello loguru.
from loguru import logger
logger.add("file.log", # 日志輸出到指定文件
format="{time} {level} {message}", # 配置格式
filter="", # 過濾器
level="INFO" # 過濾級別
)
logger.info("這是一條info日志")
# 2019-03-14T20:01:25.392454+0800 INFO 這是一條info日志
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")
logger.add("file_1.log", rotation="500 MB") # 文件過大就會重新生成一個文件
logger.add("file_2.log", rotation="12:00") # 每天12點創建新文件
logger.add("file_3.log", rotation="1 week") # 文件時間過長就會創建新文件
logger.add("file_X.log", retention="10 days") # 一段時間后會清空
logger.add("file_Y.log", compression="zip") # 保存zip格式
logger.add("somefile.log", enqueue=True) # 異步寫入
logger.add("somefile.log", serialize=True) # 序列化為json
為了使用方便,自定義二次封裝logrur
import os
import datetime
from loguru import logger
class Logings:
__instance = None
# 文件名稱,按天創建
DATE = datetime.datetime.now().strftime('%Y-%m-%d')
# 項目路徑下創建log目錄保存日志文件
logpath = os.path.join(os.path.dirname(os.getcwd()), "logs") # 拼接指定路徑
# 判斷目錄是否存在,不存在則創建新的目錄
if not os.path.isdir(logpath): os.makedirs(logpath)
logger.add('%s\%s.log' % (logpath, DATE), # 指定文件
format="{time:YYYY-MM-DD HH:mm:ss} | {level}> {elapsed} | {message}",
encoding='utf-8',
retention='1 days', # 設置歷史保留時長
backtrace=True, # 回溯
diagnose=True, # 診斷
enqueue=True, # 異步寫入
# rotation="5kb", # 切割,設置文件大小,rotation="12:00",rotation="1 week"
# filter="my_module" # 過濾模塊
# compression="zip" # 文件壓縮
)
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super(Logings, cls).__new__(cls, *args, **kwargs)
return cls.__instance
def info(self, msg, *args, **kwargs):
return logger.info(msg, *args, **kwargs)
def debug(self, msg, *args, **kwargs):
return logger.debug(msg, *args, **kwargs)
def warning(self, msg, *args, **kwargs):
return logger.warning(msg, *args, **kwargs)
def error(self, msg, *args, **kwargs):
return logger.error(msg, *args, **kwargs)
def exception(self, msg, *args, exc_info=True, **kwargs):
return logger.exception(msg, *args, exc_info=True, **kwargs)
if __name__ == '__main__':
logs = Logings()
def func(a, b):
return a/b
def my(z, c):
try:
func(z,c)
except ZeroDivisionError:
logs.exception('...........')
my(5,0)