Comme le suggère la documentation AWS:
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_logging_handler(event, context):
logger.info('got event{}'.format(event))
logger.error('something went wrong')
Maintenant j'ai fait:
import logging
logging.basicConfig(level = logging.INFO)
logging.info("Hello World!")
Le premier extrait de code est imprimé dans la console Cloud Watch
, mais le second, no.
Je n'ai vu aucune différence, car les deux extraits utilisent le consignateur racine.
Copié directement à partir de la réponse du haut dans la question @ La réponse de StevenBohrer renvoie à (cela a été mon truc, remplaçant la dernière ligne par ma propre configuration):
root = logging.getLogger()
if root.handlers:
for handler in root.handlers:
root.removeHandler(handler)
logging.basicConfig(format='%(asctime)s %(message)s',level=logging.DEBUG)
J'ai eu un problème similaire et je soupçonne que le conteneur lambda appelle logging.basicConfig pour ajouter des gestionnaires AVANT que le code lambda soit importé. Cela semble être une mauvaise forme ...
La solution de contournement était de voir si les gestionnaires de consignateurs racine étaient configurés et, le cas échéant, supprimez-les, ajoutez mon formateur et le niveau de consignation souhaité (à l'aide de basicConfig), puis restaurez les gestionnaires.
Voir cet article Journalisation Python avant d’exécuter logging.basicConfig?
En fait, probablement, ne référençant pas le même enregistreur, . Dans le premier extrait, enregistrez le retour de: logging.Logger.manager.loggerDict
Il retournera une dict
des enregistreurs déjà initialisés.
En outre, dans la documentation logging
, une remarque importante sur logging.basicConfig
:
Effectue la configuration de base du système de journalisation en créant un StreamHandler avec un formateur par défaut et en l'ajoutant au consignateur racine. Les fonctions debug (), info (), warning (), error () et critical () appellent automatiquement basicConfig () si aucun gestionnaire n'est défini pour le consignateur racine.
Cette fonction ne fait rien si le logger racine a déjà des gestionnaires configurés pour elle.
Source: https://docs.python.org/2/library/logging.html#logging.basicConfig
Essentiellement, le correctif AWS Logging Monkey doit être traité de manière très particulière, où:
Comme il est généralement considéré comme une bonne forme de ne pas exécuter de code arbitraire lors de l’importation de module Python, vous devriez généralement pouvoir restructurer votre code de sorte que les tâches lourdes ne se produisent que dans la fonction lambda.