<jupyter_start><jupyter_text>LoggingLogging é o processo de registrar eventos que ocorrem ao longo da execução do código. Permiti obter conhecimento sobre o funcionamento de seu código, localizar bugs eotimizar seu script.<jupyter_code>import logging<jupyter_output><empty_output><jupyter_text>Para usar, primeiramente instanciamos um objeto responsável por manipular estes registros através do método logging.getLogger.<jupyter_code>logging.
log = logging.getLogger("meu-logger")
log.info("Hello, world")<jupyter_output><empty_output><jupyter_text>Níveis de loggingVários tipos de eventos podem surgir e podemos especificar com quais queremos interagir.Se você definir o nível de log para INFO, ele incluirá asmensagens INFO, WARNING, ERROR e CRITICAL. ```*   CRITICAL..50*   ERROR.....40*   WARNING...30*   INFO......20*   DEBUG.....10*   NOTSET.....0```<jupyter_code>log.critical("Registra um log do nível critical")
log.error("Registra um log do nível error")
log.warning("Registra um log do nível warning")
log.info("Registra um log do nível info")
log.debug("Registra um log do nível debug")<jupyter_output>Registra um log do nível critical
Registra um log do nível error
Registra um log do nível warning<jupyter_text>Config básicaUsamos o método basicConfig() para configurar o logging.Parâmetros comuns:*   level*   filename: especifica o nome do arquivo.*   filemode: se o nome do arquivo for fornecido, o arquivo é aberto neste modo. O padrão é **a** , o que significa anexar.*   format: este é o formato da mensagem de registro.<jupyter_code>import logging


logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
import logging


logging.basicConfig(filename='/content/drive/MyDrive/app.log', filemode='w', format='%(name)s - %(level)')
logging.warning('This will get logged to a file')<jupyter_output>WARNING:root:This will get logged to a file<jupyter_text>No link, podemos ver mais informações sobre o métodohttps://docs.python.org/3/library/logging.htmllogging.basicConfigSó podemos chamar o basicConfig(), basicamente, esta função só pode ser chamada uma vez. Caso contrário, precisamos resetar ela para ajustar os parâmetros.<jupyter_code>def reset_log():
  for handler in logging.root.handlers[:]:
    logging.root.removeHandler(handler)
reset_log()<jupyter_output><empty_output><jupyter_text>Formatação do Output<jupyter_code>import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
reset_log()


logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO)
logging.info('Admin logged in')<jupyter_output>2021-11-12 00:43:34,343 - Admin logged in<jupyter_text>Registro e Captura de Eventos<jupyter_code>reset_log()


name = 'John'
logging.error('%s raised an error', name)
reset_log()


a = 5
b = 0

try:
  c = a / b
  
except Exception as e:
  logging.error("Exception occurred", exc_info=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10685210312075984, 'fraction_numerical': 0.01051560379918589, 'mean_word_length': 5.9063231850117095, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 26, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '373715', 'license': 'MIT', 'n_tokens_mistral': 1035, 'n_tokens_neox': 992, 'n_words': 285, 'path': 'log-prog-python/Exercicios_Logging.ipynb', 'repo_name': 'vallinoto/ensino', 'size': '2948'}