Matt Wilson mostra como evoluir um sistema de logs e a versão final esta a seguir:
import logging, logging.handlers
# Make a global logging object.
x = logging.getLogger("logfun")
x.setLevel(logging.DEBUG)
# This handler writes everything to a file.
h1 = logging.FileHandler("/var/log/myapp.log")
f = logging.Formatter("%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)s")
h1.setFormatter(f)
h1.setLevel(logging.DEBUG)
x.addHandler(h1)
# This handler emails me anything that is an error or worse.
h2 = logging.handlers.SMTPHandler('localhost', 'logger@tplus1.com', ['matt@tplus1.com'], 'ERROR log')
h2.setLevel(logging.ERROR)
h2.setFormatter(f)
x.addHandler(h2)
def g():
1/0
def f():
logfun = logging.getLogger("logfun")
logfun.debug("Inside f!")
try:
g()
except Exception, ex:
logfun.exception("Something awful happened!")
logfun.debug("Finishing f!")
if __name__ == "__main__":
f()
fonte: http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/
SEJA BEM VINDO!!!!
Tecnologia da Informação.
Informações, artigos, dicas, desenvolvimento, sistema operacional e hardware.
Além de outros interesses que tenho no meu cotidiano.
Mostrando postagens com marcador logging. Mostrar todas as postagens
Mostrando postagens com marcador logging. Mostrar todas as postagens
quinta-feira, agosto 19, 2010
sexta-feira, agosto 06, 2010
Python Logging - Como implementar um sistema de log na sua aplicação
Tenho a necessidade de colocar um script para funcionar em um servidor público que não tenho acesso senão via browser/aplicação cedida pelo hospedeiro.
A forma que encontrei foi o de logar todas as ocorrências. Como Python tem o módulo logging resolvi procurar e encontrei um exemplo funcional. Em tempo, ele não fazia rotação de log, o que é importante para o arquivo não crescer demasiadamente segue a devida alteração.
Desculpe pela falta de syntaxhighlighting pq troquei o "desenho" do blog e o recurso acabou se perdendo.
import logging
import logging.handlers
def configure_logger(log_file):
"""Accepts a fully-qualified filename to the log file.
Returns a fully-configured logger object.
"""
logger = logging.getLogger('ProgramName')
log_formatter = logging.Formatter('%(created)-13s %(asctime)s Pid:%(process)s %(levelname)s %(message)s Thread:%(thread)s Thread Name:%(threadName)s Name:%(name)s File:%(filename)s Module: %(module)s Function Name:%(funcName)s')
file_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=1024, backupCount=5)
#file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(log_formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
return logger
if __name__ == "__main__":
LOG = configure_logger('logfile.txt')
LOG.debug('This is debug level')
LOG.info('This is info level')
LOG.warning('This is warning level')
LOG.error('This is error level')
LOG.critical('This is critical level')
fontes:
http://schof.org/2010/basic_python_logging/
http://schof.org/basic_python_logging.py
A forma que encontrei foi o de logar todas as ocorrências. Como Python tem o módulo logging resolvi procurar e encontrei um exemplo funcional. Em tempo, ele não fazia rotação de log, o que é importante para o arquivo não crescer demasiadamente segue a devida alteração.
Desculpe pela falta de syntaxhighlighting pq troquei o "desenho" do blog e o recurso acabou se perdendo.
#!/usr/bin/python
import logging
import logging.handlers
def configure_logger(log_file):
"""Accepts a fully-qualified filename to the log file.
Returns a fully-configured logger object.
"""
logger = logging.getLogger('ProgramName')
log_formatter = logging.Formatter('%(created)-13s %(asctime)s Pid:%(process)s %(levelname)s %(message)s Thread:%(thread)s Thread Name:%(threadName)s Name:%(name)s File:%(filename)s Module: %(module)s Function Name:%(funcName)s')
file_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=1024, backupCount=5)
#file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(log_formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
return logger
if __name__ == "__main__":
LOG = configure_logger('logfile.txt')
LOG.debug('This is debug level')
LOG.info('This is info level')
LOG.warning('This is warning level')
LOG.error('This is error level')
LOG.critical('This is critical level')
fontes:
http://schof.org/2010/basic_python_logging/
http://schof.org/basic_python_logging.py
Assinar:
Postagens (Atom)