如何在PM2错误日志中添加日期?


75

有没有一种方法可以将时间戳添加到.pm2 / logs中的错误日志?

我注意到该pm2 logs命令显示带有时间戳的聚合日志,但是查看日志文件-只有消息和堆栈跟踪而没有日期。

在此处输入图片说明

Answers:


96

根据此问题此提交,您可以使用:

pm2 start app.js --log-date-format 'DD-MM HH:mm:ss.SSS'

这里'DD-MM HH:mm:ss.SSS'是任何momentjs有效的格式。

-更新-

根据pm2日志官方文档,现在您可以使用更简单的--time,例如:

pm2 start app.js --time

其中,--time前缀日志带有标准格式的时间戳。


1
看来,如果您设置--watch为查找更改,则可能会在应用程序重新加载时丢失log-date-format格式,从而使您回到没有日期的日志记录:pm2 start app.js --log-date-format 'DD-MM HH:mm:ss.SSS' --watch。我只是在开发机器上注意到了这一点。LE更正:只有pm2 logs命令会在应用刷新时跳过显示日期/时间。
博世

4
您好,这对我不起作用。我正在使用pm2管理python脚本,您能告诉我是什么问题吗?TXU。
洛德兰

2
有什么方法可以只标记错误日志而不是标准控制台日志的时间戳?我已经在对console.log进行了时间戳记。
迈克尔

41

按照命令行帮助(pm2 logs -h),运行pm2 logs --timestamp命令应将时间戳记添加到日志中。但是,它似乎并不影响旧日志!显然只有带有时间戳的新日志才会显示。

要解决此问题,请--log-date-format="YYYY-MM-DD HH:mm Z"以pm2作为参数。例如:

pm2 start bin/www --log-date-format="YYYY-MM-DD HH:mm Z"

使用process.json

为了方便起见,我喜欢使用process.json启动我的应用程序,因此process.json包含以下内容:

{
  "apps" : [
    {
      "name"        : "app",
      "script"      : "bin/www",
      "log_date_format" : "YYYY-MM-DD HH:mm Z"
    }
  ]
}

然后我通过运行来启动我的应用程序:

pm2 start process.json

完成后,我仅通过运行即可看到时间戳:pm2 logs请注意,不必指定--timestamp即可查看时间戳。

app (out): 2016-08-04 13:46 +01:00: My log here

一本好书:http : //pm2.keymetrics.io/docs/usage/log-management/


1
不知道为什么,但是我只能获取普通日志的时间戳,而不能获取错误日志的时间戳。
若奥·皮门特尔·费雷拉

11
pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm"

3
分析器可能还可以,但请添加更多说明。
abarisone

3
OP为什么要尝试这个?请添加说明您所做的事情以及为什么这样做的原因,不仅对OP如此,对于将来的SO访客也如此。
杰·布兰查德

6

要使用标准格式的时间戳记:

pm2 start app.js --time

或者,如果您想给日志加上自定义格式的时间戳:

pm2 start app.js --log-date-format <format>

哪里<format>是一个时刻显示格式(如YYYY-MM-DD HH:mm Z)。

如果你的应用程序已经在运行,你可以使用reload一个0秒的停机时间重装:

pm2 reload app.js --time

要么

pm2 reload app.js --log-date-format <format>

1
+1为重新加载选项,没有停机时间非常长,我现在管理约22个进程,并能够通过pm2 reload all --time
Trey

5

我使用PM2,但是我不太在乎日志。取而代之的是,我使用bunyan,它为日志记录提供了很大的灵活性。如果您使用--global来npm安装它,您还可以将其用作实时日志查看器:

但是,这不会为您的console.log输出加上时间戳。但是,如果您转换为log.info()或任何其他Bunyan日志函数,则将获得不错的日志记录。

要使用Bunyan查看实时pm2日志,只需对其进行管道处理:

pm2 logs | bunyan

命令pm2 logs会在您的日志消息前添加前缀,这意味着将内容传送到Bunyan不能按预期方式工作。pm2已关闭请求以实现原始日志格式以支持上述内容。
Gerard Downes 2015年

2
PM2为pm2 logs命令添加了--raw标志,通过使用pm2 logs --raw |来实现上述功能。班扬 在下一发行版中将可用。
Gerard Downes 2015年

2

对于process.yml,请遵循以下示例格式。对我有用

 apps:
  - script   : ./SampleApi/app.js
    name     : 'api-proxy-app'
    instances: 2
    exec_mode: cluster
    watch  : true
    log_date_format : "YYYY-MM-DD HH:mm Z"

带有日期时间的示例日志格式:

2019-07-28 13:46 +06:00: channel created for cancel mandate--####################################
2019-07-28 13:46 +06:00: channel created for cancel mandate--####################################
2019-07-28 13:46 +06:00: channel created for exception scenario--####################################
2019-07-28 13:46 +06:00: channel created for create mandate--####################################
2019-07-28 13:46 +06:00: create channel initiated for cancel mandate--------------------->
2019-07-28 13:46 +06:00: create channel initiated for create mandate--------------------->
2019-07-28 13:46 +06:00: create channel initiated for update mandate--------------------->

使用--log-date-format对我不起作用。


2

浪费了30分钟。


  • 不工作
    • 其他答案无效
    • 官方CLI也不起作用: pm2 start app.js [OPTIONS],例如: pm2 start app.js --time
  • 工作了

  • pm2-config.js在您的应用程序根目录中创建一个Ecosystem文件(例如:side package.json

粘贴以下内容并保存:

module.exports = {
  apps: [
    {
      name: "my-app1",
      script: "./index.js",
      time: true,  // <----------------------- This is the key to make it work
      watch: false,
      env: {
        PORT: 4001,
        NODE_ENV: "production",
      },
    },
  ],
};
  • 现在创建一个shell脚本start.sh(OR,批处理文件或直接在以下命令下运行)

粘贴以下内容并保存:

pm2 stop pm2-config.js
pm2 delete pm2-config.js
pm2 start pm2-config.js 

0
  1. 首先更新格式(确保服务器时区是您想要的)
    pm2 restart 0 --log-date-format "DD-MM-YYYY HH:MM Z" 
    
  2. 保存所有过程
    pm2 save
    
  3. 运行这些
    npm i -G pm2 //if not latest  
    pm2 update
    

这有效并显示登录服务器时区,其他时区将不同

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.