2010-08-16 12 views
6

यह मेरी कॉन्फ़िगरेशन फ़ाइल है:मेरा TimedRotatingFileHandler मध्यरात्रि में क्यों घूमता नहीं है?

[loggers] 
keys=root 

[handlers] 
keys=TimedRotatingFileHandler 

[formatters] 
keys=simpleFormatter 

[logger_root] 
level=DEBUG 
handlers=TimedRotatingFileHandler 

[handler_TimedRotatingFileHandler] 
class=handlers.TimedRotatingFileHandler 
level=DEBUG 
formatter=simpleFormatter 
args=('driver.log', 'midnight', 1, 30) 

[formatter_simpleFormatter] 
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 
datefmt= 

मेरे कोड में मैं सेटअप करता हूं और इस तरह लॉगर का उपयोग करता हूं:

import logging 
import logging.config 

logging.config.fileConfig('logging.conf') 
logging.info('Some message...') 

संदेश निर्दिष्ट फ़ाइल (driver.log) पर लॉग इन हैं, लेकिन घूर्णन मध्यरात्रि में कभी नहीं होता।

रोटेशन होने के लिए मध्यरात्रि में प्रक्रिया चलनी चाहिए? यह एक बैच प्रक्रिया है जिसे मैं हर 15 मिनट में चलाता हूं और यह वास्तव में मध्यरात्रि में कभी नहीं चल रहा है।

उत्तर

16

उत्तर यह है कि प्रक्रिया ठीक से काम करने के लिए हर समय चलनी चाहिए।

http://bytes.com/topic/python/answers/595931-timedrotatingfilehandler-isnt-rotating-midnight से:

घूर्णन होना चाहिए जब प्रवेश प्रक्रिया आधी रात से पहले हैंडलर बनाता है और एक प्रवेश कॉल आधी रात के बाद कि हैंडलर के लिए किस्मत में बनाता है।

+2

+1 इस तरह की तरह लगता है। –

2

मुझे लगता है कि यह वास्तव में तब होता है जब प्रक्रिया मध्यरात्रि में चल रही है। आपके मामले में (cronjob बहुत लंबा नहीं चल रहा है), आपको एक साधारण लॉग फ़ाइल के साथ जाना चाहिए, जहां वर्तमान दिनांक logfilename में जोड़ा गया है। इस तरह, एक "रोलओवर" स्वचालित रूप से होता है।

+1

हाँ, मैं पहिया को फिर से शुरू करने की कोशिश नहीं कर रहा था क्योंकि मुझे कुछ समय बाद इन फ़ाइलों को रीसायकल करने की भी आवश्यकता है। – cope360

0

मैंने इस समस्या में भी भाग लिया है, विभिन्न कारणों से मैं rotatelog का उपयोग नहीं कर सका और लॉग घुमाने के लिए एक क्रॉन बस एक अतिरिक्त चीज जोड़ रहा है जो गलत हो सकता है। मैंने दैनिक आधार पर फ़ाइलों को घुमाने के लिए नीचे दिए गए फ़ंक्शन का उपयोग किया।

import os 
import datetime 
import glob 

def sort_number_ext(s): 
    try: 
     return int(os.path.splitext(s)[1][1:]) 
    except: 
     return s 

def rotate_file(file, keep=30): 
    """ Rotate a file if needed. If the file wasn't modified today then we 
    rotate it around and remove old files """ 

    modified_date = datetime.datetime.fromtimestamp(os.path.getmtime(file)) 

    if modified_date.date() == datetime.datetime.today().date(): 
     return False 

    old_files = glob.glob(file + ".*") 
    old_files.sort(key=sort_number_ext, reverse=True) 

    for f in old_files: 
     try: 
      number = int(os.path.splitext(f)[1][1:]) 
     except ValueError: 
      continue 

     if number >= keep: 
      # If at or above keep limit, remove. 
      os.unlink(f) 
     else: 
      # Increment. 
      new = "%s.%s" % (os.path.splitext(f)[0], number + 1) 
      os.rename(f, new) 

    # Finally rename our log. 
    os.rename(file, "%s.1" % file) 
    return True 

मैं इसे लॉगर शुरू करने से पहले अपने लॉग घुमाने के लिए कहता हूं।

संबंधित मुद्दे