首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当django中出现回溯错误时,我会在stdout中得到2次日志

当Django中出现回溯错误时,会在stdout中得到2次日志的原因是Django默认会将错误信息同时输出到stderr和stdout。这样做的目的是为了确保错误信息能够被及时捕获和记录。

在Django中,当出现回溯错误时,通常会在终端或日志文件中看到类似以下的错误信息:

代码语言:txt
复制
Traceback (most recent call last):
  File "path/to/your/file.py", line X, in your_function
    # Your code here
  File "path/to/another/file.py", line Y, in another_function
    # Your code here
  ...
  File "path/to/django/core/handlers/exception.py", line Z, in inner
    # Your code here
ExceptionType: Error message

这里的回溯错误信息会显示出错误发生的文件路径、行号以及错误类型和具体的错误消息。当出现回溯错误时,Django会将错误信息输出到stderr和stdout,因此会在stdout中得到2次日志。

对于这种情况,可以通过重定向stdout和stderr来解决。可以使用以下命令将错误信息只输出到stderr:

代码语言:txt
复制
python manage.py runserver 2> /dev/null

这样做可以将stdout重定向到/dev/null,从而只在终端中看到错误信息。

另外,如果想要将错误信息记录到日志文件中,可以在Django的配置文件中进行相应的配置。可以使用Django内置的logging模块来实现日志记录。具体配置方式如下:

  1. 打开Django项目的配置文件settings.py。
  2. 在文件中找到LOGGING配置项,如果没有则自行添加。
  3. 配置LOGGING的handlers和loggers,可以选择将错误信息记录到文件中。

以下是一个示例的LOGGING配置:

代码语言:txt
复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': '/path/to/your/log/file.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

在上述配置中,将错误级别设置为ERROR,并将错误信息记录到指定的日志文件中。

总结:当Django中出现回溯错误时,会在stdout中得到2次日志是因为Django默认将错误信息同时输出到stderr和stdout。可以通过重定向stdout和stderr来解决,或者通过配置Django的logging模块将错误信息记录到日志文件中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django+nginx+gunicorn部署配置

log文件位置 location / 是访问到根下的时候,将所有请求转发到127.0.0.1:8000,本文使转发到gunicorn启动的django应用上,中间配置的是需要转发的内容,基本上述内容可以满足大多需求...,如需特殊需求请自行查看nginx官方文档 location /static/ 配置了静态文件所在的路径,静态文件由nginx处理,动态转发到django,如不配置会出现站点引用的所有js css都找不到...= 'gunicorn_project' #进程名 如还需要其他配置,可以自行查看官方文档 直接使用gunicron启动 gunicron需要启动后需要长期运行在后台,如果直接启动会在关闭终端后进程就被杀死...stdout_logfile=/home/webserver/web/logfile.log ; 指定日志文件 ; 默认为 false,如果设置为 true,进程收到 stop 信号时...了,需要配置一个前缀,但此时,django自带的后台管理也会出现问题,建议配置一个/admin,所以,最后的配置nginx文件如下: server { listen 80; server_name

7.4K31

django 1.8 官方文档翻译:13-3 日志

Python 定义以下几种日志级别: DEBUG:用于调试目的的底层系统信息 INFO:普通的系统信息 WARNING:表示出现一个较小的问题。 ERROR:表示出现一个较大的问题。...每个日志记录还可以包含描述正在打印的事件的有用元信息。这些元信息可以包含很多细节,例如回溯栈或错误码。 给一条消息给logger 时,会将消息的日志级别与logger 的日志级别进行比较。...由于SuspiciousOperation 导致400 响应的请求不会在django.request logger 记录日志,而只在django.security logger 记录日志。...如果日志记录包含request 属性,该请求的完整细节都将包含在邮件。 如果日志记录包含栈回溯信息,该栈回溯也将包含在邮件。...': True, } }, 注意,邮件的HTML 包含完整的回溯栈,包括栈每个层级局部变量的名称和值以及你的Django 设置。

