자세한 로깅을 활성화하는 더 쉬운 방법
--verbose
명령 줄에서 활성화 하고 펼쳐서 다음이있는 경우 디버그 인쇄 문 테스트를 추가하고 싶습니다 .
logger.info("test")
다음 질문을했지만 답을 얻지 않았다 ...
Argparse Tutorial 의 지혜 와 Python의 Logging HOWTO 를 결합해야합니다 . 여기에 예가 있습니다 ...
> cat verbose.py
#!/usr/bin/env python
import argparse
import logging
parser = argparse.ArgumentParser(
description='A test script for http://stackoverflow.com/q/14097061/78845'
)
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
logging.debug('Only shown in debug mode')
도움말 실행 :
> ./verbose.py -h
usage: verbose.py [-h] [-v]
A test script for http://stackoverflow.com/q/14097061/78845
optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
상세 모드에서 실행 :
> ./verbose.py -v
DEBUG:root:Only shown in debug mode
조용히 실행 :
> ./verbose.py
>
난 둘 다 찾아 --verbose
(사용자) 및 --debug
유용 (개발자). logging
및 사용 방법은 다음 과 argparse
달라집니다.
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument(
'-d', '--debug',
help="Print lots of debugging statements",
action="store_const", dest="loglevel", const=logging.DEBUG,
default=logging.WARNING,
)
parser.add_argument(
'-v', '--verbose',
help="Be verbose",
action="store_const", dest="loglevel", const=logging.INFO,
)
args = parser.parse_args()
logging.basicConfig(level=args.loglevel)
따라서 --debug
가 설정되면 로깅 수준이로 설정됩니다 DEBUG
. 이면 --verbose
로깅이로 설정됩니다 INFO
. 둘 다없는 경우이 부족 --debug
하면 로깅 수준이 기본값 인 WARNING
.
다음은 경계 검사를 수행하고 도움말에 유효한 값을 나열하는보다 간결한 방법입니다.
parser = argparse.ArgumentParser(description='This is a demo.')
parser.add_argument("-l", "--log", dest="logLevel", choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help="Set the logging level")
args = parser.parse_args()
if args.logLevel:
logging.basicConfig(level=getattr(logging, args.logLevel))
용법:
demo.py --log DEBUG
또 다른 변형은 수를 계산하고 수를 실제 수준 -v
의 a에 대한 인덱스로 사용하는 list
것입니다 logging
.
import argparse
import logging
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='count', default=0)
args = parser.parse_args()
levels = [logging.WARNING, logging.INFO, logging.DEBUG]
level = levels[min(len(levels)-1,args.verbose)] # capped to number of levels
logging.basicConfig(level=level,
format="%(asctime)s %(levelname)s %(message)s")
logging.debug("a debug message")
logging.info("a info message")
logging.warning("a warning message")
이 작품 -vvvv
, -vvv
, -vv
, -v
, -v -v
어떠한 경우 등, -v
다음 logging.WARNING
선택보다 경우에 -v
제공되는이 단계 것 INFO
및DEBUG
-v
플래그 뒤에 정수로 레벨을 명시 적으로 지정할 수 있습니다 .
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", const=1, default=0, type=int, nargs="?",
help="increase verbosity: 0 = only warnings, 1 = info, 2 = debug. No number means info. Default is no verbosity.")
args = parser.parse_args()
logger = logging.getLogger()
if args.verbose == 0:
logger.setLevel(logging.WARN)
elif args.verbose == 1:
logger.setLevel(logging.INFO)
elif args.verbose == 2:
logger.setLevel(logging.DEBUG)
여기에 argparse가 -v 옵션을 사용하여 기본 WARNING에서 INFO (-v), DEBUG (-vv)로 두 단계까지 자세한 정보를 표시하도록하는 또 다른 방법이 있습니다. 이것은에 의해 정의 된 상수에 매핑되지 않고 logging
값을 직접 계산하여 입력을 제한합니다.
print( "Verbosity / loglevel:", args.v )
logging.basicConfig( level=10*(3-max(0,min(args.v,3))) )
logging.debug("debug") # 10
logging.info("info") # 20
logging.warning("warning") # 30 - The default level is WARNING, which means that only events of this level and above will be tracked
logging.error("error") # 40
logging.critical("critical") # 50
편집하고 싶지 않거나 편집 할 수없는 스크립트에 대해 logging.DEBUG 레벨을 활성화하려면 시작을 사용자 정의 할 수 있습니다.
jcomeau@aspire:~$ python -c "import site; site._script()"
[snip]...
USER_BASE: '/home/jcomeau/.local' (exists)
USER_SITE: '/home/jcomeau/.local/lib/python2.7/site-packages' (exists)
ENABLE_USER_SITE: True
jcomeau@aspire:~$ mkdir -p ~/.local/lib/python2.7/site-packages
jcomeau@aspire:~$ vi ~/.local/lib/python2.7/site-packages/usercustomize.py
다음을 입력:
import os, logging
if os.getenv('DEBUGGING'):
logging.basicConfig(level = logging.DEBUG)
그러면 다음을 수행 할 수 있습니다.
jcomeau@aspire:~$ mkdir -p /tmp/some/random/
jcomeau@aspire:~$ echo 'import logging; logging.debug("test")' >> /tmp/some/random/script.py
jcomeau@aspire:~$ DEBUGGING=1 python /tmp/some/random/script.py
DEBUG:root:test
http://nedbatchelder.com/blog/201001/running_code_at_python_startup.html의 Paul Ollis에서
2017-07-18 : 이후 다른 방법으로 전환했습니다.
logging.basicConfig(level=logging.DEBUG if __debug__ else logging.INFO)
이것이하는 일은 최적화없이 실행하는 경우 (에서와 같이 python script.py
) DEBUG 수준의 항목을 얻는 반면, 함께 실행 python -OO script.py
하면 그렇지 않은 것입니다. 설정할 환경 변수가 없습니다.
참고 URL : https://stackoverflow.com/questions/14097061/easier-way-to-enable-verbose-logging
'ProgramingTip' 카테고리의 다른 글
C ++의 base64 사용량 스 니펫 (0) | 2020.12.09 |
---|---|
a = (a + b)-(b = a) 두 정수를 바꾸는 데 왜 나쁜 선택입니까? (0) | 2020.12.09 |
Chrome은 이미지 / js / css를 캐시하지 않습니다. (0) | 2020.12.09 |
UISegmentedControl의 글꼴 색상을 변경하는 방법 (0) | 2020.12.09 |
미리 정의 된 일부 값으로 ArrayList 초기화 (0) | 2020.12.09 |