2017-11-12 1 views
1

변수를 1 씩 증가시키고 싶습니다. 또는 어떤 경우에 무엇인가가 기록되는 함수를 실행하는 경우는 log - lognum입니다.파이썬에서 로깅 모듈을 사용하여 로깅 한 후 함수를 실행하십시오.

lognum = 1 
logger = logging.getLogger('module') 
logger.setLevel(logging.DEBUG) 
handler = logging.FileHandler(filename='log', encoding='utf-8', mode='w') 
handler.setFormatter(logging.Formatter(f'----CHUNK {lognum}----\nLEVEL: %(levelname)s\nNAME:%(name)s\nMESSAGE:%(message)s\n----CHUNK {lognum}----\n')) 
logger.addHandler(handler) 

setFormatter 다음에 코드를 추가 할 수 없습니다. 포맷터를 설정하기 만하면됩니다. 로깅을 위해 docs을 읽었습니다. 아무것도 찾을 수 없습니다.

답변

0

당신은 filters 또는 py3 중 하나가 setLogRecordFactory & getLogRecordFactory 당신의 로그에 상황에 맞는 정보를 추가 할 수 있습니다.

import sys 
import logging 

logger = logging.getLogger(__name__) 
COUNT = 1 
FMT = """----CHUNK %(lognum)s---- 
LEVEL: %(levelname)s 
NAME:%(name)s 
MESSAGE:%(message)s 
----CHUNK %(lognum)s----""" 

def main(): 
    logger.info('hello, world') 
    logger.warning('this is a warning log') 
    logger.error('this is bad!') 

def init_logger(): 
    log = logging.getLogger(__name__) 
    log.setLevel(logging.INFO) 
    handler = logging.StreamHandler(stream=sys.stdout) 
    formatter = logging.Formatter(fmt=FMT) 
    handler.setFormatter(formatter) 
    log.addHandler(handler) 

    old_factory = logging.getLogRecordFactory() 

    def record_factory(*args, **kwargs): 
     global COUNT 
     record = old_factory(*args, **kwargs) 
     record.lognum = COUNT 
     COUNT += 1 
     return record 

    logging.setLogRecordFactory(record_factory) 


if __name__ == '__main__': 
    init_logger() 
    main() 

출력 : filters를 사용하여

----CHUNK 1---- 
LEVEL: INFO 
NAME:__main__ 
MESSAGE:hello, world 
----CHUNK 1---- 
----CHUNK 2---- 
LEVEL: WARNING 
NAME:__main__ 
MESSAGE:this is a warning log 
----CHUNK 2---- 
----CHUNK 3---- 
LEVEL: ERROR 
NAME:__main__ 
MESSAGE:this is bad! 
----CHUNK 3---- 

here you can find 유사한 예

여기 신속하고 더러운 예이다.