2010-08-16 33 views
6

Đây là tập tin cấu hình của tôi:Tại sao TimedRotatingFileHandler của tôi không hoạt động vào nửa đêm?

[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= 

Trong tôi thiết lập mã của tôi và sử dụng logger như thế này:

import logging 
import logging.config 

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

Những lời nói được ghi lại vào file tôi chỉ định (driver.log), nhưng luân phiên lúc nửa đêm không bao giờ xảy ra.

Quá trình này có đang chạy vào nửa đêm để xảy ra xoay vòng không? Đây là một tiến trình hàng loạt mà tôi chạy mỗi 15 phút và nó không bao giờ thực sự chạy vào lúc nửa đêm.

Trả lời

2

Tôi đoán điều này thực sự chỉ xảy ra khi quá trình đang chạy vào lúc nửa đêm. Trong trường hợp của bạn (cronjob không chạy rất dài), bạn nên đi với một tệp nhật ký đơn giản, trong đó ngày hiện tại được thêm vào logfilename. Bằng cách này, "rollover" tự động diễn ra.

+1

Vâng, tôi đã cố gắng không phát minh lại bánh xe vì tôi cũng cần các tệp này để tái chế sau một thời gian. – cope360

0

Tôi cũng đã gặp phải vấn đề này, vì nhiều lý do tôi không thể sử dụng rotatelog và cron để xoay nhật ký chỉ là thêm một điều bổ sung có thể xảy ra. Tôi đã sử dụng chức năng dưới đây để xoay các tệp, hàng ngày.

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 

Tôi gọi điều này là xoay nhật ký của mình trước khi khởi tạo trình ghi nhật ký.

Các vấn đề liên quan