#!/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_TRANSLATE="$1" case "$LEVEL_TO_TRANSLATE" 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") return 5 ;; "ERR") return 4 ;; "WARN") return 3 ;; "INFO") return 1 ;; "DEBUG") return 0 ;; *) return 0 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" "$$" \ "$2" "$(standardizeLogLevels "$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 "$2" \ --arg status "$(uppercase "$3")" \ --arg message "$1" \ --arg operation "${4:UNSPECIFIED}" \ --arg code "${5:999}" \ '{"level":$level, "programName":$pName, "status":$status, "operation":$operation, "code":$code, "message":$message}' \ )" fi echo "$PROPS" | jq "." return } # $1: message, $2: level, $3: status, $4: operation, $5: code writeJournalLog() { # translate error levels if [ -z "$2" ]; then LOG_LEVEL=1 else case "$2" in "emergency" | "emerg") LOG_LEVEL=7 ;; "alert") LOG_LEVEL=6 ;; "critical" | "crit") LOG_LEVEL=5 ;; "error" | "err") LOG_LEVEL=4 ;; "warning" | "warn") LOG_LEVEL=3 ;; "notice") LOG_LEVEL=2 ;; "info") LOG_LEVEL=1 ;; "debug") LOG_LEVEL=0 ;; esac fi # log the message if [ -z "$1" ]; then logger --journald <