Python 우수한 타사 비동기 로그 라이브러리 loguru 소개

I. 소개

파이썬 코드를 작성하고 디버깅하는 과정에서 로그를 기록해야 하는 경우가 종종 있는데, 보통 파이썬과 함께 제공되는 내장 표준 라이브러리 로깅을 사용하는데 이 라이브러리를 사용하면 설정이 더 번거롭다. 프로그래밍 효율성을 향상시키기 위해 이 기사에서는 최근 발견된 보물 타사 로그 라이브러리인 Loguru에 초점을 맞춥니다. 라이브러리 이름은 힌디어로 로그 마스터를 의미합니다.

Loguru의 우아함을 설명하기 위해 먼저 직관적인 비교를 해보겠습니다. Python과 함께 제공되는 로깅을 사용하여 샘플 코드는 다음과 같습니다.

20221221220533

샘플 출력은 다음과 같습니다.

20221221220709

Loguru 라이브러리를 사용한 샘플 코드는 다음과 같습니다.

20221221220734

Loguru를 이용하여 로그를 출력하고 터미널 실행 후 색상이 있는 로그가 나타나 사용이 매우 편리합니다.

둘, loguru 설치

pip를 사용하여 직접 설치하십시오. 명령은 다음과 같습니다.

pip install loguru

다음을 사용하여 터미널에 출력합니다.

from loguru import logger
logger.debug("msg msg msg!")

파일 사용량에 대한 출력:

from loguru import logger
logger.add("file_name.log")
logger.debug("msg msg msg!")

3. 특징

Loguru 라이브러리의 풍부한 기능을 제공하는 공식 github를 참조하십시오.설명할 몇 가지 중요한 기능은 다음과 같습니다.

3.1 기본 제공

Loguru 라이브러리 설계의 원래 의도는 오직 하나뿐인 로거를 추구하는 것이며 사용의 편의를 위해 출력 스타일이 미리 설정되어 있습니다. 로그를 인쇄해야 하는 경우 다음 방법만 수행하면 됩니다.

from loguru import logger
logger.debug("That's it, beautiful and simple logging!")

3.2 초기화 없이 가져오기 기능 사용 가능

Loguru에서 어떻게 출력 스타일을 사용자 정의할 수 있습니까? 출력 정보를 필터링하는 방법은 무엇입니까? 로그 수준을 설정하는 방법은 무엇입니까?

답은 add() 함수를 호출하는 것입니다.

logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")

예는 다음과 같습니다.

from loguru import logger
logger.add("info.log", format="{time} {level} {message}", filter="", level="INFO")
logger.debug("This is a debug msg")
logger.info("This is a info msg")

info.log를 확인하면 결과는 다음과 같습니다.

20221221221253

3.3 더 쉬운 파일 로깅 및 덤프/보유/압축 방법

간단한 구성을 통해 로그 저장을 보다 사용자 친화적으로 만들 수 있습니다. 예를 들어 오래된 로그를 삭제하거나 저장된 로그를 자동으로 압축하려는 경우 다음 명령을 참조할 수 있습니다.

logger.add("file_1.log", rotation="500 MB")    # 文件过大(超过500M)就会重新生成一个文件
logger.add("file_2.log", rotation="12:00")     # 每天12点创建新文件
logger.add("file_3.log", rotation="1 week")    # 文件时间过长就会创建新文件
logger.add("file_4.log", retention="10 days")  # 一段时间后会清空
logger.add("file_5.log", compression="zip")    # 保存zip格式

3.4 더 우아한 문자열 형식의 출력

Loguru 라이브러리는 문자열 처리에 더 강력합니다. 문자열 형식 출력은 {}를 지원하여 %를 대체합니다. 이 함수는 str.format()과 유사합니다.

logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")

3.5 스레드 또는 메인 스레드에서 예외가 발생할 수 있습니다.

코드가 충돌할 때 로그에서 오류 정보를 볼 수 없는 경우가 종종 있습니다. Loguru 라이브러리에서 @logger.catch 데코레이터를 사용하여 예외가 발생할 때 오류 메시지가 저장되도록 할 수 있습니다.

예는 다음과 같습니다.

@logger.catch
def main(x, y, z):
    return x * y / z

res = main(1,2,0)
print(res)

20221221221625

3.6 사용자 정의 색상 지원 가능

Loguru는 사용자 정의 색상을 지원합니다.기본 색상이 마음에 들지 않으면 다음과 같이 변경할 수 있습니다.

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")

3.7 비동기, 스레드 및 다중 프로세스 안전 지원

Loguru는 기본적으로 스레드로부터 안전하지만 다중 프로세스로부터 안전하지는 않습니다. 그러나 다중 프로세스/비동기 로깅이 필요한 경우 이를 지원할 수도 있습니다. enqueue 매개변수를 추가하기만 하면 됩니다.

logger.add("somefile.log", enqueue=True)

3.8 지원 예외 무결성 설명

로그의 경우 오류 스택이 없는 로그는 영혼이 없습니다. Loguru를 사용하면 전체 스택 추적을 표시하여 문제(변수 포함)를 파악하는 데 도움이 됩니다.

logger.add("out.log", backtrace=True, diagnose=True)  # Caution, may leak sensitive data in prod

def func(a, b):
    return a / b

def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")

nested(0)

작업 결과는 다음과 같습니다.

20221221222054

3.9 날짜/시간 처리 개선

다음과 같이 날짜 출력 스타일을 사용자 정의할 수 있습니다.

logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")  #定义日期样式

3.10 이메일 알림 지원

Loguru는 강력한 알리미 라이브러리와 함께 사용하여 프로그램이 예기치 않게 실패할 때 이메일을 받거나 다른 많은 유형의 알림을 보낼 수 있습니다.

import notifiers

params = {
    "username": "[email protected]",
    "password": "abc123",
    "to": "[email protected]"
}

# 初始化时发送一封邮件
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)

# 发生Error时,发邮件进行告警
from notifiers.logging import NotificationHandler

handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")

이 구성 후에는 오류 로그가 생성될 때마다 프로그램이 자동으로 사용자에게 친숙한 알림 이메일을 사서함으로 보냅니다.

4. 요약

이 기사는 Loguru 라이브러리의 주요 기능에 대한 간략한 개요를 제공하며 기능에 대한 자세한 내용은 공식 github를 참조하십시오.

일상 생활에서 로그 처리를 위해 Loguru 라이브러리를 사용하는 것이 좋습니다.

loguru 공식 웹사이트: https://loguru.readthedocs.io/en/stable/index.html
api 문서: https://loguru.readthedocs.io/en/stable/api.html
프로젝트 주소: https://github. com/Delgan/loguru

이 기사는 https://zhuanlan.zhihu.com/p/397181586 에서 복사되었습니다.

추천

출처blog.csdn.net/hubing_hust/article/details/128402860