返回信息流如下面的代码初始化一个logger,如果文件spam.log被删除,之后的代码在写log,就无法成功。
如何能够自动创建一个spam.log?而不是默默地啥也不记录。。。
import logging
logger = logging.getLogger("simple_example")
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler("spam.log")
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)
# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
这是一条镜像帖。来源:北邮人论坛 / python / #8147同步于 2015/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
使用logging记录日志,日志文件删除后,就不能记录了,如何自动
yearnjia
2015/8/14镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
关键是你删除了文件,但这个程序并不认为文件被删除了。它认为那个文件还活着,事实上确实也还活着,操作系统仍然让这个“被删除了”的文件为这个程序活着。只是一旦这个程序退出了,文件就真的没了。
另外,如果想要它,为什么要删除它呢?
用Python写一个系统,生成了log文件,无法避免这个系统的使用者去删除log文件。自动恢复是系统需要处理的。
有什么高招?
【 在 nuanyangyang 的大作中提到: 】
: 关键是你删除了文件,但这个程序并不认为文件被删除了。它认为那个文件还活着,事实上确实也还活着,操作系统仍然让这个“被删除了”的文件为这个程序活着。只是一旦这个程序退出了,文件就真的没了。
: 另外,如果想要它,为什么要删除它呢?
【 在 yearnjia 的大作中提到: 】
: 用Python写一个系统,生成了log文件,无法避免这个系统的使用者去删除log文件。自动恢复是系统需要处理的。
: 有什么高招?
:
那就是系统使用者的问题了。系统使用者不应该这样使用,如果他想要保持log文件的大小不会太大,那么他应该使用logrotate,而不是简单地删除log文件。
换句话说,你的程序的职责就是不断往一个文件里写;用户的职责是确保自己的空间够,以及自己有日志可以读。
工程上,需要容错啊
【 在 nuanyangyang 的大作中提到: 】
:
: 那就是系统使用者的问题了。系统使用者不应该这样使用,如果他想要保持log文件的大小不会太大,那么他应该使用logrotate,而不是简单地删除log文件。
: 换句话说,你的程序的职责就是不断往一个文件里写;用户的职责是确保自己的空间够,以及自己有日志可以读。
【 在 yearnjia 的大作中提到: 】
: 工程上,需要容错啊
:
但这种“删除以后重新创建”的做法本身不妥。
1. 一个文件会有很多硬链接或者软链接,而“删除”只是删除一个文件在目录里的引用,而不是删除文件本身。
2. 你怎么知道日志是被记录进了文件里?而不是一个tcp socket或者unix socket或者命名管道?
3. “责任分割”本身是很重要的,毕竟管理日志文件是用户的职责。否则等于增加了你的工作量,而且反而会因为你做了上述两项中的某个假设,而使得程序本身有问题。