当前位置: 首页 > 面试题库 >

Docker日志中的Python异常标记为流:stdout

杜楚
2023-03-14
问题内容

我想解析并处理docker容器中的所有错误,但是当我期望stderr时,将python异常标记为stdout。

例如简单的 app.py

raise Exception("!")

然后我在docker容器中运行此文件。但是在 /var/lib/docker/containers/…/…-json.log中

{"log":"Traceback (most recent call last):\n","stream":"stdout","time":"2015-06-17T23:10:01.58636849Z"}
{"log":"  File \"/var/app.py\", line 1, in \u003cmodule\u003e\n","stream":"stdout","time":"2015-06-17T23:10:01.586581081Z"}
{"log":"    raise Exception(\"!\")\n","stream":"stdout","time":"2015-06-17T23:10:01.586842665Z"}
{"log":"Exception: !\n","stream":"stdout","time":"2015-06-17T23:10:01.587373678Z"}

问题答案:

我有一个误解。我认为Docker CLI的命令不会影响主日志(/var/lib/docker/containers/…/…-json.log)

但在以下情况下:

泊坞窗运行-it my_python python /var/app.py

json.log内容:

{"log":"Traceback (most recent call last):\n","stream":"stdout","time":"2015-06-18T10:02:55.842010241Z"}
{"log":"  File \"/var/app.py\", line 1, in \u003cmodule\u003e\n","stream":"stdout","time":"2015-06-18T10:02:55.842252975Z"}
{"log":"    raise Exception(\"error\")\n","stream":"stdout","time":"2015-06-18T10:02:55.842423153Z"}
{"log":"Exception: error\n","stream":"stdout","time":"2015-06-18T10:02:55.842754372Z"}

但是,如果我在后台运行容器,流将成为stderr:

docker运行-d my_python python /var/app.py

{"log":"Traceback (most recent call last):\n","stream":"stderr","time":"2015-06-18T10:02:18.905673576Z"}
{"log":"  File \"/var/app.py\", line 1, in \u003cmodule\u003e\n","stream":"stderr","time":"2015-06-18T10:02:18.90575399Z"}
{"log":"    raise Exception(\"error\")\n","stream":"stderr","time":"2015-06-18T10:02:18.905802834Z"}
{"log":"Exception: error\n","stream":"stderr","time":"2015-06-18T10:02:18.90616668Z"}

我认为这种行为是隐性的。



 类似资料:
  • 在将big project移植到log4j2之后,我注意到异常日志不起作用。这样的代码

  • 问题内容: 如何禁用Python中的标准错误流日志记录?这不起作用: 问题答案: 我找到了一个解决方案: 这将防止日志记录发送到包括控制台日志记录的上层记录器。

  • 问题内容: 下面的编码方法是好的做法吗? 而且,我应该 仅使用记录器? 只抛出异常? 两者都做吗? 我知道可以在调用堆栈的另一部分捕获异常,但是也许其他日志记录有一些隐藏的好处,并且也很有用。 问题答案: 在某些情况下,我会同时使用日志记录和引发异常。特别是,它在API中很有用。通过抛出异常,我们允许调用者对其进行处理,并通过记录日志,我们可以自行确定其根本原因。 而且,如果调用者在同一系统中,则

  • 但在我的代码中,我记录了大部分信息 用户名错误发生,计时,整个异常,错误,方法,行号,文件路径,服务网址,所有这些东西,但我仍然面临这个问题,请帮助我解决这个问题。我使用的是ASP.NET核心web API。

  • 1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory

  • 1.【强制】不要捕获Java类库中定义的继承自RuntimeException的运行时异常类,如:IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查来规避,保证程序健壮性。 正例:if(obj != null) {...} 反例:try { obj.method() } catch(NullPointerException e)