Logging

Zayt usa Structlog para logging e provê algumas facilidades sobre ele para tornar seu uso próximo de outros frameworks como Spring Boot.

Ele é integrado com o logging da biblioteca padrão, então bibliotecas que a usam são logadas através do Structlog. Ele também habilita filtragem por nome do logger usando a biblioteca padrão.

Porque Structlog?

Atualmente, é muito provável que sua aplicação esteja implantada em uma nuvem e seus logs sejam enviados para um agregador como Graylog. Portanto, um formato de logging estruturado parece ser a escolha mais lógica.

Para mais informação sobre porque utilizar logging estruturado, verifique a documentação do Structlog

Configuração de logging

Logging é configurado no arquivo de configuração do zayt:

settings = {
    "logging": {
        "root": "WARNING", # (1)
        "level": { # (2)
            "application": "INFO",
            "zayt": "DEBUG",
        },
        "format": "json", # (3)
        "setup": "zayt.logging.setup", # (4)
    }
}

Nota

  1. Nível de log to logger root.

  2. Mapeamento de nomes de logger para níveis de log.

  3. Format do log. Possíveis valores são “json”, “logfmt”, “keyvalue” e “console”.

  4. Função setup para configurar o logging.

A configuração format define qual renderer será utilizado. Os possíveis valores mapeiam para:

valor

renderer

json

structlog.processors.JSONRenderer()

logfmt

structlog.processors.LogfmtRenderer()

keyvalue

structlog.processors.KeyValueRenderer()

console

structlog.dev.ConsoleRenderer(color=True)

Se não for definido, format tem o valor padrão de "logfmt" se sys.stderr.isatty() == False, ou "console" caso contrário. Isto é feito para utilizar ConsoleRenderer durante o desenvolvimento e LogfmtRenderer quando implantado em produção.

Configuração manual do logger

Se você precisa de controle total de como o Structlog é configurado, você pode fornecer uma função de configuração do logger. Você precisa apenas referenciá-la no arquivo de configuração:

configuration/settings.py
settings = {
    "logging": {
        "setup": "application.logging.setup",
    }
}
application/logging.py
import structlog
from zayt.configuration import Settings


def setup(settings: Settings):
    structlog.configure(...)

A função de configuração recebe um parâmetro do tipo zayt.configuration.Settings, de forma que você pode acesar todas as configurações.