복붙노트

[PYTHON] 파이썬 로거로 하여금 로그 파일 외에도 모든 메시지를 표준 출력으로 출력하도록합니다.

PYTHON

파이썬 로거로 하여금 로그 파일 외에도 모든 메시지를 표준 출력으로 출력하도록합니다.

로깅 모듈을 사용하는 파이썬 로깅이 로그 파일 외에도 표준 출력에 자동으로 출력되도록하는 방법이 있습니까? 예를 들어, logger.warning, logger.critical, logger.error에 대한 모든 호출을 의도 한 위치로 이동하지만 항상 stdout에 복사해야합니다. 이것은 다음과 같이 메시지 복제를 피하기위한 것입니다.

mylogger.critical("something failed")
print "something failed"

해결법

  1. ==============================

    1.모든 로그 출력은 핸들러에 의해 처리됩니다. 그냥 log.StreamHandler ()를 루트 로거에 추가하십시오.

    모든 로그 출력은 핸들러에 의해 처리됩니다. 그냥 log.StreamHandler ()를 루트 로거에 추가하십시오.

    다음은 스트림 처리기를 구성하는 예입니다 (기본 stderr 대신 stdout 사용). 그리고이를 루트 로거에 추가하십시오.

    import logging
    import sys
    
    root = logging.getLogger()
    root.setLevel(logging.DEBUG)
    
    ch = logging.StreamHandler(sys.stdout)
    ch.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    ch.setFormatter(formatter)
    root.addHandler(ch)
    
  2. ==============================

    2.가장 간단한 방법 :

    가장 간단한 방법 :

    import logging
    import sys
    logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
    
  3. ==============================

    3.여러 핸들러를 사용하는 것이 가능합니다.

    여러 핸들러를 사용하는 것이 가능합니다.

    import logging
    import auxiliary_module
    
    # create logger with 'spam_application'
    log = logging.getLogger('spam_application')
    log.setLevel(logging.DEBUG)
    
    # create formatter and add it to the handlers
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # create file handler which logs even debug messages
    fh = logging.FileHandler('spam.log')
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(formatter)
    log.addHandler(fh)
    
    # create console handler with a higher log level
    ch = logging.StreamHandler()
    ch.setLevel(logging.ERROR)
    ch.setFormatter(formatter)
    log.addHandler(ch)
    
    log.info('creating an instance of auxiliary_module.Auxiliary')
    a = auxiliary_module.Auxiliary()
    log.info('created an instance of auxiliary_module.Auxiliary')
    
    log.info('calling auxiliary_module.Auxiliary.do_something')
    a.do_something()
    log.info('finished auxiliary_module.Auxiliary.do_something')
    
    log.info('calling auxiliary_module.some_function()')
    auxiliary_module.some_function()
    log.info('done with auxiliary_module.some_function()')
    
    # remember to close the handlers
    for handler in log.handlers:
        handler.close()
        log.removeFilter(handler)
    

    다음을 참조하십시오 : https://docs.python.org/2/howto/logging-cookbook.html

  4. ==============================

    4.파일과 표준 오류에 기록하는 가장 간단한 방법은 다음과 같습니다.

    파일과 표준 오류에 기록하는 가장 간단한 방법은 다음과 같습니다.

      import logging
      logging.basicConfig(filename="logfile.txt")
      stderrLogger=logging.StreamHandler()
      stderrLogger.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
      logging.getLogger().addHandler(stderrLogger)
    
  5. ==============================

    5.file과 stdout에 대한 핸들러를 두 개 만들고 basicConfig에 핸들러 인수로 하나의 로거를 만들 수 있습니다. 두 핸들러에 대해 동일한 log_level 및 format 출력을 갖는 경우 유용 할 수 있습니다.

    file과 stdout에 대한 핸들러를 두 개 만들고 basicConfig에 핸들러 인수로 하나의 로거를 만들 수 있습니다. 두 핸들러에 대해 동일한 log_level 및 format 출력을 갖는 경우 유용 할 수 있습니다.

    import logging
    import sys
    
    file_handler = logging.FileHandler(filename='tmp.log')
    stdout_handler = logging.StreamHandler(sys.stdout)
    handlers = [file_handler, stdout_handler]
    
    logging.basicConfig(
        level=logging.DEBUG, 
        format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',
        handlers=handlers
    )
    
    logger = logging.getLogger('LOGGER_NAME')
    
  6. from https://stackoverflow.com/questions/14058453/making-python-loggers-output-all-messages-to-stdout-in-addition-to-log-file by cc-by-sa and MIT license