Django 日志记录旋转文件不起作用

2024-01-04

所以我在 Django 日志记录到达时遇到了一些问题maxBytes尺寸。基本上,当发生这种情况时,文件似乎不会旋转并创建新文件。

有人告诉我这可能与服务器的写入权限有关,但我不确定如何正确设置,以便 django 在旧日志文件已满时能够创建新日志文件。

我的设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'verbose': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '[%(levelname)-7s] %(asctime)s - %(message)s'
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler'
        },
        'boom_file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024*1024*10,  # 10 MB
            'backupCount': 10,
            'filename': '/var/log/boom.log',
            'formatter': 'simple'
        },
        'binglaw_crawler_file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024*1024*10,  # 10 MB
            'backupCount': 10,
            'filename': '/var/log/boom-binglaw-crawler.log',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'boom': {
            'handlers': ['console', 'boom_file'],
            'propagate': True,
            'level': 'DEBUG',
        },
        'boom.binglaw_crawler': {
            'handlers': ['binglaw_crawler_file', ],
            'propagate': False,
            'level': 'DEBUG',
        },
    }
}

我注意到我的另一个日志 celeryd 似乎旋转得很好......这不是很奇怪吗?

-rw-r--rw- 1 root          root          10485721 Aug 18 12:12 boom-binglaw-crawler.log
-rw-r--r-- 1 root          root            403506 Nov  8 23:42 boom-celeryd.log
-rw-r--r-- 1 root          root             20201 Oct  2 12:47 boom-celeryd.log.1
-rw-r--rw- 1 root          root           1049478 Oct  1 18:49 boom-celeryd.log.2

UPDATE:

当我尝试运行创建日志文件的管理命令时,出现此错误

Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/handlers.py", line 77, in emit
    self.doRollover()
  File "/usr/lib/python2.7/logging/handlers.py", line 142, in doRollover
    os.rename(self.baseFilename, dfn)
OSError: [Errno 13] Permission denied

在 Django 日志记录中使用“logging.handlers.RotatingFileHandler”时,出现以下错误:

Traceback (most recent call last):
  File "C:\Python33\lib\logging\handlers.py", line 73, in emit
    self.doRollover()
  File "C:\Python33\lib\logging\handlers.py", line 176, in doRollover
    self.rotate(self.baseFilename, dfn)
  File "C:\Python33\lib\logging\handlers.py", line 116, in rotate
    os.rename(source, dest)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'log.txt.1'

这个错误发生在我身上,因为当我启动 Django 时,它似乎启动了 2 个不同的进程。两个进程都设置日志记录,这意味着两者都获取“settings.py”配置文件中定义的相同 LOGGING 文件的句柄。

在设置 LOGGING 变量之前,我将此行添加到了我的 settings.py 文件中。

print("Initializing LOGGING in settings.py - if you see this more than once use 'runserver --noreload'")

如果您使用“manage.py runserver”启动应用程序- 没有重装' 参数,它可能会解决您的文件争用问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 日志记录旋转文件不起作用 的相关文章

