[英]Why logging.handlers.TimedRotatingFileHandler log file create time is “drifting” causing headache for ETL
[英]how to create a log file by current date with logging.handlers.TimedRotatingFileHandler
我每小時運行一次任務列表,但是我想獲取當前日期命名的日志文件。
def get_mylogger():
# get logger
fmt = '%(asctime)-15s %(levelname)-4s %(message)s'
datefmt = '%Y-%m-%d %H:%M:%S'
mylogger = logging.getLogger()
mylogger.setLevel(logging.INFO)
# log_path = "/opt/spark/logs/pyspark/"
log_path = "H:\upupw\www\spark\logs\pyspark"
if not os.path.exists(log_path):
os.makedirs(log_path)
log_file_name = 'spark.log'
log_name = os.path.join(log_path, log_file_name)
# TimedRotatingFileHandler
timer = TimedRotatingFileHandler(log_name, when='D')
formatter = logging.Formatter(fmt, datefmt=datefmt)
timer.setFormatter(formatter)
mylogger.addHandler(timer)
return mylogger
如果我在'10:00:00'中創建第一個日志文件'spark.log',但是直到明天'10:00:00'才創建新文件。 我要在明天0創建一個新文件!
根據TimedRotatingFileHandler的日志記錄文檔,您可能希望在TimedRotatingFileHandler
函數調用中使用附加參數atTime
,如下所示:
timer = TimedRotatingFileHandler(log_name, when='D', atTime=datetime.time(0, 0, 0))
如文檔中所述:
如果atTime不為None,則它必須是datetime.time實例,該實例指定發生翻轉的一天中的時間,對於將翻轉設置為“在午夜”或“在特定工作日”發生的情況。 請注意,在這些情況下,atTime值可有效地用於計算初始翻轉,隨后的翻轉將通過正常間隔計算來計算。
...您需要提供過渡時間作為datetime.time()
的實例。 這是通過將所需的過渡時間作為參數傳遞給datetime.time類來完成的 。 將小時作為第一個參數,將分鍾作為第二個參數,將秒作為第三個參數。 上面的示例將過渡時間設置為00:00:00。
注意:請務必
import datetime
在代碼的開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.