[Python] Précautions quand cela ne fonctionne pas même si TimedRotatingFileHandler est défini dans basicConfig en python2

introduction

C'est l'histoire de l'utilisation de logrotate avec la journalisation en python.

En python2 (cela ne peut pas être aidé), j'ai spécifié hands dans logging.basicConfig et utilisé TimedRotatingFileHandler, mais pour une raison quelconque, il n'a même pas été écrit dans le fichier journal spécifié, et bien sûr, la rotation des journaux n'a pas été effectuée non plus. Mais quand je l'exécute en python3, cela fonctionne.

Je pensais que je n'étais pas sûr, alors je l'ai résolu d'une manière différente, alors je vais l'écrire.

Quelqu'un a dit que cela ne fonctionnait pas avec certaines versions de python2, Le spécifiez-vous en premier lieu? J'apprécierais que vous me donniez quelques informations.

** Je l'ai écrit dans le post-scriptum, mais j'ai obtenu des informations de l'intérieur de l'entreprise et j'ai compris pourquoi cela ne fonctionnait pas! Je vous remercie. .. ** **

Contenu

Conclusion

En conclusion, mordre TimedRotatingFileHandler dans addHandler () a bien fonctionné.

import logging
from logging.handlers import TimedRotatingFileHandler 


logger = logging.getLogger(__name__)
formatter = "%(asctime)s:%(name)s:%(levelname)s:%(message)s"
handler = TimedRotatingFileHandler(
	"/hogehoge/logger.log",
	when="M",
	backupCount=1
)

logger.setLevel(logging.INFO)
handler.setFormatter(logging.Formatter(formatter))
logger.addHandler(handler)

logger.info("===== START HOGEHOGE =====")

Détails

Les sources qui n'ont pas fonctionné sont:

import logging
import logging.handlers

logger = logging.getLogger(__name__)
formatter = '%(asctime)s:%(name)s:%(levelname)s:%(message)s'
logging.basicConfig(
    level=logging.DEBUG,
    format=formatter,
    handlers=[logging.handlers.TimedRotatingFileHandler(
        filename ='/hogehoge/logger.log',
        when="M",
        backupCount=1
    )]
)

logger.setLevel(logging.INFO)
logger.info("=== START HOGEHOGE ===")

La cause était inconnue, mais si la méthode ci-dessus ne fonctionnait pas pour le moment, Je pense nourrir addHandler.

Postscript

En fonction de l'environnement, j'ai pensé à faire TimedRotatingFileHandler avec python2, J'ai défini des gestionnaires dans basicConfig et cela n'a pas fonctionné, La raison n’était apparemment pas simplement étayée. .. ..

Vous pouvez certainement voir qu'il n'y a pas de gestionnaire dans le contenu suivant et qu'il ne peut pas être utilisé avec basicConfig. Il m'a fallu beaucoup de temps pour lire plus de documents. J'ai beaucoup appris.

##Contenu
Les arguments de mot-clé suivants sont pris en charge.

・ FileMaker
Un FileHandler est créé avec le nom spécifié au lieu de StreamHandler.

・ Mode fil
If filename is specified, open the file in this mode. Defaults to 'a'.

・ Format
Utilise la chaîne formatée spécifiée dans le gestionnaire.

・ Datefmt
Heure au format de date et d'heure spécifié.strftime()Utilisez ce qui est accepté par.

· Niveau
Définit le niveau d'enregistrement racine au niveau spécifié.

・ Flux
Use the specified stream to initialize the StreamHandler. Note that this argument is incompatible with filename - if both are present, stream is ignored.

##référence
https://docs.python.org/ja/2.7/library/logging.html

Recommended Posts

[Python] Précautions quand cela ne fonctionne pas même si TimedRotatingFileHandler est défini dans basicConfig en python2
Correctif lorsque la recherche de texte intégral ne fonctionne pas dans l'environnement local GAE / Python
Commande lorsque l'arrêt de l'ACPI ne fonctionne pas dans VirtualBox
Précautions lors de l'utilisation de Pit avec Python
Supprimer un caractère spécifique en Python s'il s'agit du dernier
NameError: le nom global'dot_parser 'n'est pas défini et que faire quand il apparaît en python
Vérifier les points lorsque MIDI ne fonctionne pas dans un programme utilisant SDL_mixer
python> n'inclut pas les lettres mm> si "mm" pas dans le texte: / print "sans mm"
Vérifiez les éléments lorsque le module python importé ne fonctionne pas comme prévu
python Remarque: lorsque easy_install ne peut pas être utilisé
Précautions lors du décapage d'une fonction en python
[VScode] Le format autopep8 ne fonctionne pas [Python]
Virtualenv ne fonctionne pas sur Python 3.5 (Windows)
Python / dictionary> setdefault ()> Ajouter si pas dans le dictionnaire
Même si le langage de développement est changé en python3 dans Cloud9, la version 2 est affichée en python --version
[Python] Précautions lors de l'acquisition de données en grattant et en les mettant dans la liste
Une histoire qui parfois ne marche pas si pip est le dernier
[Pour les débutants] Comportement inattendu si "\" est inclus lors de la définition du chemin en Python
Quand j'essaye matplotlib en Python, il dit 'cairo.Context'
Lorsque la recherche ne fonctionne pas dans la banque de données de GAE
Précautions lors du traitement des structures de contrôle dans Python 2.6
Jinja2 2.9.6 ne fonctionne pas sur la série Lambda Python 3
Lorsque la spécification générique ne fonctionne pas avec pylint
On dit que libmysqlclient.so.18 n'existe pas
Que faire si Python3 Venv ne fonctionne pas bien sur Raspberry Pi
Que faire si la barre de progression n'est pas affichée dans tqdm de python
Que faire si vous ne voyez pas IntelliSense de Python dans VS Code sous Windows
Que faire lorsque Python ne passe pas de la version système dans pyenv
Vérifiez si la chaîne est un nombre en python
Lorsque "Message: session non créée" se produit dans Python + Selenium
Lorsque l'objet sélectionné dans bpy.context.selected_objects n'est pas renvoyé
Entrée clé qui n'attend pas l'entrée clé en Python
Précautions lors du traitement du type ROS MultiArray en Python
Vérifiez s'il s'agit d'Unix dans le langage de script
Vérifiez s'il s'agit d'Unix dans le langage de script
Lorsque "ERREUR: HTTP n'est pas pris en charge." S'affiche dans mpsyt
Le traitement parallèle de Python joblib ne fonctionne pas dans l'environnement uWSGI. Comment traiter en parallèle sur uWSGI?
À propos du problème que nosetests ne passe pas lorsque __init__.py est créé dans le répertoire du projet
Ce qui est plus rapide à utiliser l'instruction if ou le type de dictionnaire lors de la conversion d'une chaîne (a-> b) en Python
[Python débutant] Variables et portée à l'intérieur de la fonction (lorsque le traitement à l'intérieur de la fonction est reflété à l'extérieur de la fonction et quand il n'est pas reflété)