Próbuję użyć RotatingHandler dla naszego celu rejestrowania w Pythonie. Utrzymywałem pliki kopii zapasowych jako 500, co oznacza, że spowoduje maksymalnie 500 plików, a wielkość, którą ustawiłem, wynosi 2000 bajtów (nie jestem pewien, jaki jest zalecany limit rozmiarów).

Jeśli uruchomię mój poniższy kod, nie rejestruje wszystko w pliku. Chcę zalogować wszystko w pliku -

#!/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)

Jest to, co zostanie wydrukowane w moim pliku {x0}} -

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

Nie drukuje INFO, DEBUG komunikat w pliku w jakiś sposób .. Wszelkie myśli, dlaczego nie działa?

A także teraz zdefiniowałem wszystko w tym pliku Python do celów rejestrowania. Chcę zdefiniować powyższe rzeczy w pliku logging conf i przeczytaj go za pomocą funkcji fileConfig(). Nie jestem pewien, jak użyć przykładu RotatingFileHandler w pliku logging.conf?

Aktualizacja: -

Poniżej znajduje się mój zaktualizowany kod Pythona, który zmodyfikowałem, aby użyć z plikiem log.conf -

#!/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)

I poniżej jest mój 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

Ale kiedy to skompiluję, jest to błąd, który dostałem na moją konsolę -

$ 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'

Każdy pomysł, co tu robię?

15
user2467545 23 listopad 2013, 01:06

2 odpowiedzi

Najlepsza odpowiedź

Nie drukuje informacji, przekazanie debugowania wiadomości w pliku .. Wszelkie myśli, dlaczego nie działa?

Wydaje się, że używasz logowania, więc używane jest domyślne (ostrzeżenie)

Z http://docs.PYTHON.org/2/library/logging.htmll:

Należy pamiętać, że rejestrator korzenia jest tworzony z ostrzeżeniem poziomu.

Jeśli chodzi o twoje drugie pytanie, coś takiego powinno zrobić sztuczkę (nie przetestowałem go, właśnie przystosowany z mojej konfiguracji, która korzysta z 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
7
Gryphius 11 sierpień 2014, 13:30

Wiem, jest bardzo późno, ale właśnie dostałem ten sam błąd, a jednocześnie przeszły, że masz swój problem. Jestem w stanie rozwiązać mój problem i myślałem, że może to być pomocne dla innego użytkownika:

Stworzyłeś obiekt rejestratora i próbował uzyskać dostęp do my_logger.config.fileconfig ("log.conf") , który jest nie tak, powinieneś użyć logger.config.fileconfig ("log.conf") , jak wspominam poniżej i musisz zaimportować logowania. Config , jak również:

#!/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')

Po tych zmianach AtivicuteError: "Logger" Obiekt nie ma atrybutu "config" Błąd musi zniknąć.

3
Sanjay 5 marzec 2014, 10:24