2016-04-12 18 views
0

ile kullanırken rollover'ı zorla Python uygulama günlüğü iletilerimi bir dosyaya kaydetmek için ConcurrentLogHandler kullanıyorum. Tornado'nun HTTPServer, sunucu olarak üretimde kullanılır ve belirli bir durumda (kullanıcı formu gönderilir), dosyanın üzerine ruloyu zorlamak isterim. Kullanmakta olduğum sorun, logger.handlers [0] .doRollover() çalıştırırken, roll over gerçekleşmiyor ve ben de bir hata göremiyorum. uygulamalarımaPython ConcurrentLogHandler: Tornado HttpServer

Birçok modülleri günlüğüne yazmak için aşağıdaki modülünden "logger" nesne içe:

import logging 
import logging.handlers 
from cloghandler import ConcurrentRotatingFileHandler 
from my_app import app 

logger = logging.getLogger('my_app') 
hdlr = ConcurrentRotatingFileHandler(app.config['LOG_PATH'], maxBytes=5e+8, backupCount=10) 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO) 

[a logger.handlers ben RotatingFileHandler kullanıyordum, ConcurrentLogHandler kullanma ve gerçekleştirmeden önce 0] .doRollover(), yığının aşağısındaki os.rename üzerinde tetiklenen "Dosya meşgul" hatasıyla sonuçlanır.

Bu kurulumla bir rollover'ı zorlayabilmemin bir yolu var mı, yoksa bunu mümkün kılmak için yapmam gereken değişiklikler var mı? Centos'u bir sunucu olarak kullanıyorum, bu yüzden dosya sistemi UNIX/Linux. Uygulamam çalışırken her zaman günlük dosyasında bir [dosyaadı] .lock dosyası görebiliyorum.

cevap

0

ConcurrentLogHandler gerçekten logger.handlers [0] .doRollover() tarafından devir haddelenebilir, teşekkür ederiz. Ben daha önce RotatingLogHandler kullandım ve logun dizininde bir .lock dosyası bırakılmıştı. Kilit dosyasının kaldırılması ve ConcurrentLogHandler'ın seçim işleyicisi olarak (RotatingLogHandler yerine) tutulması sorunu çözer.

İlgili konular