美文网首页
loguru 傻瓜日志

loguru 傻瓜日志

作者: 清晨起床敲代码 | 来源:发表于2023-07-13 11:11 被阅读0次

    logger.py

    import atexit as _atexit
    import sys as _sys
    
    from loguru._logger import _defaults, Core as _Core, Logger as _Logger
    
    """
    sink: 可以传入一个 file 对象,例如 sys.stderr 或者 open('file.log', 'w')。
    sink: 可以直接传入一个 str 字符串或者 pathlib.Path 对象,其实就是代表文件路径的,如果识别到是这种类型,它会自动创建对应路径的日志文件并将日志输出进去。
    sink: 可以是一个方法,可以自行定义输出实现。
    sink: 可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等等,这样就可以实现自定义 Handler 的配置。
    sink: 还可以是一个自定义的类,具体的实现规范可以参见官方文档: https://loguru.readthedocs.io/en/stable/api/logger.html。
    
    rotation:分隔日志文件,何时关闭当前日志文件并启动一个新文件的条件;
        例如,"500 MB"、"0.5 GB"、"1 month 2 weeks"、"10h"、"monthly"、"18:00"、"sunday"、"monday at 18:00"、"06:15"
    retention (str, int, datetime.timedelta or callable, optional) ,可配置旧日志的最长保留时间,例如,"1 week, 3 days"、"2 months"
    compression (str or callable, optional):
        日志文件在关闭时应转换为的压缩或归档格式,例如,"gz"、"bz2"、"xz"、"lzma"、"tar"、"tar.gz"、"tar.bz2"、"tar.xz"、"zip"
    delay (bool, optional):是否应该在配置了接收器之后立即创建文件,或者延迟到第一个记录的消息。默认为' False '。
    mode (str, optional) :与内置open()函数一样的打开模式。默认为' "a"(以附加模式打开文件)。
    buffering (int, optional) :内置open()函数的缓冲策略,它默认为1(行缓冲文件)。
    encoding (str, optional) :文件编码与内置的' open() '函数相同。如果' None ',它默认为'locale.getpreferredencoding() 。
    """
    
    
    class Logger:
        def __init__(self, prefix, logfile_path, level="INFO"):
            self.logfile_path = logfile_path
            self.prefix = prefix
            self.level = level
            self.logger = self.setup_logger()
    
        def filter_log(self, record):
            record["message"] = f"[{self.prefix}]-" + record["message"]
            return True
    
        def setup_logger(self):
            logger = _Logger(
                core=_Core(),
                exception=None,
                depth=0,
                record=False,
                lazy=False,
                colors=False,
                raw=False,
                capture=True,
                patcher=None,
                extra={},
            )
    
            if _defaults.LOGURU_AUTOINIT and _sys.stderr:
                logger.add(_sys.stderr)
    
            logger.add(
                # 日志文件路径
                sink=self.logfile_path,
                # 日志等级
                level=self.level,
                # 日志格式
                format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
                "<level>{level: <8}</level> | "
                "<level>{message}</level>",
                # 过滤
                filter=self.filter_log,
                # 日志创建周期
                rotation="00:00",
                # 保存
                retention="3 months",
                # 文件的压缩格式
                compression="tar.gz",
                # 编码格式
                encoding="utf-8",
                # 具有使日志记录调用非阻塞的优点
                enqueue=True,
            )
    
            _atexit.register(logger.remove)
            return logger
    
    

    init.py

    """
    实例化日志类
    """
    from logger import Logger
    
    
    base_dir = "/"
    one_log_path = base_dir + '/logs/one_{time:%Y-%m-%d}.log'
    two_log_path = base_dir + '/logs/two_{time:%Y-%m-%d}.log'
    
    one_logger = Logger('One', one_log_path , level="info").logger
    two_logger = Logger('Two', two_log_path, level="WARNING").logger
    

    work.py

    from . import one_logger 
    
    one_logger.info("xxxxxxx")
    one_logger.warning("xxxxxxx")
    one_logger.error("xxxxxxx")
    

    相关文章

      网友评论

          本文标题:loguru 傻瓜日志

          本文链接:https://www.haomeiwen.com/subject/rdjmudtx.html