按需清理日志文件?

问题描述:

我想按需清理日志文件。 我有批次运行的应用程序..我想在每批运行的开始清理日志文件。按需清理日志文件?

是否有一个“日志记录”的方法,或者我必须做一个shell命令。 shell命令是否会干扰“logging”模块所保存的文件描述符。

覆盖模式不会工作,我想按需要做。

这不是开箱即用的,因为这是一个相当不寻常的(以免说“奇怪”)用例。日志不应该只是被删除并立即被覆盖 - 他们这样没用。你可能会更好旋转,而不是日志:

h = logging.handlers.RotatingFileHandler(<...>) 
<logger>.addHandler(h) 

<...> 

for <batch> in <batches>: 
    <...> 
    h.doRollover() 

这就是说,你要求可能与FileHandler非公开方法,以在处理程序的初始化,通常打开日志:

h = logging.FileHandler(mode='w', <...>) #or use whatever else creates a FileHandler, e.g. basicConfig() 

<...> 
h.close() #needed because it prevents side effects from the old descriptor 
      #(e.g. garbage from unflushed writes, sharing violation) 
h._open()