programing

로깅을 사용하여 pprint 출력 인쇄

telecom 2023. 7. 19. 21:11
반응형

로깅을 사용하여 pprint 출력 인쇄

pprint의 출력을 사용하여 복잡한 데이터 구조를 보여주고 싶은데 stdout이 아닌 logging module을 사용하여 출력하고 싶습니다.

ds = [{'hello': 'there'}]
logging.debug( pprint.pprint(ds) ) # outputs as STDOUT

이 명령을 사용하여 문자열을 가져온 다음 로깅 프레임워크로 보냅니다.

from pprint import pformat
ds = [{'hello': 'there'}]
logging.debug(pformat(ds))

위의 솔루션은 포맷터를 사용하여 로깅할 때 이름과 수준 이름을 추가하고 있기 때문에 적합하지 않습니다.조금 정돈되지 않은 것 같습니다.

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbb',
'cccccccccccccccccccc',
'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

더 우아한 해결책이 있을 수 있지만, 다음과 같습니다.

for line in pprint.pformat(ds).split('\n'):
    logging.debug(line)

조금 더 좋은 것을 만들어냅니다.

__main__    : DEBUG   : ['aaaaaaaaaaaaaaaaaaaa',
__main__    : DEBUG   :  'bbbbbbbbbbbbbbbbbbbb',
__main__    : DEBUG   :  'cccccccccccccccccccc',
__main__    : DEBUG   :  'dddddddddddddddddddd']
__main__    : DEBUG   : Some other logging text

다른 방법은 다음과 같습니다.json.dumps와 함께indentarg. 경우에 따라(로그 형식, 데이터 크기 등에 따라) 더 나은 출력을 제공할 수 있습니다.

logging.error('Malformed input data!')
logging.error(pformat(foo))

ERROR:root:Malformed input data!
ERROR:root:{'a': 1, 'b': 2, 'c': 'womp rat', 'd': 'turd sandwich'}

대.

logging.error('Malformed input data!') 
logging.error(json.dumps(foo, indent=4))

ERROR:root:Malformed input data!
ERROR:root:{
    "a": 1,
    "b": 2,
    "c": "womp rat",
    "d": "turd sandwich"
}

언급URL : https://stackoverflow.com/questions/11093236/use-logging-print-the-output-of-pprint

반응형