Heim >Backend-Entwicklung >Python-Tutorial >10 Tipps zur Beherrschung des Python-Logging-Moduls

10 Tipps zur Beherrschung des Python-Logging-Moduls

PHPz
PHPznach vorne
2024-02-21 09:30:04499Durchsuche

掌握 Python Logging 模块的 10 个技巧

1. Passen Sie den Log-Level an

Zusätzlich zu den Standardstufen DEBUG, INFO, WARNUNG, FEHLER und KRITISCH können Sie benutzerdefinierte Stufen erstellen. Dies ist nützlich, um Ereignisse unterschiedlicher Schwere zu unterscheiden.

import logging

# 创建自定义日志级别
CUSTOM_LEVEL = logging.INFO + 5
logging.addLevelName(CUSTOM_LEVEL, "CUSTOM")

# 创建一个 Logger 并设置自定义日志级别
logger = logging.getLogger("my_logger")
logger.setLevel(CUSTOM_LEVEL)

2. Verwenden Sie verschiedene Prozessoren

Ein Handler ist dafür verantwortlich, Protokollereignisse an ein bestimmtes Ziel zu senden, beispielsweise eine Datei oder Konsole. Sie können den Prozessor an Ihre spezifischen Anforderungen anpassen.

import logging

# 创建一个 FileHandler 并设置日志文件名
file_handler = logging.FileHandler("my_log.txt")

# 创建一个 StreamHandler 并输出到控制台
stream_handler = logging.StreamHandler()

# 将处理器添加到 Logger
logger = logging.getLogger("my_logger")
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

3. Verwenden Sie Filter

Mit Filtern können Sie Protokollereignisse nach bestimmten Kriterien filtern. Dies ist nützlich, um nur relevante Ereignisse zu protokollieren.

import logging

# 创建一个过滤器以过滤 INFO 级别以上的事件
info_filter = logging.Filter()
info_filter.filter = lambda record: record.levelno >= logging.INFO

# 将过滤器添加到 Logger
logger = logging.getLogger("my_logger")
logger.addFilter(info_filter)

4. Protokollausgabe formatieren

Sie können das Format der Protokollereignisse anpassen, um die benötigten Informationen bereitzustellen.

import logging

# 创建一个 FORMatter 并设置格式字符串
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")

# 将 Formatter 添加到处理器
handler = logging.StreamHandler()
handler.setFormatter(formatter)

# 将处理器添加到 Logger
logger = logging.getLogger("my_logger")
logger.addHandler(handler)

5. Verwenden Sie den Kontextprozessor

Mit dem Kontextprozessor können Sie beim Protokollieren zusätzliche Informationen hinzufügen. Dies ist nützlich, um den Kontext innerhalb einer Anfrage oder

Transaktion zu verfolgen.

import logging
from contextlib import contextmanager

# 创建一个上下文处理器以添加请求 ID
@contextmanager
def request_id_context(request_id):
previous_request_id = logging.currentframe().f_locals.get("request_id")
try:
logging.currentframe().f_locals["request_id"] = request_id
yield
finally:
logging.currentframe().f_locals["request_id"] = previous_request_id

# 使用上下文处理器
logger = logging.getLogger("my_logger")
with request_id_context("1234"):
logger.info("Received request")

6. Verwenden Sie die Wörterbuchkonfiguration

Sie können das Protokollierungsmodul einfach mithilfe eines Wörterbuchs konfigurieren.

import logging

# 配置字典
logging_config = {
"version": 1,
"formatters": {
"default": {
"format": "%(asctime)s - %(levelname)s - %(message)s"
}
},
"handlers": {
"file": {
"class": "logging.FileHandler",
"filename": "my_log.txt",
"formatter": "default",
},
"console": {
"class": "logging.StreamHandler",
"formatter": "default",
}
},
"loggers": {
"my_logger": {
"handlers": ["file", "console"],
"level": "INFO",
}
}
}

# 从字典配置 Logging
logging.config.dictConfig(logging_config)

7. Integrieren Sie Pakete von Drittanbietern

Das Protokollierungsmodul kann in Pakete von Drittanbietern wie Sentry oder Rollbar integriert werden. Dadurch können Sie Protokollereignisse einfach an einen Remote-Dienst senden.

import logging
import sentry_sdk

# 初始化 Sentry 并与 Logging 集成
sentry_sdk.init()
logging.basicConfig(level=logging.INFO, handlers=[sentry_sdk.handler.SentryHandler()])

8. Verwenden Sie

Multi-ThreadingUnterstützung Das

Protokollierungsmodul unterstützt Multithread-Anwendungen. Es verwendet lokalen Thread-Speicher, um sicherzustellen, dass jeder Thread über einen eigenen unabhängigen Protokollprozessor verfügt.

import logging
import threading

# 创建线程安全的 Logger
logger = logging.getLogger("my_logger")

# 创建一个线程并向 Logger 记录
def thread_function():
logger.info("Executing in a separate thread")

# 启动线程
thread = threading.Thread(target=thread_function)
thread.start()
9. Ausnahmen aufzeichnen

Das Protokollierungsmodul kann auftretende Ausnahmen automatisch aufzeichnen.

import logging

# 创建一个 Logger
logger = logging.getLogger("my_logger")

# 记录一个异常
try:
raise Exception("An error occurred")
except Exception as e:
logger.exception(e)

10. Verwenden Sie die erweiterte Protokollierung

Python

3.8 führt Unterstützung für erweiterte Protokollierung ein. Auf diese Weise können Sie benutzerdefinierte Protokollierungsfunktionen und -handler erstellen.

import logging

# 创建一个自定义日志记录函数
def my_log_function(logger, level, msg, *args, **kwargs):
# 您的自定义日志记录逻辑

# 添加自定义日志记录函数到 Logger
logger = logging.getLogger("my_logger")
logger.addHandler(logging.NullHandler())
logger.addFilter(logging.Filter())
logger.log = my_log_function

Das obige ist der detaillierte Inhalt von10 Tipps zur Beherrschung des Python-Logging-Moduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lsjlt.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen