ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

    • 并发编程

    • 爬虫笔记

    • 模块笔记

      • PyInstaller
      • Jieba
      • Kubernetes
      • Logging
      • Loguru
        • Loguru
          • Loguru介绍
          • Loguru用法
          • 接管logging日志
      • Socket
      • APScheduler
      • PyMySQL
      • Redis
    • 后端笔记

  • C笔记

  • C++笔记

  • Arduino笔记

  • Web笔记

  • Dev
  • Python笔记
  • 模块笔记
Hoshinozora
2024-01-05
目录

Loguru

# Loguru

# Loguru介绍

Loguru是一个开箱即用的日志记录模块,我们不再需要复杂的初始化操作就可以记录日志。

# Loguru用法

# 导入模块
import sys
from loguru import logger

# 日志级别
LOG_LEVEL = "DEBUG"

# 日志配置
LOG_FORMAT = "<magenta>{time:YYYY-MM-DD HH:mm:ss:SSS}</magenta> | <light-yellow><{name}</light-yellow>:<light-yellow>{function}</light-yellow>:<light-yellow>{line}></light-yellow> | <level>[{level}]</level> -> <level>{message}</level>"

# 去掉默认的Handler,添加自己的Handler
logger.remove(handler_id=0)

# 日志输出Handler
logger.add(
    # 输出
    "./app.log",
    format=LOG_FORMAT,
    # 日志等级
    level=LOG_LEVEL,
    # 日志轮转
    rotation="5 MB",
    # 最长保留时间
    retention="15 days",
    # zip格式压缩旧日志文件
    compression="gz",
    # 日志文件不需要输出颜色
    colorize=False,
    # 异步写入确保日志完整性
    enqueue=True,
    encoding="utf-8",
)
# 屏幕输出Handler
logger.add(sys.stdout, format=LOG_FORMAT, level=LOG_LEVEL, colorize=True, enqueue=True)

if __name__ == "__main__":
    logger.debug("This is Test Debug!")
    logger.info("This is Test Info!")
    logger.success("This is Test Success!")
    logger.error("This is Test Error!")
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

# 接管logging日志

Loguru可以接管第三方模块默认的logging日志。

需要在其他模块产生日志前执行,以进行接管。

# 导入模块
import logging
import sys
from loguru import logger


# 自定义类,拦截logging标准库的日志,重定向到loguru
class InterceptHandler(logging.Handler):
    def emit(self, record):
        try:
            level = logger.level(record.levelname).name
        except ValueError:
            level = record.levelno
        frame, depth = logging.currentframe(), 2
        while frame.f_code.co_filename == logging.__file__:
            frame = frame.f_back
            depth += 1
        logger.opt(exception=record.exc_info, depth=depth).log(level, record.getMessage())

def take_over_log():
    # 拦截所有标准库logging日志
    logging.basicConfig(handlers=[InterceptHandler()], level=0)  # type: ignore

	# 确保所有已存在的logger也使用这个handler
    for name in logging.root.manager.loggerDict.keys():
        logging.getLogger(name).handlers = []
        logging.getLogger(name).propagate = True

    # 将tortoise的日志设为灾难,以实现不显示
    for name in ["tortoise", "tortoise.db_client", "tortoise.orm"]:
        logging.getLogger(name).setLevel(logging.CRITICAL)

take_over_log()
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
#Python#模块#日志
Logging
Socket

← Logging Socket→

最近更新
01
Vue路由
12-09
02
FastAPI实现用户管理
11-23
03
Tortoise ORM
11-23
更多文章>
Theme by Vdoing | Copyright © 2022-2026 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式