Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何清除日志文件并再次写入?_Python - Fatal编程技术网

Python 如何清除日志文件并再次写入?

Python 如何清除日志文件并再次写入?,python,Python,我通过以下方式创建日志文件: global logger logger = logging.getLogger("plus_dig_cname") logger.setLevel(logging.DEBUG) fh = logging.FileHandler( fdoc_log + "/plus_dig_cname.log" ) formatter = logging.Formatter('%(asctime)s - %(name)s - %(leve

我通过以下方式创建日志文件:

    global logger
    logger = logging.getLogger("plus_dig_cname")
    logger.setLevel(logging.DEBUG)

    fh = logging.FileHandler( fdoc_log + "/plus_dig_cname.log" )

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)
当plus_dig_cname.log的大小大于300MB时,我用一个shell脚本处理它,主要过程是:

 mv $LOG_DIR/$1 $LOG_DIR/$1.bk
 [ $? -ne 0 ] && return 1
 touch $LOG_DIR/$1
 [ $? -ne 0 ] && return 1
 chmod 666 $LOG_DIR/$1
 [ $? -ne 0 ] && return 1
只需mv并触摸一个新的
问题在于记录器无法在日志中写入任何内容 plus_dig_cname.log文件。日志记录无法工作。
可能可以通过以下方式解决:

with open( "plus_dig_cname.log", "w" ):
               pass
这样就可以通过Python获得一个新的日志文件。但是我想通过Bash获取新的日志文件。

那么,为什么在“mv touch chmod”之后日志记录不能工作?

谢谢您

请使用a为您处理此问题

例如:

MAX_SIZE = 300 * 1024 * 1024
LOG_PATH = fdoc_log + "/plus_dig_cname.log"
fh = logging.handlers.RotatingFileHandler(LOG_PATH, maxBytes=MAX_SIZE, backupCount=5)

这将创建5个每个300MB的备份

文件在创建或首次写入时打开。如果你移动文件;它不见了

您可以使用@sberry建议的
logging.handlers.RotatingFileHandler
使用Python旋转文件

如果从外部(例如使用)旋转日志文件,则可以通知脚本该文件已丢失,例如重新启动该文件或在“旋转后”步骤中发送信号


如果使用类似inotify的方法检测更改,脚本可以自动重新打开文件。比较
tail-f
tail-f
的工作原理。

似乎是这两种方法的重复: