[英]How to limit log file size in python
我正在使用 Windows 7 和 python 2.7。 我想將我的日志文件大小限制為 5MB。 我的應用程序在啟動時寫入日志文件,然后應用程序終止。 當我的應用程序再次啟動時,它將寫入同一個日志文件。 所以應用程序沒有持續運行。 應用程序啟動、處理和終止。
我的日志記錄代碼是:
import logging
import logging.handlers
logging.basicConfig(filename=logfile.log, level="info", format='%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logging.info("*************************************************")
我嘗試使用RotatingFileHandler但它沒有用
logging.handlers.RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024, backupCount=2, encoding=None, delay=0)
那么,如何在 python 中強制執行文件大小限制?
失去basicConfig()
並使用RotatingFileHandler :
import logging
from logging.handlers import RotatingFileHandler
log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logFile = 'C:\\Temp\\log'
my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024,
backupCount=2, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)
app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)
app_log.addHandler(my_handler)
while True:
app_log.info("data")
當您對文件使用logging.basicConfig時,日志會附加一個文件處理程序來處理對文件的寫入。 之后,您使用logging.handlers.RotatingFileHandler為同一文件創建了另一個文件處理程序
現在,一旦需要旋轉, RotatingFileHandler 會嘗試刪除舊文件,但不能因為有一個打開的文件處理程序
如果您直接查看日志文件處理程序,就可以看到這一點 -
import logging
from logging.handlers import RotatingFileHandler
log_name = 'c:\\log.log'
logging.basicConfig(filename=log_name)
log = logging.getLogger()
handler = RotatingFileHandler(log_name, maxBytes=1024, backupCount=1)
log.addHandler(handler)
[<logging.FileHandler object at 0x02AB9B50>, <logging.handlers.RotatingFileHandler object at 0x02AC1D90>]
要使用 BasicConfig 和 RotatingFileHandler,請在 BasicConfig 中添加 RotatingFileHandler 作為 Handler。
主要.py:
import logging
rfh = logging.handlers.RotatingFileHandler(
filename='foo.log',
mode='a',
maxBytes=5*1024*1024,
backupCount=2,
encoding=None,
delay=0
)
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(name)-25s %(levelname)-8s %(message)s",
datefmt="%y-%m-%d %H:%M:%S",
handlers=[
rfh
]
)
logger = logging.getLogger('main')
logger.debug("test")
其他.py
import logging
class Other():
def __init(self):
self.logger = logging.getLogger('other')
self.logger.info("test2")
“test”將被寫入帶有標簽“main”的 foo.log
“test2”將被寫入帶有標簽“other”的 foo.log
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.