Python 모듈의 Logging(4) - 일반적인handlers 사용

16419 단어 LOG로그 모듈
 、StreamHandler
 handler—— logging handler 。

 sys.stdout, sys.stderr  ( , write() flush() )。

 :

class logging.StreamHandler(stream=None)
 stream , stream sys.stderr。
 、FileHandler
logging handler 。 StreamHandler。 。

 :

class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
 append,delay true , emit 。 , 。
 、NullHandler
 handler,logging handler 。 
 。

4.WatchedFileHandler는logging에 있습니다.handlers 모듈에서파일의 상태를 감시하는 데 사용됩니다. 파일이 바뀌면 현재 흐름을 닫고 파일을 다시 열고 새 흐름을 만듭니다.newsyslog나logrotate의 사용으로 파일이 바뀔 수 있습니다.이handler는 linux/unix 시스템을 위한 것입니다. 윈도우즈 시스템에서 열려 있는 파일은 바뀌지 않기 때문입니다.매개변수는 FileHandler와 같습니다.
class logging.handlers.WatchedFileHandler(filename, mode='a', encoding=None, delay=False) 5, RotatingFileHandler
logging에 있습니다.handlers는 순환 로그 파일을 지원합니다.
class logging.handlers.RotatingFileHandler(filename,mode='a', maxBytes=0,backupCount=0,encoding=None,delay=0) 매개 변수 maxBytes와 backupCount는 로그 파일이 maxBytes에 도달할 때 rollover를 허용합니다.파일 크기가 maxBytes에 도달하거나 초과할 때 로그 파일을 새로 만듭니다.상술한 이 두 매개 변수 중 하나가 0일 때 롤러버는 발생하지 않는다.즉 파일에 maxBytes 제한이 없다는 것이다.백업 카운트는 백업 수량입니다. 최대 몇 개의 백업이 있을 수 있는지입니다.로그의 basename 뒤에.0-.n의 접미사, 예를 들어 example.log.1,example.log.1,…,example.log.10.현재 사용 중인 로그 파일은 basename.log.
6. TimedRotatingFileHandler
logging에 있는 시간 순환 로그handler.handlers, 새 로그 파일을 정시에 생성하는 것을 지원합니다.
class logging.handlers.TimedRotatingFileHandler(filname, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False) 매개 변수 when은 시간 간격의 유형을 결정하고, 매개 변수 interval은 시간 간격을 얼마나 정하는가를 결정한다.예를 들어 when='D', interval=2는 이틀의 시간 간격을 가리키며backupCount는 로그 파일을 몇 개 남길 수 있는지 결정한다.수량을 초과하면 오래된 로그 파일을 버릴 것이다.
when의 매개 변수가 시간 간격의 유형을 결정합니다.둘 사이의 관계는 다음과 같습니다.
 'S'         |   
 
 'M'         |   
 
 'H'         |   
 
 'D'         |   
 
 'W0'-'W6'   |   
 
 'midnight'  |   
utc UTC 。

7. 기타handler--SocketHandler,DatagramHandler,SysLogHandler,NtEventHandler,SMTPHandler,MemoryHandler,HTTPHandler 등handler는 모두 잘 사용하지 않기 때문에 구체적으로 소개하는 것은 공식 문서의 기타handlers를 참고하십시오
다음은 간단한 예를 사용하여handler의 사용을 보여 줍니다.
예 1 - 구성 파일을 사용하지 않는 방법(StreamHandler):
import logging
 
 set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
#define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
 set a format which is simpler for console use
# 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
 tell the handler to use this format
# handler 
console.setFormatter(formatter)
#add the handler to the root logger
# root logger handler
logging.getLogger('').addHandler(console)
 
 Now, we can log to the root logger, or any other logger. First the root...
# root logger
logging.info('Jackdaws love my big sphinx of quartz.')
 
#Now, define a couple of other loggers which might represent areas in your
 application:
 
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
 
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
 :

root        : INFO     Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO     How quickly daft jumping zebras vex.
myapp.area2 : WARNING  Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR    The five boxing wizards jump quickly.

예2 - 프로필을 사용하는 방식 (TimedRotatingFileHandler): log.conf 로그 구성 파일:
[loggers]
keys=root,test.subtest,test
 
[handlers]
keys=consoleHandler,fileHandler
 
[formatters]
keys=simpleFormatter
 
[logger_root]
level=INFO
handlers=consoleHandler,fileHandler
 
[logger_test]
level=INFO
handlers=consoleHandler,fileHandler
qualname=tornado
propagate=0
 
[logger_test.subtest]
level=INFO
handlers=consoleHandler,fileHandler
qualname=rocket.raccoon
propagate=0
 
[handler_consoleHandler] # handler
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
 
[handler_fileHandler] # handler
class=logging.handlers.TimedRotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('rocket_raccoon_log','midnight')
 
[formatter_simpleFormatter]
format=[%(asctime)s-%(name)s(%(levelname)s)%(filename)s:%(lineno)d]%(message)s
datefmt=
 
logging.config.fileConfig('conf/log.conf')
logger = getLogging()

logger 가져오기 방법:
def getLogging():
    return logging.getLogger("test.subtest")

logger 구성 및 호출:
logging.config.fileConfig('conf/log.conf')
logger = getLogging()
logger.info("this is an example!")
[2016-07-01 09:22:06,470-test.subtest(INFO)main.py:55]this is an example!

좋은 웹페이지 즐겨찾기