>  기사  >  백엔드 개발  >  단일 파일(함수 이름, 파일 이름, 줄 번호)을 사용한 Python 로깅

단일 파일(함수 이름, 파일 이름, 줄 번호)을 사용한 Python 로깅

PHPz
PHPz앞으로
2024-02-08 22:00:211103검색

使用单个文件的 Python 日志记录(函数名、文件名、行号)

질문 내용

앱이 어떻게 작동하는지 이해하려고 노력 중입니다. 이를 위해 함수 이름과 로그 출력에 메시지를 보내는 줄 번호(코드 내)를 기록하는 것을 목표로 디버그 명령을 각 함수 본문의 첫 번째 줄에 삽입합니다. 마지막으로 이 애플리케이션은 많은 파일로 구성되어 있으므로 애플리케이션의 제어 흐름을 더 잘 이해할 수 있도록 로그 파일을 생성하고 싶습니다.

내가 아는 정보는 다음과 같습니다.

  1. 함수 이름을 얻으려면 function_name.__name__ 但我不想使用 function_name (这样我就可以快速复制并粘贴通用的 Log.info("Message") 到正文中所有功能)。我知道这可以使用 __func__ 매크로를 사용하여 C에서 할 수 있지만 Python에 대해서는 잘 모르겠습니다.

  2. 파일 이름과 줄 번호를 얻으려면 내 응용 프로그램이 Python locals() 函数,但使用的语法我并不完全了解,例如: options = " LOG.debug('%(flag)s : %(flag_get)s' % locals()) 我尝试使用 LOG.info("My message %s" % locals()) 来生成类似 的内容{'self': <__main__.Class_name 对象位于 0x22f8cd0>}을 사용하는 것을 보았고 믿습니다. 이것에 대한 의견이 있습니까?

  3. 로깅을 사용하고 여기에 핸들러를 추가하여 파일에 로그하는 방법을 알고 있지만 단일 파일을 사용하여 내 프로젝트에서 올바른 함수 호출 순서로 모든 로그 메시지를 로그할 수 있는지 잘 모르겠습니다.


정답


여기에 관련없는 질문이 있습니다.

가장 간단한 것부터 시작하겠습니다: (3). logging를 사용하면 단일 로그 파일이나 기타 출력 대상에 대한 모든 호출을 집계할 수 있습니다. 프로세스에서 발생한 순서대로 정렬됩니다.

다음 단계: (2). locals() 提供当前范围的字典。因此,在没有其他参数的方法中,作用域中有 self,其中包含对当前实例的引用。所使用的让您感到困惑的技巧是使用字典作为 % 运算符的 rhs 的字符串格式。 "%(foo)s" % bar 将被替换为 bar["foo"]의 가치.

마지막으로 pdb에서 사용하는 것과 유사한 몇 가지 자기 성찰 기술을 사용하여 더 많은 정보를 기록할 수 있습니다.

으아악

이렇게 하면 들어오는 메시지와 함께 (원래) 함수 이름, 해당 메시지가 정의된 파일 이름, 해당 파일의 줄이 기록됩니다. 자세한 내용은 inspect - 실시간 객체 검사 를 참조하세요.

앞서 댓글에서 언급했듯이 언제든지 import pdb 줄을 삽입하여 <code>import pdb; 行,进入 <code>pdb 交互式调试提示符。 pdb.set_trace() 대화형 디버깅 프롬프트로 들어갈 수도 있습니다. pdb.set_trace()를 실행하고 프로그램을 다시 실행하세요. 이를 통해 코드를 단계별로 실행하면서 선택 사항에 따라 데이터를 검사할 수 있습니다.

위 내용은 단일 파일(함수 이름, 파일 이름, 줄 번호)을 사용한 Python 로깅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제