django - Windows 中的旋转文件处理程序 "Text File Busy"

标签 django windows logging vagrant

我在 Windows 机器上的 vagrant(运行 ubuntu)中运行一个 django webapp。该应用程序设置了 RotatingFileHandler,这在很大程度上可以正确记录。但最终日志文件会填满,此时无法滚动

Logged from file util.py, line 79
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/handlers.py", line 78, in emit
    self.doRollover()
  File "/usr/lib/python2.7/logging/handlers.py", line 141, in doRollover
    os.rename(self.baseFilename, dfn)
OSError: [Errno 26] Text file busy

(多次)

这是 RotatingFileHandler 的配置片段:

'default': {
    'level':'DEBUG',
    'class':'logging.handlers.RotatingFileHandler',
    'filename': 'logs/application.log',
    'maxBytes': 1024 * 1024 * 5, # 5 MB
    'backupCount': 5,
    'formatter':'standard',
},

问题似乎是它正在登录共享的 vagrant 目录,因此它遇到了 Windows 文件锁定问题。如果我将其更改为在共享目录之外的目录中登录,它会正常运行。

我的问题是,有什么办法可以防止上述错误,而不必将日志移出 vagrant 目录吗?

我想将它保留在那里,以便它更容易移植到其他服务器,这样我就可以在 Windows 中查看日志。

最佳答案

如果看到错误时您正在运行 Django 开发服务器,请尝试

python manage.py runserver --noreload

这是因为默认情况下,Django 服务器的两个进程都在运行。一个是实际的服务器,而另一个是检测代码的变化并重新加载服务器。因此,settings.py被导入了两次,导致两个进程同时访问日志文件。

更多详情 here .

关于django - Windows 中的旋转文件处理程序 "Text File Busy",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852555/

相关文章:

python - Django 应用程序中是否需要迁移?

Django:AttributeError:类型对象 'MyAppConfig'没有属性 'rpartition'

python - Django celery 具有特定并发的多个工作人员

windows - 大多数(如果不是全部)音频端点是 PCM 吗?

logging - IIS 托管的 ASP.NET Core 应用程序中的控制台日志在哪里

logging - 玩2.2生产模式登录Heroku

python - Django:检查字符串中的最后一个字符

c# - 如何获得已安装软件产品的列表?

windows - 如何在批处理文件的同一行上设置多个因变量?

java - JRuby on Rails 应用程序中的 log4j - 将日志重定向到单独的文件