随机推荐

  • 如何在 R-Markdown 中的 R Chunk 中使用 LaTeX 代码?

    我目前正在使用 rmarkdown 编写报告 因此我想在 r 代码块内创建部分 我发现在 cat 和 results asis 的帮助下这是可能的 我对这个解决方案的问题是 我的 R 代码结果和代码没有像往常一样正确显示 例如 title
  • 如何使用 htmlagilitypack 抓取 xml 文件

    我需要从中抓取 xml 文件http feeds feedburner com Torrentfreak http feeds feedburner com Torrentfreak其链接和描述 我使用了这段代码 var webGet ne
  • Ubuntu上使用curlftpfs的权限

    I use sudo curlftpfs o allow other alpha 1234 192 168 1 100 home alpha share 在 Ubuntu 12 04 中将 ftp 文件夹挂载为本地文件夹 然后我可以读取和编
  • 从列表中删除 NULL 元素[重复]

    这个问题在这里已经有答案了 mylist lt list NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 123 NULL 456 gt mylist 1 NULL 2 NULL 3 NU
  • Rails 3 控制器中需要 gem 失败并出现“持续缺失”

    我在其他线程中多次看到这个问题 但似乎没有一个答案适用 环境 轨道3 来自 jugend 的亚马逊 ecs gem 唯一的文件在这里 http github com jugend amazon ecs blob master lib ama
  • 如何测试浏览器是否支持

    如何测试当前浏览器是否支持手机浏览器使用设备摄像头拍照的功能 https addpipe com html media capture demo https addpipe com html media capture demo 在所有桌面
  • OSTYPE 在 shell 脚本中不可用

    目前我正在使用新的 Xubuntu trusty tahr 设置一个新系统 我对 shell 脚本不太熟悉 但我有一个需要 OSTYPE 环境变量来确定要做什么的脚本 如果我打电话echo OSTYPE在 xfce terminal 中我成
  • 读取 HTTP 请求标头,并修改 Apps 脚本 Web 应用程序的响应标头

    我可以修改 HTTP 响应标头以添加 cookie 和额外信息吗 另外 我在读取请求标头时遇到问题 您无法在部署为 Web 应用程序的 Apps 脚本应用程序中读取或设置 HTTP 标头 您只能分别读取查询字符串或 GET POST 的发布
  • 批处理文件 - 如何使用 for 循环批量更改所有特定变量

    以下代码接受批处理文件的所有命令行参数 就我而言 我有大约 30 个命令行参数 它们都是 1 2 或 3 的数字 我接受它们然后想将它们重新分配给其他字符 我想要每个var 如果是1 就改成 如果是2 就改成 如果是3 就改成 第一部分效果
  • PHP get_browser:如何识别 ie7 和 ie6?

    有没有办法使用 PHP 的 get browser 函数来区分 IE7 和 IE6 您可以这样做 browser get browser if browser gt browser IE browser gt majorver 6 echo
  • Android Studio 将目录标记为测试源根

    我在 build gradle 中做了一些操作来删除 androidTest java 包的绿色突出显示 我不知道如何把它找回来 IntelliJ 在上下文菜单中有一个 将目录标记为测试源根目录 选项 但我在 Android Studio
  • 使用 Python 3 将 Pig Latin 翻译成英语

    正如您将在下面的代码中看到的 我已经制作了一个将英语翻译成 Pig Latin 的程序 它遵循两个规则 如果单词以元音开头 则应附加 way 例如 apple 变为 appleway 如果单词以辅音序列开头 则该序列应移至末尾 以 a 为前
  • 重复上下动画 div

    我想要一个使用 jquery 重复上下移动的 div 换句话说 div 从某个位置的顶部开始 向下移动 然后向上移动并重复此过程 从上到下大约有 1 秒的时间间隔 再回到顶部大约有 1 秒的时间间隔 有slideUp和slideDown以及
  • 发送以 HTML 文件作为正文的电子邮件 (C#)

    如何使用 HTML 文件设置 MailMessage 的正文 只需设置邮件消息正文格式 http msdn microsoft com en us library system web mail mailmessage bodyformat
  • Scala 的“With”语句等效吗?

    也许是 Scala 学习者的闲思 但是 在我的修改中 我写了以下内容 n child size gt 0 n child filter isInstanceOf Text size 0 n 是 scala xml Node 但这并不重要 特
  • 对二维点数组进行排序以找出四个角

    您好 我有任何大小的二维点的集合 通过查找原点之间距离的最小值和最大值 我能够找出左上角和右下角点 但我无法找出顶部 右点和左下点 也许你可以使用cv approxPoly 找到二维点集的角点 然后您可以通过以下方式按您想要的任何顺序对点进
  • hibernate用于动态表创建

    我是一个 HIBERNATE 初学者 因为我需要创建其中包含动态字段的动态表 所以我选择使用 hibernate 据我了解 创建表需要一个类 其中包含类中定义的字段 如何根据具有所需字段的表动态生成类 我不确定我是否理解这个问题 标题是关于
  • Android使用EGL初始化openGL2.0上下文

    我想在Android上用本机代码进行离屏图像处理 所以我需要通过EGL在本机代码中创建openGL上下文 通过EGL 我们可以创建EGLSurface 我可以看到那里有三个选择 EGL WINDOW BIT EGL PIXMAP BIT E
  • 如何在 Visual Studio 2005/2008 中编译 Flex?

    我无法弄清楚这一点 我可以从 gnuwin32 下载 flex 2 5 4a 的 win32 二进制文件 但我想使用 Visual Studio 2005 构建最新版本 2 5 35 我想我可以在 cygwin 中构建 但其中的乐趣在哪里
  • Django 日志记录旋转文件不起作用

    所以我在 Django 日志记录到达时遇到了一些问题maxBytes尺寸 基本上 当发生这种情况时 文件似乎不会旋转并创建新文件 有人告诉我这可能与服务器的写入权限有关 但我不确定如何正确设置 以便 django 在旧日志文件已满时能够创建