2013-11-22 14 views
12

Python'daki günlüğe kaydetme amacımız için RotatingHandler kullanmayı deniyorum. Yedekleme dosyalarını 500 olarak tuttum, bu da tahmin ettiğim maksimum 500 dosya oluşturacağımı ve ayarladığım boyutun 2000 Byte olduğunu (önerilen boyut sınırının ne olduğundan emin olmadığına).Logging.conf dosyasını kullanarak her şeyi RotatingFileHandler kullanarak bir dosyaya nasıl kaydedebilirim?

Aşağıdaki kodumu çalıştırırsam, her şeyi bir dosyaya kaydetmez. Ben bir dosyaya herşeyi giriş yapmak istiyoruz -

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

Bu benim testing.log dosyada ne basılmış olur edilir - O INFO çıktısını gelmez

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 

, dosya içine DEBUG mesajı nasılsa .. Neden çalışmadığı hakkında bir fikrin var mı?

Ayrıca, şu anda, bu python dosyasındaki her şeyi günlüğe kaydetme amacıyla tanımladım. Yukarıdakileri logging conf dosyasında tanımlamak ve fileConfig() işlevini kullanarak okumak istiyorum. logging.conf dosyasında RotatingFileHandler örneğinin nasıl kullanıldığından emin değilim?

GÜNCELLEME: - Aşağıda

olduğunu ben log.conf dosyası ile kullanmak değiştirdiniz benim güncellenen Python kodu - aşağıda

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

Ve is my 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 

Ama ne zaman derlerse, bu benim konsolumdaki hata -

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

Burada ne yapıyorum?

cevap

5

It doesn't print out INFO, DEBUG message into the file somehow.. Any thoughts why it is not working out?

Bir loglevel ayarlamak görünmüyor, bu yüzden varsayılan (uyarı) http://docs.python.org/2/library/logging.html den

kullanılır:

İkinci sorunuzla ilgili olarak

Note that the root logger is created with level WARNING.

, böyle bir şey yapması gerektiğini hile (test etmedim, sadece TimedRotatingFileHandler kullanan yapılandırmamdan uyarlanmıştır):

[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 
+0

Teşekkürler. Peki, her şeyi bir dosyaya kaydetmeye ayarlıyım? –

+0

Bir projede kullandığım bir çalışma yapılandırmasından birkaç alıştırma ekledim, bu başlamanızı sağlamalı. Daha fazla logger ile tam bir örnek https://github.com/gryphius/fuglu/blob/master/fuglu/conf/logging.conf.dist – Gryphius

+0

Yardım için teşekkürler Gryphius .. Son bir şüphe, sonra nasıl olduğumu logger'ı python kodunda mı alacaksın? Düşüncesi olan var mı? Bu ilk defa Python ile çalışıyorum, bu yüzden biraz problem yaşıyorum. –

3

Biliyorum, çok geç, ama aynı hatayı aldım ve araştırırken sorununu çözdüm. Benim sorunu çözmek mümkün duyuyorum ve bunu diğer bazı kullanıcı için yararlı olabileceğini düşündüm: ('log.conf') Bir logger nesnesi oluşturduk

ve my_logger.config.fileConfig erişmeye çalışıyor hangi yanlış, aşağıda belirtildiği gibi logger.config.fileConfig ('log.conf') kullanmalısınız ve günlüğünü içe aktarmanız gerekiyor.yanı yapılandırma:

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

bu değişiklikleri yaptıktan sonra, AttributeError: 'Logger'ın' nesne hiçbir özellik 'yapılandırma' hata gitmiş olmalı sahiptir.