فهرست منبع

chore: colorize warning and error logs

Ivan Dyachkov 3 سال پیش
والد
کامیت
ec826f03c9
1فایلهای تغییر یافته به همراه35 افزوده شده و 33 حذف شده
  1. 35 33
      bin/emqx

+ 35 - 33
bin/emqx

@@ -46,14 +46,17 @@ export PROGNAME="erl"
 export ERTS_LIB_DIR="$RUNNER_ROOT_DIR/lib"
 DYNLIBS_DIR="$RUNNER_ROOT_DIR/dynlibs"
 
-# Echo to stderr on errors
-echoerr() {
-    echo -e "$*" 1>&2;
+logerr() {
+    echo -e "$(tput setaf 1)ERROR: $*$(tput sgr0)" 1>&2
+}
+
+logwarn() {
+    echo "$(tput setaf 3)WARNING: $*$(tput sgr0)"
 }
 
 die() {
     set +x
-    echoerr "ERROR: $1"
+    logerr "$1"
     errno=${2:-1}
     exit "$errno"
 }
@@ -101,7 +104,7 @@ usage() {
         echo "This command is applicable when EMQX is started in daemon mode."
         echo "It attaches the current shell to EMQX's control console"
         echo "through a named pipe."
-        echo "WARNING: try to use the safer alternative, remote_console command."
+        logwarn "try to use the safer alternative, remote_console command."
         ;;
     remote_console)
         echo "Start an interactive shell running an Erlang or Elixir node which "
@@ -324,19 +327,19 @@ if [ "$IS_BOOT_COMMAND" = 'yes' ]; then
         if ! (echo -e "$COMPATIBILITY_INFO" | grep -q 'BEAM_OK'); then
             ## not able to start beam.smp
             set +x
-            echoerr "$COMPATIBILITY_INFO"
-            echoerr "Please ensure it is running on the correct platform:"
-            echoerr "$BUILD_INFO"
-            echoerr "Version=$REL_VSN"
-            echoerr "Required dependencies: openssl-1.1.1 (libcrypto), libncurses and libatomic1"
+            logerr "$COMPATIBILITY_INFO"
+            logerr "Please ensure it is running on the correct platform:"
+            logerr "$BUILD_INFO"
+            logerr "Version=$REL_VSN"
+            logerr "Required dependencies: openssl-1.1.1 (libcrypto), libncurses and libatomic1"
             exit 1
         elif ! (echo -e "$COMPATIBILITY_INFO" | grep -q 'CRYPTO_OK'); then
             ## not able to start crypto app
             set +x
-            echoerr "$COMPATIBILITY_INFO"
+            logerr "$COMPATIBILITY_INFO"
             exit 2
         fi
-        echoerr "Using libs from '${DYNLIBS_DIR}' due to missing from the OS."
+        logerr "Using libs from '${DYNLIBS_DIR}' due to missing from the OS."
     fi
     [ "$DEBUG" -eq 1 ] && set -x
 fi
@@ -344,7 +347,7 @@ fi
 # Warn the user if ulimit -n is less than 1024
 ULIMIT_F=$(ulimit -n)
 if [ "$ULIMIT_F" -lt 1024 ]; then
-    echo "WARNING: ulimit -n is ${ULIMIT_F}; 1024 is the recommended minimum."
+    logwarn "ulimit -n is ${ULIMIT_F}; 1024 is the recommended minimum."
 fi
 
 SED_REPLACE="sed -i "
@@ -480,10 +483,10 @@ if [ "$EKKA_PROTO_DIST_MOD" = 'inet_tls' ]; then
                 # there is unfortunately no way to support space for this option because we'd need to grep
                 # from 'ps -ef' result to get this option for non-boot commands (nodetool) to run
                 set +x
-                echoerr "Got space in: $SSL_DIST_OPTFILE"
-                echoerr "No space is allowed for Erlang distribution over SSL option file path."
-                echoerr "Configure it from environment variable EMQX_SSL_DIST_OPTFILE."
-                echoerr "Or make sure emqx root path '$RUNNER_ROOT_DIR' has no space"
+                logerr "Got space in: $SSL_DIST_OPTFILE"
+                logerr "No space is allowed for Erlang distribution over SSL option file path."
+                logerr "Configure it from environment variable EMQX_SSL_DIST_OPTFILE."
+                logerr "Or make sure emqx root path '$RUNNER_ROOT_DIR' has no space"
                 exit 1
                 ;;
             *)
