Question Comment tout enregistrer dans un fichier en utilisant RotatingFileHandler en utilisant le fichier logging.conf?


J'essaie d'utiliser RotatingHandler pour notre objectif de journalisation en Python. J'ai gardé des fichiers de sauvegarde au format 500, ce qui signifie qu’il créera un maximum de 500 fichiers, et que la taille que j’ai définie est de 2000 octets (je ne suis pas certain de la taille recommandée).

Si je lance mon code ci-dessous, il ne se connecte pas dans un fichier. Je veux tout enregistrer dans un fichier -

#!/usr/bin/python

import logging
import logging.handlers

LOG_FILENAME = 'testing.log'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('agentlogger')

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=100)

# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

my_logger.addHandler(handler)

my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')

# Log some messages
for i in range(10):
    my_logger.error('i = %d' % i)

C'est ce qui est imprimé dans mon testing.log fichier -

2013-11-22 12:59:34,782 - agentlogger - WARNING - warn message
2013-11-22 12:59:34,782 - agentlogger - ERROR - error message
2013-11-22 12:59:34,782 - agentlogger - CRITICAL - critical message
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 0
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 1
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 2
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 3
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 4
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 5
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 6
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 7
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 8
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 9

Il n'imprime pas INFO, DEBUG message dans le fichier en quelque sorte .. Des pensées pourquoi il ne fonctionne pas?

Et aussi, tout de suite, j'ai tout défini dans ce fichier python à des fins de journalisation. Je veux définir les choses ci-dessus dans le logging conf fichier et le lire en utilisant le fileConfig() fonction. Je ne sais pas comment utiliser le RotatingFileHandler exemple dans le logging.conf fichier?

METTRE À JOUR:-

Voici mon code Python mis à jour que j'ai modifié pour utiliser avec log.conf fichier -

#!/usr/bin/python

import logging
import logging.handlers

my_logger = logging.getLogger(' ')
my_logger.config.fileConfig('log.conf')

my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')

# Log some messages
for i in range(10):
    my_logger.error('i = %d' % i)

Et ci-dessous est mon log.conf file -

[loggers]
keys=root

[handlers]
keys=logfile

[formatters]
keys=logfileformatter

[logger_root]
level=DEBUG
handlers=logfile

[logger_zkagentlogger]
level=DEBUG
handlers=logfile
qualname=zkagentlogger
propagate=0

[formatter_logfileformatter]
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s

[handler_logfile]
class=handlers.RotatingFileHandler
level=NOTSET
args=('testing.log',2000,100)
formatter=logfileformatter

Mais chaque fois que je le compile, c'est l'erreur que j'ai eu sur ma console -

$ python logtest3.py
Traceback (most recent call last):
  File "logtest3.py", line 6, in <module>
    my_logger.config.fileConfig('log.conf')
AttributeError: 'Logger' object has no attribute 'config'

Une idée de ce que je fais mal ici?


14
2017-11-22 21:06


origine


Réponses:


Il n'imprime pas le message INFO, DEBUG dans le fichier d'une manière ou d'une autre.   pensées pourquoi il ne fonctionne pas?

vous ne semblez pas définir un niveau de log, donc la valeur par défaut (warning) est utilisée

de http://docs.python.org/2/library/logging.html :

Notez que le logger racine est créé avec le niveau WARNING.

en ce qui concerne votre deuxième question, quelque chose comme ça devrait faire l'affaire (je ne l'ai pas testé, juste adapté de ma configuration qui utilise TimedRotatingFileHandler):

[loggers]
keys=root

[handlers]
keys=logfile

[formatters]
keys=logfileformatter

[logger_root]
level=DEBUG
handlers=logfile

[formatter_logfileformatter]
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s

[handler_logfile]
class=handlers.RotatingFileHandler
level=NOTSET
args=('testing.log','a',2000,100)
formatter=logfileformatter

5
2017-11-22 21:12



Je sais, il est très tard, mais je viens de recevoir la même erreur, et en cherchant c'est que j'ai votre problème. Je suis capable de résoudre mon problème, et j'ai pensé que cela pourrait être utile pour un autre utilisateur aussi:

vous avez créé un objet de journalisation et essayé d'accéder my_logger.config.fileConfig ('log.conf') ce qui est faux, vous devriez utiliser logger.config.fileConfig ('log.conf') comme je le mentionne ci-dessous et besoin d'importer logging.config ainsi que :

#!/usr/bin/python

import logging
import logging.handlers
import logging.config

logging.config.fileConfig('log.config',disable_existing_loggers=0)
my_logger = logging.getLogger('you logger name as you mention in your conf file')

my_logger.debug('debug message')
my_logger.info('info message')
my_logger.warn('warn message')
my_logger.error('error message')
my_logger.critical('critical message')

après avoir fait ces changements, AttributeError: L'objet 'Logger' n'a pas d'attribut 'config' erreur doit être parti.


3
2018-03-05 06:48