PM2 不记录 Python3 打印语句
PM2 doesn't log Python3 print statements
我在后台使用 PM2 运行 一个 Python 程序
pm2 start helloworld.py
它工作得很好。但是,在 helloworld.py
中,我有几个用作日志的打印语句。例如,当收到网络请求或更新数据库值时。当我 运行 helloworld.py
这样的时候:
python3 helloworld.py
所有这些打印语句都是可见的,我可以调试我的应用程序。但是,当 运行ning
pm2 logs helloworld
none 个打印语句出现。
检查文件夹#HOME/.pm2/logs
例如,请参阅此处的文件夹结构部分:http://pm2.keymetrics.io/docs/usage/quick-start/
还可以考虑使用配置文件,其中包含与您的脚本相关的显式日志文件夹。 (注意这个文件夹必须存在,pm2 才能使用它。)见 http://pm2.keymetrics.io/docs/usage/application-declaration/
{
"apps": [
{
"script": "app/server.js",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "logs/server.web.error.log",
"out_file": "logs/server.web.out.log",
...
跟踪这些日志文件的好方法是 运行 tail
tail -f logs/*.log
更新:
明确地说,使用配置文件适用于 python 脚本。只需创建一个 json 配置文件,指定您的脚本以及您希望输出的位置。例如
{
"apps": [
{
"name": "Test Python",
"script": "test.py",
"out_file": "test.out.log",
}
]
}
然后运行它
pm2 开始 test.json
在结果中查找进程 ID。使用此进程 ID 停止您的进程并查看日志文件的位置。例如。 pm2 显示 3
这个问题是几个月前的问题,所以也许您不久前就想出了这个问题,但它是我遇到同样问题时 google 最热门的问题之一,所以我想我应该补充一下我发现了什么。
这似乎是 python 如何缓冲 sys.stdout 的问题。在某些 platforms/instances 中,当被 pm2 或 nohup 调用时,sys.stdout 流可能不会被刷新,直到进程退出。将“-u”参数传递给 python 解释器会阻止它缓冲 sys.stdout。在 pm2 的 process.json 中,我添加了 "interpreter_args": "-u" 并且我现在可以正常获取日志了。
我在后台使用 PM2 运行 一个 Python 程序
pm2 start helloworld.py
它工作得很好。但是,在 helloworld.py
中,我有几个用作日志的打印语句。例如,当收到网络请求或更新数据库值时。当我 运行 helloworld.py
这样的时候:
python3 helloworld.py
所有这些打印语句都是可见的,我可以调试我的应用程序。但是,当 运行ning
pm2 logs helloworld
none 个打印语句出现。
检查文件夹#HOME/.pm2/logs
例如,请参阅此处的文件夹结构部分:http://pm2.keymetrics.io/docs/usage/quick-start/
还可以考虑使用配置文件,其中包含与您的脚本相关的显式日志文件夹。 (注意这个文件夹必须存在,pm2 才能使用它。)见 http://pm2.keymetrics.io/docs/usage/application-declaration/
{
"apps": [
{
"script": "app/server.js",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "logs/server.web.error.log",
"out_file": "logs/server.web.out.log",
...
跟踪这些日志文件的好方法是 运行 tail
tail -f logs/*.log
更新: 明确地说,使用配置文件适用于 python 脚本。只需创建一个 json 配置文件,指定您的脚本以及您希望输出的位置。例如
{
"apps": [
{
"name": "Test Python",
"script": "test.py",
"out_file": "test.out.log",
}
]
}
然后运行它 pm2 开始 test.json 在结果中查找进程 ID。使用此进程 ID 停止您的进程并查看日志文件的位置。例如。 pm2 显示 3
这个问题是几个月前的问题,所以也许您不久前就想出了这个问题,但它是我遇到同样问题时 google 最热门的问题之一,所以我想我应该补充一下我发现了什么。
这似乎是 python 如何缓冲 sys.stdout 的问题。在某些 platforms/instances 中,当被 pm2 或 nohup 调用时,sys.stdout 流可能不会被刷新,直到进程退出。将“-u”参数传递给 python 解释器会阻止它缓冲 sys.stdout。在 pm2 的 process.json 中,我添加了 "interpreter_args": "-u" 并且我现在可以正常获取日志了。