Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同系统中的Python日志显示不同的格式/级别_Python_Logging - Fatal编程技术网

不同系统中的Python日志显示不同的格式/级别

不同系统中的Python日志显示不同的格式/级别,python,logging,Python,Logging,我有一个用python编写的简单命令行程序。程序使用以下方式配置的记录模块记录到屏幕: logging.basicConfig(level=logging.INFO, format='%(levelname)-8s %(message)s') 奇怪的是,在我的笔记本电脑中,程序以所需的格式记录正确的级别(信息),而当我在服务器上运行程序时,程序只以另一种格式记录错误和警告 在这两个系统中,我都在虚拟环境中运行Python2.7。环境并不完全相同 我认为某个模块正在更改我的配置。我不明白为什么它

我有一个用python编写的简单命令行程序。程序使用以下方式配置的记录模块记录到屏幕:

logging.basicConfig(level=logging.INFO, format='%(levelname)-8s %(message)s')
奇怪的是,在我的笔记本电脑中,程序以所需的格式记录正确的级别(信息),而当我在服务器上运行程序时,程序只以另一种格式记录错误和警告

在这两个系统中,我都在虚拟环境中运行Python2.7。环境并不完全相同

我认为某个模块正在更改我的配置。我不明白为什么它只发生在服务器上,但有没有办法找到哪一个


提前感谢,

如果您认为它是某个模块,请尝试使用cx\u freeze或Py2exe冻结代码。这将创建一个可执行文件,并将所需的模块放入其中,这样它就不会依赖于系统上的模块。

如果您认为它是某个模块,请尝试使用cx\u freeze或Py2exe冻结代码。这将创建一个可执行文件,并将所需的模块放入其中,这样它就不会依赖于系统上的模块。

python日志记录系统配置在python进程中是唯一的。如果有人更改进程中的日志记录配置,则此进程中生成的所有日志都将遵循此配置。

python日志记录系统配置在python进程中是唯一的。如果有人更改进程中的日志记录配置,则此进程中生成的所有日志都将遵循此配置。

如果根日志记录程序已经配置了处理程序,则日志记录中的
basicConfig()
API将不起任何作用(如文档所述)。您的
basicConfig()
调用可能会被忽略,因为服务器中的某些其他代码已经为根记录器配置了一些处理程序

一般来说,库代码不应该添加处理程序——这是应用程序开发人员的责任。但是,如果您正在使用框架开发web应用程序,框架可能已经配置了一些处理程序

你说的是“在服务器上”,但不清楚你说的是一个服务应用程序,还是只是在一台碰巧是服务器的机器上运行一个实用程序脚本。正如您所说,虚拟环境略有不同,因此它们之间的差异可能是寻找提示的地方

要了解在根记录器上配置处理程序的内容,您可以为
basicConfig()
addHandler()
查询相关源代码

或者,您可以显式添加处理程序,而不是依赖
basicConfig()
来为您执行此操作:

f = logging.Formatter('%(levelname)-8s %(message)s')
h = logging.StreamHandler()
h.setFormatter(f)
logging.getLogger().addHandler(h)
但是,如果将其他控制台处理程序也添加到根记录器中,这可能会导致多条消息。

如果根记录器已经配置了处理程序,则日志中的
basicConfig()
API将不起任何作用(如文档所述)。您的
basicConfig()
调用可能会被忽略,因为服务器中的某些其他代码已经为根记录器配置了一些处理程序

一般来说,库代码不应该添加处理程序——这是应用程序开发人员的责任。但是,如果您正在使用框架开发web应用程序,框架可能已经配置了一些处理程序

你说的是“在服务器上”,但不清楚你说的是一个服务应用程序,还是只是在一台碰巧是服务器的机器上运行一个实用程序脚本。正如您所说,虚拟环境略有不同,因此它们之间的差异可能是寻找提示的地方

要了解在根记录器上配置处理程序的内容,您可以为
basicConfig()
addHandler()
查询相关源代码

或者,您可以显式添加处理程序,而不是依赖
basicConfig()
来为您执行此操作:

f = logging.Formatter('%(levelname)-8s %(message)s')
h = logging.StreamHandler()
h.setFormatter(f)
logging.getLogger().addHandler(h)

但是,如果还向根记录器添加了其他控制台处理程序,则这可能会导致多条消息。

谢谢您的建议。似乎我的程序导入的一个模块仅在服务器中记录了一些东西,然后我的程序配置了日志记录模块。那么所有的日志都不是我想要的。如果在我的程序中,我在第一行导入并配置日志记录。然后一切都按我想要的方式进行。谢谢你的建议。似乎我的程序导入的一个模块仅在服务器中记录了一些东西,然后我的程序配置了日志记录模块。那么所有的日志都不是我想要的。如果在我的程序中,我在第一行导入并配置日志记录。然后一切都按照我想要的方式进行。