Problème avec loguru.patch() dans une configuration de logger en fonction
loguru.patch() non appliqué
Bonjour à tous!
J'essaie de mettre en place un système de logs, avec envoi auto d'un message pushover en cas d'erreur.
Pour ce faire, j'utilise loguru et pushover.
Lorsque je définis mon logger de façon globale (pas dans une fonction), tout fonctionne:
def error_callback(record: dict) -> None:
""" "
Function to be executed when logger.error is called.
"""
if record['level'].name == 'ERROR':
send_pushover_msg(
message=f"{record['level'].icon} {record['level'].name} - {record.get('message')}"
)
def send_pushover_msg(message: str, title: str = project_name) -> None:
"""
Send message through pushover mobile application.
"""
pushover_config_file = home_dir / '.pushover.ini'
config = configparser.ConfigParser()
config.read(pushover_config_file)
pushover_user = config.get('global', 'PUSHOVER_USER')
pushover_token = config.get('global', 'PUSHOVER_TOKEN')
conn = http.client.HTTPSConnection('api.pushover.net:443')
conn.request(
'POST',
'/1/messages.json',
urllib.parse.urlencode(
{
'token': pushover_token,
'user': pushover_user,
'title': title,
'message': message,
}
),
{'Content-type': 'application/x-www-form-urlencoded'},
)
logger.remove()
logger.add(
sys.stderr,
colorize=True,
format='<green>{time:YYYY-MM-DD HH:mm:ss}</green> <level>{level}</level> {message}',
level='INFO',
)
logger = logger.patch(error_callback)
En revanche, si j'essaie de définir mon logger dans une fonction, je ne parviens plus à appeler la fonction error_callback:
def loguru_base_config() -> loguru._logger.Logger:
logger.remove()
logger.add(
sys.stderr,
colorize=True,
format='<green>{time:YYYY-MM-DD HH:mm:ss}</green> <level>{level}</level> {message}',
level='INFO',
)
return logger
def main():
logger = loguru_base_config()
logger = logger.patch(error_callback)
Le seul moyen pour que la fonction error_callback soit appelée en cas de logger.error, est de passer logger en paramètre dans mes fonctions (dans main()).
Auriez-vous une idée svp pour que le patch soit bien appliqué au logger de façon globale dans le script (j'espère que j'ai réussi à être clair dans mon explication! ^^) ?
Merci d'avance pour votre aide! :)
J'ai finalement pû faire autrement.
Je suis passé par la méthode filter :
def loguru_base_config() -> loguru._logger.Logger:
logger.remove()
logger.add(
sys.stderr,
colorize=True,
format='<green>{time:YYYY-MM-DD HH:mm:ss}</green> <level>{level}</level> {message}',
level='INFO',
)
logger.add(
LOG_DIR / f'{project_name.lower()}.log',
format='{time} {level} {message}',
level='INFO',
rotation='1 day',
retention='30 days',
filter=error_callback
)
De cette façon, la fonction error_callback est bien exécutée à chaque fois.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte