Python Logging: loguru vs logging
James Reed
Infrastructure Engineer · Leapcell

Python Logging 라이브러리 비교: logging vs loguru
1. Loguru로 로깅 간소화하기
Python 개발에서 로깅은 매우 중요한 도구입니다. 로깅은 개발자가 프로그램의 실행 상태를 기록하고, 문제를 디버깅하고, 시스템의 상태를 모니터링하는 데 도움이 됩니다. Python에는 내장된 logging
라이브러리가 있습니다. 그러나 변화하는 요구 사항에 따라 많은 사람들이 loguru
를 대안으로 사용하기 시작했습니다. 이 글에서는 이 두 라이브러리를 비교하여 귀하에게 더 적합한 로깅 솔루션을 선택하는 데 도움을 드립니다.
Loguru
는 인기 있는 타사 로깅 라이브러리입니다. 구성 프로세스를 간소화하고, 체인 호출을 지원하며, 더 풍부한 기능을 제공함으로써 logging
의 강력한 대체재가 되었습니다.
Loguru의 장점
- 간단한 구성:
Loguru
는 복잡한 구성을 만들 필요가 없습니다. 단 몇 줄의 코드로 복잡한 로깅 구성을 완료할 수 있습니다. - 체인 호출: 체인 호출을 지원하여 로깅을 더욱 직관적으로 만듭니다.
- 다중 대상 출력: 콘솔과 파일 모두에 대한 로깅 출력을 쉽게 구현할 수 있으며 풍부한 형식 구성도 지원합니다.
- 추가 기능: 자동 로그 압축, 로그 파일 로테이션 및 로그 보존 기간과 같은 기능을 지원합니다.
Loguru의 기본 예제
from loguru import logger # 로깅 구성 logger.add("app.log", rotation="500 MB") # 파일 크기가 500MB를 초과하면 자동으로 로테이션됩니다. # 로그 메시지 logger.info("이것은 정보 메시지입니다.") logger.warning("이것은 경고 메시지입니다.") logger.error("이것은 오류 메시지입니다.")
이 예제에서는 여러 핸들러를 추가적으로 구성할 필요가 없습니다. logger.add()
를 호출하는 것만으로 파일 로깅 구성을 쉽게 완료할 수 있습니다.
파일과 콘솔 모두에 출력하기
Loguru
는 파일과 콘솔 모두에 매우 편리하게 출력을 구현할 수 있습니다.
from loguru import logger import sys # 파일과 콘솔에 로깅 출력 추가 logger.add("app.log", rotation="500 MB", retention="10 days") # 파일 로테이션 및 10일 보존 logger.add(sys.stdout, level="INFO") # 콘솔에 출력 # 로그 메시지 logger.info("이것은 정보 메시지입니다.") logger.warning("이것은 경고 메시지입니다.") logger.error("이것은 오류 메시지입니다.")
여기서 logger.add(sys.stdout, level="INFO")
는 추가 구성 없이 콘솔에 로그를 표시할 수 있습니다.
2. Python 내장 logging의 장단점
장점
- 표준 라이브러리의 일부:
logging
은 Python 표준 라이브러리의 일부이므로 추가 설치가 필요 없으며 플랫폼 간 호환성이 있습니다. - 높은 사용자 정의 가능성:
logging
은 강력한 사용자 정의 기능을 제공하여 로그 형식, 레벨 및 대상(파일, 콘솔, 원격 서버 등)을 유연하게 제어할 수 있습니다. - 강력한 호환성: 많은 타사 라이브러리도
logging
을 사용하므로 다양한 로그를 원활하게 통합할 수 있습니다.
단점
- 복잡한 구성:
logging
의 기본 사용법은 비교적 간단하지만 약간 더 복잡한 구성은 길어지고 직관적이지 않게 됩니다. 특히 파일과 콘솔과 같은 여러 대상에 동시에 출력해야 하는 경우에 그렇습니다. - 체인 호출 없음:
logging
은loguru
와 같은 체인 호출을 지원하지 않으며 계층별 구성이 필요합니다.
기본 예제
logging
의 간단한 로깅 예제는 다음과 같습니다.
import logging # 로깅 구성 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='app.log', filemode='a' ) # 로그 메시지 logging.info("이것은 정보 메시지입니다.") logging.warning("이것은 경고 메시지입니다.") logging.error("이것은 오류 메시지입니다.")
이 예제에서 로그는 app.log
파일에 기록되지만 콘솔에는 표시되지 않습니다. 콘솔과 파일 모두에 로그를 표시하려면 StreamHandler
를 추가적으로 구성해야 합니다.
파일 및 콘솔로의 출력을 위한 구성
로그를 콘솔과 파일 모두에 출력하려면 여러 Handler
를 구성해야 합니다. 코드는 다음과 같습니다.
import logging # 로거 가져오기 logger = logging.getLogger() logger.setLevel(logging.INFO) # 파일 핸들러 file_handler = logging.FileHandler('app.log') file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) # 콘솔 핸들러 console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) # 로거에 핸들러 추가 logger.addHandler(file_handler) logger.addHandler(console_handler) # 로그 메시지 logger.info("이것은 정보 메시지입니다.") logger.warning("이것은 경고 메시지입니다.") logger.error("이것은 오류 메시지입니다.")
비교적 간단한 기능을 구현하기 위해 서로 다른 Handler
를 만들고 하나씩 구성해야 함을 알 수 있습니다.
3. logging과 loguru의 상세 비교
기능 | logging | loguru |
---|---|---|
구성 복잡성 | 높음, 핸들러 설정 필요 | 낮음, logger.add() 만 필요 |
파일 로테이션 및 보존 | 타사 모듈 지원 필요 | rotation 및 retention 에 대한 기본 제공 지원 |
콘솔 및 파일에 동시에 출력 | 여러 핸들러 설정 필요 | sys.stdout 을 사용하여 쉽게 구현됨 |
체인 호출 | 지원되지 않음 | 지원됨 |
사용 용이성 | 복잡한 구성 및 통합에 적합 | 빠른 개발 및 명확한 로그 관리에 적합 |
4. 권장되는 애플리케이션 시나리오
- 간단한 애플리케이션 및 빠른 개발:
Loguru
가 더 나은 선택입니다. 간결하고 직관적이며 빠른 프로토타입 제작 및 소규모 프로젝트에 적합합니다. - 복잡한 애플리케이션 및 다중 모듈 프로젝트:
logging
에서 제공하는 고도의 사용자 정의 기능은 다단계 구성이 필요한 복잡한 시스템, 특히 타사 라이브러리에 의존하고 로그 관리를 통합하려는 프로젝트에 더 적합합니다.
5. 요약
loguru
와 logging
모두 장단점이 있습니다. 대부분의 Python 프로젝트에서 loguru
의 간결한 구문과 강력한 기능은 빠른 개발을 위한 첫 번째 선택입니다. 더 큰 프로젝트의 경우 표준 라이브러리 logging
의 호환성과 유연성이 더 적합합니다. 이 글이 귀하의 프로젝트에 적합한 로깅 도구를 선택하는 데 도움이 되기를 바랍니다.
Leapcell: 최고의 웹 호스팅 서버리스 플랫폼
마지막으로 Python 앱을 배포하기 위한 최고의 플랫폼인 Leapcell을 추천하고 싶습니다.
1. 다국어 지원
- JavaScript, Python, Go 또는 Rust로 개발하십시오.
2. 무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오 — 요청 없음, 요금 없음.
3. 최고의 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하십시오.
- 예: 25달러로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
4. 간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전히 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
5. 손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 없습니다 — 구축에만 집중하십시오.
Leapcell Twitter: https://x.com/LeapcellHQ