From 3072e89b6d0b1b7053fd55baebd959e8c2bacef2 Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 11:19:21 +0800 Subject: [PATCH 1/7] feature: timestamp prefix of `pm2.log` --- lib/God.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/God.js b/lib/God.js index b4612b02..f7c37647 100644 --- a/lib/God.js +++ b/lib/God.js @@ -40,6 +40,36 @@ var God = module.exports = { }) }; +/** + * Hack Global Console Of PM2 + */ +(function hackConsole(){ + if(process.env.PM2_LOG_DATE_FORMAT && typeof process.env.PM2_LOG_DATE_FORMAT == 'string'){ + var moment = require('moment'); + + // Generate timestamp prefix + function timestamp(){ + return moment().format(process.env.log_date_format) + ': '; + } + + var hacks = ['info', 'log', 'error', 'warn'], consoled = {}; + + // store console functions. + hacks.forEach(function(method){ + consoled[method] = console[method]; + }); + + // Hack Console. + hacks.forEach(function(k){ + console[k] = function(){ + // do not destroy variable insertion + arguments[0] && (arguments[0] = timestamp() + arguments[0]); + consoled[k].apply(console, arguments); + }; + }); + } +})(); + process.on('uncaughtException', function(err) { if (err && err.message == 'Resource leak detected.') { // Catch and ignore this error From 6ce7b79b4fa0f34f2044b124012495630a2c40b7 Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 11:20:37 +0800 Subject: [PATCH 2/7] test cases for timestamp prefix of pm2.log --- test/bash/log-timestamp.sh | 97 ++++++++++++++++++++++++++++++++++++++ test/main.sh | 2 + 2 files changed, 99 insertions(+) create mode 100644 test/bash/log-timestamp.sh diff --git a/test/bash/log-timestamp.sh b/test/bash/log-timestamp.sh new file mode 100644 index 00000000..fbab64be --- /dev/null +++ b/test/bash/log-timestamp.sh @@ -0,0 +1,97 @@ + +#!/usr/bin/env bash + +SRC=$(cd $(dirname "$0"); pwd) +source "${SRC}/include.sh" + +function head { + echo -e "\x1B[1;35m$1\x1B[0m" +} +function no_prefix { + sleep 0.3 + OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + [ $OUT -eq 0 ] || fail "expect no timestamp prefix in pm2.log, but currently existing." + success "have no timestamp prefix" + if [ "$1" -ne 1 ]; then + $pm2 kill + rm -rf ~/.pm2/pm2.log + fi +} +function prefix { + sleep 0.3 + OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + [ $OUT -ne 0 ] || fail "expect have timestamp prefix in pm2.log, but currently does not exist." + success "have timestamp prefix" + if [ "$1" -ne 1 ]; then + $pm2 kill + rm -rf ~/.pm2/pm2.log + fi +} + +cd $file_path + +$pm2 kill + +rm -rf ~/.pm2/pm2.log + +unset PM2_LOG_DATE_FORMAT + +head ">> LIST (NO PREFIX)" +$pm2 ls +no_prefix 0 + +head ">> START (NO PREFIX)" +$pm2 start echo.js +no_prefix 1 + +head ">> RESTART (NO PREFIX)" +$pm2 restart echo +no_prefix 1 + +head ">> STOP (NO PREFIX)" +$pm2 stop echo +no_prefix 0 + +head ">> START JSON (NO PREFIX)" +$pm2 start echo-pm2.json +no_prefix 1 + +head ">> RESTART JSON (NO PREFIX)" +$pm2 restart echo-pm2.json +no_prefix 1 + +head ">> STOP-JSON (NO PREFIX)" +$pm2 stop echo-pm2.json +no_prefix 0 + +export PM2_LOG_DATE_FORMAT="YYYY-MM-DD HH:mm Z" + +head ">> LIST (PREFIX)" +$pm2 ls +prefix 0 + +head ">> START (PREFIX)" +$pm2 start echo.js +prefix 1 + +head ">> RESTART (PREFIX)" +$pm2 restart echo +prefix 1 + +head ">> STOP (PREFIX)" +$pm2 stop echo +prefix 0 + +head ">> START JSON (PREFIX)" +$pm2 start echo-pm2.json +prefix 1 + +head ">> RESTART JSON (PREFIX)" +$pm2 restart echo-pm2.json +prefix 1 + +head ">> STOP-JSON (PREFIX)" +$pm2 restart echo-pm2.json +prefix 0 + +unset PM2_LOG_DATE_FORMAT diff --git a/test/main.sh b/test/main.sh index 61b0529f..481ea771 100644 --- a/test/main.sh +++ b/test/main.sh @@ -59,6 +59,8 @@ bash ./test/bash/binary.sh spec "binary test" bash ./test/bash/log-entire.sh spec "merge stdout && stderr" +bash ./test/bash/log-timestamp.sh +spec "timetstamp prefix of pm2.log" bash ./test/bash/inside-pm2.sh spec "Starting a process inside a PM2 process" From b351d01de712753cf5fb9a73b3cb831e21a441a8 Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 11:25:07 +0800 Subject: [PATCH 3/7] docs: how to enable timestamp prefix of pm2.log --- ADVANCED_README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ADVANCED_README.md b/ADVANCED_README.md index 507ccb78..b24961e4 100644 --- a/ADVANCED_README.md +++ b/ADVANCED_README.md @@ -528,6 +528,19 @@ $ pm2 monit ## Logs management +### Enable Timestamp Prefix of `pm2.log` + +``` +export PM2_LOG_DATE_FORMAT="YYYY-MM-DD HH:mm Z" +``` + +If this env-variable has been changed, you need to dump your processes and kill daemon, restart it again to take effect, e.g.: + +```bash +$ pm2 dump +$ pm2 [resurrect|save] +``` + ### Displaying logs in realtime ![Monit](https://github.com/unitech/pm2/raw/master/pres/pm2-logs.png) From 905182dcddd9265556dab4dad5c5e3156e5423aa Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 14:33:11 +0800 Subject: [PATCH 4/7] fix: locale pm2 root dir --- test/bash/log-timestamp.sh | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/test/bash/log-timestamp.sh b/test/bash/log-timestamp.sh index fbab64be..c1f0d807 100644 --- a/test/bash/log-timestamp.sh +++ b/test/bash/log-timestamp.sh @@ -1,4 +1,3 @@ - #!/usr/bin/env bash SRC=$(cd $(dirname "$0"); pwd) @@ -9,30 +8,48 @@ function head { } function no_prefix { sleep 0.3 - OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + OUT=`cat $pm2_log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` [ $OUT -eq 0 ] || fail "expect no timestamp prefix in pm2.log, but currently existing." success "have no timestamp prefix" if [ "$1" -ne 1 ]; then $pm2 kill - rm -rf ~/.pm2/pm2.log + rm -rf $pm2_log fi } function prefix { sleep 0.3 - OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + OUT=`cat $pm2_log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` [ $OUT -ne 0 ] || fail "expect have timestamp prefix in pm2.log, but currently does not exist." success "have timestamp prefix" if [ "$1" -ne 1 ]; then $pm2 kill - rm -rf ~/.pm2/pm2.log + rm -rf $pm2_log fi } cd $file_path +if [ -z $PM2_HOME ]; then + if [ -z $HOME ];then + if [ -z $HOMEPATH ]; then + fail "can not locate pm2 home" + else + pm2_log="$HOMEPATH/.pm2" + fi + else + pm2_log="$HOME/.pm2" + fi +else + pm2_log="$PM2_HOME" +fi + +pm2_log="$pm2_log/pm2.log" + +echo "root: $pm2_log"; + $pm2 kill -rm -rf ~/.pm2/pm2.log +rm -rf $pm2_log unset PM2_LOG_DATE_FORMAT From 3b99e7a83c732db536b3a35073b97d95a8508642 Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 16:26:40 +0800 Subject: [PATCH 5/7] fix: travis have no pm2.log but only stdout/stderr --- test/bash/log-timestamp.sh | 103 ++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 59 deletions(-) diff --git a/test/bash/log-timestamp.sh b/test/bash/log-timestamp.sh index c1f0d807..bcfcdc5e 100644 --- a/test/bash/log-timestamp.sh +++ b/test/bash/log-timestamp.sh @@ -6,109 +6,94 @@ source "${SRC}/include.sh" function head { echo -e "\x1B[1;35m$1\x1B[0m" } -function no_prefix { - sleep 0.3 - OUT=`cat $pm2_log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` - [ $OUT -eq 0 ] || fail "expect no timestamp prefix in pm2.log, but currently existing." - success "have no timestamp prefix" +function rm_pm2log { if [ "$1" -ne 1 ]; then $pm2 kill - rm -rf $pm2_log + rm -rf ~/.pm2/pm2.log fi } +function grep_log { + if [ -z $TRAVIS ]; then + echo "not travis" + eval "$pm2 $1" + sleep 0.3 + OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + else + echo "travis" + OUT=`eval "$pm2 $1 | grep -n \"[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}\" | wc -l"` + fi +} +function no_prefix { + eval "grep_log \"$1\"" + echo "line count: $OUT" + [ $OUT -eq 0 ] || fail "expect no timestamp prefix in pm2.log, but currently existing." + success "have no timestamp prefix" + rm_pm2log "$2" +} function prefix { - sleep 0.3 - OUT=`cat $pm2_log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` + eval "grep_log \"$1\"" + echo "line count: $OUT" [ $OUT -ne 0 ] || fail "expect have timestamp prefix in pm2.log, but currently does not exist." success "have timestamp prefix" - if [ "$1" -ne 1 ]; then - $pm2 kill - rm -rf $pm2_log - fi + + rm_pm2log "$2" } cd $file_path -if [ -z $PM2_HOME ]; then - if [ -z $HOME ];then - if [ -z $HOMEPATH ]; then - fail "can not locate pm2 home" - else - pm2_log="$HOMEPATH/.pm2" - fi - else - pm2_log="$HOME/.pm2" - fi -else - pm2_log="$PM2_HOME" -fi - -pm2_log="$pm2_log/pm2.log" - -echo "root: $pm2_log"; - $pm2 kill -rm -rf $pm2_log +if [ -z $TRAVIS ] +then + echo "removing pm2.log" + rm -rf ~/.pm2/pm2.log +fi unset PM2_LOG_DATE_FORMAT head ">> LIST (NO PREFIX)" -$pm2 ls -no_prefix 0 +no_prefix "ls" 0 head ">> START (NO PREFIX)" -$pm2 start echo.js -no_prefix 1 +no_prefix "start echo.js" 1 head ">> RESTART (NO PREFIX)" -$pm2 restart echo -no_prefix 1 +no_prefix "restart echo" 1 head ">> STOP (NO PREFIX)" -$pm2 stop echo -no_prefix 0 +no_prefix "stop echo" 0 head ">> START JSON (NO PREFIX)" -$pm2 start echo-pm2.json -no_prefix 1 +no_prefix "start echo-pm2.json" 1 head ">> RESTART JSON (NO PREFIX)" -$pm2 restart echo-pm2.json -no_prefix 1 +no_prefix "restart echo-pm2.json" 1 head ">> STOP-JSON (NO PREFIX)" -$pm2 stop echo-pm2.json -no_prefix 0 +no_prefix "stop echo-pm2.json" 0 export PM2_LOG_DATE_FORMAT="YYYY-MM-DD HH:mm Z" head ">> LIST (PREFIX)" -$pm2 ls -prefix 0 +prefix "ls" 0 head ">> START (PREFIX)" -$pm2 start echo.js -prefix 1 +prefix "start echo.js" 1 head ">> RESTART (PREFIX)" -$pm2 restart echo -prefix 1 +prefix "restart echo" 1 head ">> STOP (PREFIX)" -$pm2 stop echo -prefix 0 +prefix "stop echo" 0 head ">> START JSON (PREFIX)" -$pm2 start echo-pm2.json -prefix 1 +prefix "start echo-pm2.json" 1 head ">> RESTART JSON (PREFIX)" -$pm2 restart echo-pm2.json -prefix 1 +prefix "restart echo-pm2.json" 1 head ">> STOP-JSON (PREFIX)" -$pm2 restart echo-pm2.json -prefix 0 +prefix "restart echo-pm2.json" 0 unset PM2_LOG_DATE_FORMAT +touch ~/.pm2/pm2.log From 9036e1d685ad605d78f9fd89fc422ee5c4fbba8d Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 16:44:18 +0800 Subject: [PATCH 6/7] test case: redirect pm2.log --- test/bash/log-timestamp.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/bash/log-timestamp.sh b/test/bash/log-timestamp.sh index bcfcdc5e..b1b7ba8c 100644 --- a/test/bash/log-timestamp.sh +++ b/test/bash/log-timestamp.sh @@ -20,7 +20,9 @@ function grep_log { OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` else echo "travis" - OUT=`eval "$pm2 $1 | grep -n \"[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}\" | wc -l"` + eval "$pm2 $1 | grep -n \"[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}\" >| pm2.log" + sleep 0.3 + OUT=`cat pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` fi } function no_prefix { @@ -95,5 +97,6 @@ prefix "restart echo-pm2.json" 1 head ">> STOP-JSON (PREFIX)" prefix "restart echo-pm2.json" 0 +rm -rf pm2.log unset PM2_LOG_DATE_FORMAT touch ~/.pm2/pm2.log From 7f649d525a3daf492ae94ee6d396356f1177ffc9 Mon Sep 17 00:00:00 2001 From: Tjatse Date: Sat, 29 Nov 2014 16:58:21 +0800 Subject: [PATCH 7/7] fix: redirect logs before greping --- test/bash/log-timestamp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/bash/log-timestamp.sh b/test/bash/log-timestamp.sh index b1b7ba8c..86a78f58 100644 --- a/test/bash/log-timestamp.sh +++ b/test/bash/log-timestamp.sh @@ -20,7 +20,7 @@ function grep_log { OUT=`cat ~/.pm2/pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` else echo "travis" - eval "$pm2 $1 | grep -n \"[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}\" >| pm2.log" + eval "$pm2 $1 >| pm2.log" sleep 0.3 OUT=`cat pm2.log | grep -n "[0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}" | wc -l` fi