@@ -515,9 +518,9 @@ check_license() {
       call_nodetool check_license_key "$key_license"
     else
       set +x
-      echoerr "License not found."
-      echoerr "Please specify one via the EMQX_LICENSE__KEY variable"
-      echoerr "or via license.key in emqx-enterprise.conf."
+      logerr "License not found."
+      logerr "Please specify one via the EMQX_LICENSE__KEY variable"
+      logerr "or via license.key in emqx-enterprise.conf."
       return 1
     fi
 }
@@ -604,8 +607,7 @@ is_down() {
         if ps -p "$PID" | grep -q 'defunct'; then
             # zombie state, print parent pid
             parent="$(ps -o ppid= -p "$PID" | tr -d ' ')"
-            echo "WARNING: $PID is marked <defunct>, parent:"
-            ps -p "$parent"
+            logwarn "$PID is marked <defunct>, parent: $(ps -p "$parent")"
             return 0
         fi
         return 1
@@ -660,11 +662,11 @@ latest_vm_args() {
         echo "$vm_args_file"
     else
         set +x
-        echoerr "Node not initialized?"
-        echoerr "Generated config file vm.*.args is not found for command '$COMMAND'"
-        echoerr "in config dir: $CONFIGS_DIR"
-        echoerr "In case the file has been deleted while the node is running,"
-        echoerr "set environment variable '$hint_var_name' to continue"
+        logerr "Node not initialized?"
+        logerr "Generated config file vm.*.args is not found for command '$COMMAND'"
+        logerr "in config dir: $CONFIGS_DIR"
+        logerr "In case the file has been deleted while the node is running,"
+        logerr "set environment variable '$hint_var_name' to continue"
         exit 1
     fi
 }
@@ -694,7 +696,7 @@ tr_log_to_env() {
             # value not set, do nothing
             ;;
         *)
-            echoerr "Unknown environment value for EMQX_LOG__TO=${log_to} discarded"
+            logerr "Unknown environment value for EMQX_LOG__TO=${log_to} discarded"
             ;;
     esac
 }
@@ -769,16 +771,16 @@ if [ -z "$COOKIE" ]; then
 fi
 [ -z "$COOKIE" ] && COOKIE="$EMQX_DEFAULT_ERLANG_COOKIE"
 if [ $IS_BOOT_COMMAND = 'yes' ] && [ "$COOKIE" = "$EMQX_DEFAULT_ERLANG_COOKIE" ]; then
-    echoerr "WARNING: Default (insecure) Erlang cookie is in use."
-    echoerr "WARNING: Configure node.cookie in $EMQX_ETC_DIR/emqx.conf or override from environment variable EMQX_NODE__COOKIE"
-    echoerr "NOTE: Use the same config value for all nodes in the cluster."
+    logwarn "Default (insecure) Erlang cookie is in use."
+    logwarn "Configure node.cookie in $EMQX_ETC_DIR/emqx.conf or override from environment variable EMQX_NODE__COOKIE"
+    logwarn "Use the same config value for all nodes in the cluster."
 fi
 
 ## check if OTP version has mnesia_hook feature; if not, fallback to
 ## using Mnesia DB backend.
 if [[ "$IS_BOOT_COMMAND" == 'yes' && "$(get_boot_config 'node.db_backend')" == "rlog" ]]; then
     if ! (echo -e "$COMPATIBILITY_INFO" | grep -q 'MNESIA_OK'); then
-      echoerr "DB Backend is RLOG, but an incompatible OTP version has been detected. Falling back to using Mnesia DB backend."
+      logerr "DB Backend is RLOG, but an incompatible OTP version has been detected. Falling back to using Mnesia DB backend."
       export EMQX_NODE__DB_BACKEND=mnesia
       export EMQX_NODE__DB_ROLE=core
     fi
@@ -852,7 +854,7 @@ case "${COMMAND}" in
             logger -t "${REL_NAME}[${PID}]" "STOP: $msg"
             # log to user console
             set +x
-            echoerr "Stop failed, $msg"
+            logerr "Stop failed, $msg"
             echo "ERROR: $PID is still around"
             ps -p "$PID"
             exit 1