#!/bin/sh getTimeStamp() { (date -u +"%Y-%m-%dT%H:%M:%SZ") } getHostname() { (hostname -s) } lowercase() { echo "$1" | tr '[:upper:]' '[:lower:]' } uppercase() { echo "$1" | tr '[:lower:]' '[:upper:]' } standardizeLogLevels() { LEVEL_TO_STANDARDIZE="$(lowercase "$1")" case "$LEVEL_TO_STANDARDIZE" in "critical" | "crit" | "fatal") echo "CRIT" ;; "error" | "err") echo "ERR" ;; "warning" | "warn") echo "WARN" ;; "information" | "info") echo "INFO" ;; "debug" | "verbose") echo "DEBUG" ;; *) echo "INFO" ;; esac } translateLogLevelsToJournalD() { LEVEL_TO_TRANSLATE="$(standardizeLogLevels "$1")" case "$LEVEL_TO_TRANSLATE" in "CRIT") echo 5 ;; "ERR") echo 4 ;; "WARN") echo 3 ;; "INFO") echo 1 ;; "DEBUG") echo 0 ;; *) echo 1 esac } # modified syslog fmt: [pid]: [LEVEL:$2] [STATUS:$3] (:) writePlainTextLog() { # not enough information to generate a meaningful log message if [ -z "$1" ] || [ $# -lt 3 ]; then return fi printf "%s %s %s[%s]: [%s] [%s] %s (%s:%s)\n" \ "$(getTimeStamp)" "$(getHostname)" "$LOG_PROGRAM_NAME" "$$" \ "$(standardizeLogLevels "$2")" "$(uppercase "$3")" "$1" "${4:-UNSPECIFIED}" "${5:-999}" } # $1: message, $2: level, $3: status, [$4: operation], [$5: code] writeJsonLog() { # not enough information to generate a meaningful log message if [ -z "$1" ] || [ $# -lt 3 ]; then return fi PROPS="$( jq --null-input \ --arg timestamp "$(getTimeStamp)" \ --arg hostname "$(getHostname)" \ --arg pName "$LOG_PROGRAM_NAME" \ --arg pid "$$" \ --arg level "$(standardizeLogLevels "$2")" \ --arg status "$(uppercase "$3")" \ --arg message "$1" \ --arg operation "${4:-UNSPECIFIED}" \ --arg code "${5:-999}" \ '{"timestamp":$timestamp, "hostname":$hostname, "programName":$pName, "pid":$pid, "level":$level, "status":$status, "message":$message, "operation":$operation, "code":$code}' \ )" echo "$PROPS" | jq "." return } # $1: message, $2: level, $3: status, $4: operation, $5: code writeJournalDLog() { # not enough information to generate a meaningful log message if [ -z "$1" ] || [ $# -lt 3 ]; then return fi J_TIMESTAMP="$(getTimeStamp)" J_PID="$$" J_PRIO="$(translateLogLevelsToJournalD "$2")" J_STAT="$(uppercase "$3")" logger --journald <