Python에서 소스 파일 이름 및 줄 번호를 기록하는 방법
파이썬 표준 로깅 시스템을 장식 / 확장 할 수 있으므로 로깅 메서드가 호출 될 때 파일과 호출 된 줄 번호 또는 호출 한 메서드도 기록됩니다.
물론 로깅 문서에서 포맷터 를 확인하세요 . 특히 lineno 및 경로 이름 변수.
% (pathname) s 로깅 호출이 실행 된 소스 파일 의 전체 경로 이름 (사용 가능한 경우).
% (filename) s 경로 이름 의 파일 이름 부분.
% (module) s 모듈 (파일 이름의 이름 부분).
% (funcName) s 로깅 호출을 포함하는 함수 의 이름입니다.
% (lineno) d 로깅 호출이 발행 된 소스 라인 번호 (사용 가능한 경우).
다음과 같이 보입니다.
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
Seb의 매우 유용한 답변 위에 합리적인 형식으로 로거 사용법을 보여주는 편리한 코드 스 니펫이 있습니다.
#!/usr/bin/env python
import logging
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S',
level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug("This is a debug log")
logger.info("This is an info log")
logger.critical("This is critical")
logger.error("An error occurred")
다음 출력을 생성합니다.
2017-06-06:17:07:02,158 DEBUG [log.py:11] This is a debug log
2017-06-06:17:07:02,158 INFO [log.py:12] This is an info log
2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical
2017-06-06:17:07:02,158 ERROR [log.py:14] An error occurred
디버그 로깅을 표준 출력으로 보내는 방식으로 위를 빌드하려면 :
import logging
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"
formatter = logging.Formatter(FORMAT)
ch.setFormatter(formatter)
root.addHandler(ch)
logging.debug("I am sent to standard out.")
위의 내용을라는 파일에 넣으면 debug_logging_example.py
출력이 생성됩니다.
[debug_logging_example.py:14 - <module>() ] I am sent to standard out.
그런 다음 로그 아웃을 끄려면 주석 처리하십시오 root.setLevel(logging.DEBUG)
.
단일 파일 (예 : 클래스 할당)의 경우 print()
문 을 사용하는 것보다이 작업을 수행하는 것이 훨씬 더 나은 방법이라는 것을 알았습니다 . 제출하기 전에 한 곳에서 디버그 출력을 끌 수 있습니다.
참고 URL : https://stackoverflow.com/questions/533048/how-to-log-source-file-name-and-line-number-in-python
'Programing' 카테고리의 다른 글
압축을 풀지 않고 Unix .tar.gz 파일이 유효한 파일인지 확인하는 방법은 무엇입니까? (0) | 2020.08.23 |
---|---|
PHP의 GDlib imagecopyresampled를 사용할 때 PNG 이미지 투명도를 유지할 수 있습니까? (0) | 2020.08.23 |
SELF JOIN이란 무엇이며 언제 사용합니까? (0) | 2020.08.23 |
Ipython 노트북 / Jupyter에서 Pandas는 내가 플롯하려는 그래프를 표시하지 않습니다. (0) | 2020.08.23 |
Python : 튜플의 값 변경 (0) | 2020.08.23 |