80410
  • 2 个 Python 开发问题,折腾了快 7 天

    最近,州的先生在对 MrDoc 专业版(一个基于 Django 开发的在线文档系统)进行最后的上线测试工作。...首先,通过cwd参数指定命令运行的路径,通过stdin、stderr、stdout参数获取命令执行的输出内容,通过communicate()等待命令执行完成。...但是日志里面却报出了一个错误: fatal: could not read Username for 'https://git.mrdoc.pro' 试过使用: git config --global...例如: 虚拟环境: 按理来说,用 sys.executable 代替python是不会的了,结果又报出个错误来: unable to load configuration from manage.py...总结 问题解决了,回想起来,好像解决方法也是很简单。 这关键在于,出现问题后,要及时定位到问题点所在。 如果不知道问题点所在,就只能盲目地找答案,而这,往往是找不到答案的。

    62820

    [每日前端夜话0xBB]

    生产环境存在错误时,开发人员应该看到各种函数成功执行和失败的详细日志。这样就可以尽快发现并修复问题。 要实现这种设置,我们需要更好地了解每个日志级别。...WARN:这些日志是警告并且不阻止应用程序继续运行,这些日志会在出现问题并使用变通方法时发出警报。例如错误的用户输入、重试等。管理员将来应该修复这些警告。...在 Node.Js ,控制台的实现方式与浏览器不同,控制台模块在使用 console.log 时会在 stdout 打印消息,如果使用 console.error 它将打印到 stderr。...但是,这超出了本文的范围,我们会在另一篇文章详细讨论。 6)性能影响 如果程序写日志的频率很高,则可能直接影响程序性能。...当应用程序出现问题时,日志就是救星。如果你当前还没有很好的使用日志,请实施日志记录实践并将日志添加到代码审查核对表

    49210

    Node.js 应用最佳实践:日志

    生产环境存在错误时,开发人员应该看到各种函数成功执行和失败的详细日志。这样就可以尽快发现并修复问题。 要实现这种设置,我们需要更好地了解每个日志级别。...WARN:这些日志是警告并且不阻止应用程序继续运行,这些日志会在出现问题并使用变通方法时发出警报。例如错误的用户输入、重试等。管理员将来应该修复这些警告。...在 Node.Js ,控制台的实现方式与浏览器不同,控制台模块在使用 console.log 时会在 stdout 打印消息,如果使用 console.error 它将打印到 stderr。...但是,这超出了本文的范围,我们会在另一篇文章详细讨论。 6)性能影响 如果程序写日志的频率很高,则可能直接影响程序性能。...当应用程序出现问题时,日志就是救星。如果你当前还没有很好的使用日志,请实施日志记录实践并将日志添加到代码审查核对表

    1.2K20

    使用Django获取Linux性能数据并存放在redis

    并将需要的系统信息放在了Django 这里我们使用Djangp批量获取Linux性能数据 2....遍历每个数据库,monitor_type为1和performance_type为1时继续 利用取出来的信息连接Linux/Unix,连接成功后根据系统类型选择相应的函数来获取CPU内存信息 接下来使用...redis的push功能保存数据 为方便后面处理数据,如果时间点为整点时,则保留2条信息,如当前时间为2017-12-12-0:00则会在2017-12-11-23:59保存一条相同数据 3.3 一些注意事项...采用Python的多线程同时获取多个系统的信息 关于保存的时间采用绝对时间,并且整点会保存2次 flag用来决定该时间段是否为整点 这里调用了send_mail函数用于程序运行异常时通知 4....设置自动运行 这里我们设置每十五分钟运行一次,并重定向所有日志至一个文件 这样我们可以通过检查该日志文件判断脚本是否正常运行 0,15,30,45 * * * * /usr/bin/python

    1.1K10

    使用Django获取Linux性能数据并存放在redis

    并将需要的系统信息放在了Django 这里我们使用Djangp批量获取Linux性能数据 2....遍历每个数据库,monitor_type为1和performance_type为1时继续 利用取出来的信息连接Linux/Unix,连接成功后根据系统类型选择相应的函数来获取CPU内存信息 接下来使用...redis的push功能保存数据 为方便后面处理数据,如果时间点为整点时,则保留2条信息,如当前时间为2017-12-12-0:00则会在2017-12-11-23:59保存一条相同数据 3.3 一些注意事项...采用Python的多线程同时获取多个系统的信息 关于保存的时间采用绝对时间,并且整点会保存2次 flag用来决定该时间段是否为整点 这里调用了send_mail函数用于程序运行异常时通知 4....设置自动运行 这里我们设置每十五分钟运行一次,并重定向所有日志至一个文件 这样我们可以通过检查该日志文件判断脚本是否正常运行 0,15,30,45 * * * * /usr/bin/python

    1.2K20

    ubuntu supervisor管理uwsgi+nginx

    不过同daemontools一样,它不能监控daemon进程(也就是后台进程) 二、安装 apt-get install -y supervisor 安装成功后,会在/etc/supervisor目录下...supervisor/conf.d/*.conf 进程配置会读取/etc/supervisor/conf.d目录下的*.conf配置文件 安装完成之后,默认就启动了supervisor 三、管理uwsgi 在上一篇文章,...,默认 false stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20     ; stdout... 日志文件备份数 ;stdout 日志文件,需要注意指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /www/mysite1...加载配置 supervisorctl reload 如果出现: error: , [Errno 2] No such file or directory: file

    1.2K20

    Shell错误处理的探索

    就是取反,其原理是Shell在执行判断语句(比如if的条件)时不会在误时退出,即整个语句的返回码是0。不过也是因为这个原因就无法使用$?..._1=( ... )将stdout保存到了变量_1。这里的感叹号的用法和老方法的相同。...注意是重定向,因此先输出的内容仍会在前面。...所以最终状态是 stdout:"_try_out='指令输出的stdout' _try_return=指令返回码 _try_err='指令输出的stderr'" stderr:空 所以,一顿骚操作下来我们就得到了一段包含指令输出的...不过一来__try的使用次数通常有限,二来提供完整的stdout和stderr在编码时会方便许多,而且其实对脚本来说一两毫秒的性能损耗也并不算大,因此还是挺乐意使用这个新的方式的。 $ .

    2.8K10

    黑客马拉松

    很多时候一个产品都少不了和数据打交道,如果使用django的admin(加south),处理数据,存储数据,撰写基础数据都易如反掌 —— 而且你只需要寥寥数行代码(不包括model的代码)就能得到大部分功能...想达到的目标是能够可视化代码运行时的路径(这个足够cool!)。...静态profile就是生成代码的调用关系 —— 最初打算做一个python脚本,用户输入一个函数名,为她生成两张图,一张是往前回溯,展示所有调用这个函数的完整路径;另一张是往后追溯,展示所有以它为根的整个调用路径...all callee symbols to stdout $ cscope -d -L3 # print all caller symbols to stdout 这下只需要写个...最终这些图表能够在django做的website展示出来,还能查询。

    1.4K50

    打印日志的正确姿势和最佳实践!

    又有一次台金融组问我们传什么数据给他们,给了我一个 requestId 去查日志,,直接蒙圈了.........想应该不仅有这痛苦,好多人都一样碰到过,可见打好日志是多么重要,因为打好日志非常有助于排查问题,打不好呢,坏外就太多了,谈谈看到的问题和我的使用习惯; 日志级别与配置 很多人像真的像“神”一样的存在...> 可以全局输出为 info,把需要的包设置成 debug,相当于只看我需要的包下的 debug 信息,其它包的日志为 info 级别,比如我只想看自己项目包的 debug 信息如 me.ele.ebu...异常时输出参数,而不仅是堆栈信息 但如果是生产上,这些日志确实有点多了,但是至少有一种是必须输出的,就是出现异常的信息,必须将参数输出来,因为 90% 以上的问题都是通过异常触发的,而这些参数方便我们回溯...网上一讲到 AOP 就是前后日志的例子,何不放到应用中一试呢,前后输出日志为 debug,异常时输出 error 级别并带上参数,信手拈来一个例子: @Around("within(@org.springframework.stereotype.Service

    84730

    Python 自动化指南(繁琐工作自动化)第二版:十一、调试

    获取字符串形式的回溯 Python 遇到错误时,它会产生一个称为回溯的错误信息宝库。回溯包括错误消息、导致错误的行的行号以及导致错误的函数调用序列。这个调用序列被称为调用栈。...在可以从多个地方调用函数的程序,调用栈可以帮助您确定哪个调用导致了错误。 每当出现未处理的异常时,Python 都会显示回溯。...例如,您可以将回溯信息写入一个文本文件并保持程序运行,而不是在发生异常时立即使程序崩溃。您准备调试程序时,可以稍后查看该文本文件。...要设置断点,点击文件编辑器的行号,出现一个红点,如图 11-4 中所示标记断点。 图 11-4:设置断点会导致行号旁边出现一个红点(圆圈)。...红点会消失,调试器以后不会在那一行中断。 总结 断言、异常、日志和调试器都是发现和防止程序错误的有价值的工具。

    1.5K40

    网站功能——使用 Supervisor 部署 Django 应用程序

    其实的网站一开始的部署方式就是 gunicorn 启动 Django,就很简单的一个运行命令就行了。...日志管理:Supervisor可以捕获和管理进程的输出日志,包括标准输出和标准错误。它提供了对日志文件的轻松访问和旋转,以便有效地跟踪和调试应用程序的运行情况。...创建服务配置 上面的主配置 include 的目录创建服务配置,比如django.conf,放到 /opt/cloud/izone/supervisord.d/ 目录里面就行。...[program:gunicorn-django] command=gunicorn izone.wsgi -b 0.0.0.0:8000 directory=/opt/cloud/izone stdout_logfile...directory:启动命令前进入的目录,比如这里是进入Django项目根目录 stdout_logfile 和 stderr_logfile:日志路径 autostart:跟随supervisor一起启动

    59220

    消失的调用栈帧-基于fp的栈回溯原理解析

    每当一个函数被调用时,就会在程序的栈空间中创建一个新的栈帧,用于存储该函数的局部变量、参数以及其他必要的信息。...栈回溯通常用于调试程序,特别是在程序出现异常或错误时,通过查看栈回溯信息可以快速定位问题所在的位置。栈回溯的目的是为了帮助程序员理解程序执行过程的函数调用关系,从而更好地进行程序调试和错误排查。...抓到当前的运行地址时,可以通过当前的RBP找到栈的记录的的地址,从而一层层的向上回溯:那能找到RBP信息以后我们该如何进行函数的判断呢?...因此,整个栈回溯流程就变成了:基于这个回溯流程,我们就可以得到bar -> foo -> main的回溯,反一下就是相应的调用栈了。我们可以得出一个结论:只有被调用函数才能保存调用函数信息。...goroutine栈(https://www.huamo.online/2019/06/25/%E6%B7%B1%E5%85%A5%E7%A0%94%E7%A9%B6goroutine%E6%A0%88/)正在参与

    74801

    用 Celery 实现 Django 博客 PV 统计

    后两种也类似,本质上都是收集nginx日志,但是收集的阶段不同,第三种是页面完全打开之后,nginx才会收到日志。...用的Django版本为1.11。...post = Post.objects.get(pk=post_id) post.pv = post.pv + 1 post.save() 这是最简单的做法,但是大部分情况,用户访问一篇文章,这篇文章通常会在缓存...比方说,同时100个人访问一篇文章,是启动了多个线程/进程来处理请求,有可能出现所有进程在同一时刻执行了 post = Post.objects.get(pk=post_id) 假设现在数据库这篇文章的...二、用mysql来执行自增,也就是上面用到的。 对于方法二,在Django怎么实现呢。其实翻译为sql就是 UPDATE `blog_post` SET `pv` = (`blog_post`.

    1.1K30
    领券