feat(func): Use centralized log func

Create single logging function that can be called and then forwards the request to the appropriate logging backend function for completion.
This commit is contained in:
2026-07-24 03:25:29 -06:00
parent 8d3489ba00
commit 51bd6160f3
+44 -31
View File
@@ -35,18 +35,18 @@ badParam() {
if [ "$1" = "null" ]; then if [ "$1" = "null" ]; then
printf "\n%sERROR: '%s' cannot have a NULL (empty) value.\n" "$err" "$2" printf "\n%sERROR: '%s' cannot have a NULL (empty) value.\n" "$err" "$2"
printf "%sPlease use '--help' for assistance.%s\n\n" "$cyan" "$norm" printf "%sPlease use '--help' for assistance.%s\n\n" "$cyan" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \ ([ "$logToConsole" -eq 0 ]) && writeLog \
"${2} cannot have a NULL (empty) value" "critical" "fail" "preexec" 1 "${2} cannot have a NULL (empty) value" "critical" "fail" "preexec" 1
exit 1 exit 1
elif [ "$1" = "dne" ]; then elif [ "$1" = "dne" ]; then
printf "\n%sERROR: '%s %s'\n" "$err" "$2" "$3" printf "\n%sERROR: '%s %s'\n" "$err" "$2" "$3"
printf "file or directory does not exist or is empty.%s\n\n" "$norm" printf "file or directory does not exist or is empty.%s\n\n" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \ ([ "$logToConsole" -eq 0 ]) && writeLog \
"${3}: file or directory does not exist or is empty" "critical" "fail" "preexec" 1 "${3}: file or directory does not exist or is empty" "critical" "fail" "preexec" 1
exit 1 exit 1
elif [ "$1" = "errMsg" ]; then elif [ "$1" = "errMsg" ]; then
printf "\n%sERROR: %s%s\n\n" "$err" "$2" "$norm" printf "\n%sERROR: %s%s\n\n" "$err" "$2" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \ ([ "$logToConsole" -eq 0 ]) && writeLog \
"${2%%\Exit*}" "fatal" "fail" "preexec" 1 "${2%%\Exit*}" "fatal" "fail" "preexec" 1
exit 1 exit 1
fi fi
@@ -85,7 +85,7 @@ listCFErrors() {
messages="${messages#*_}" messages="${messages#*_}"
# output to log # output to log
writePlainTextLog "${message}" "err" "fail" "$2:CF-ERR" "$code" writeLog "${message}" "err" "fail" "$2:CF-ERR" "$code"
done done
} }
@@ -130,6 +130,17 @@ writePlainTextLog() {
>>"$logFile" >>"$logFile"
} }
writeLog() {
([ "$logToNone" ]) && return
PT_LOG_LEVEL="$(standardizeLogLevels "$2")"
([ "$logDebug" -eq 0 ] && [ "$PT_LOG_LEVEL" = "DEBUG" ]) && return
([ "$logToJournal" ]) && return # TODO: replace this with function when implemented
([ "$useJsonLogFmt" -eq 1 ]) && return # TODO: replace this with function when implemented
([ "$useSyslogLogFmt" -eq 1 ]) && writePlainTextLog "$@"
}
scriptExamples() { scriptExamples() {
newline newline
printf "Update Cloudflare DNS host A/AAAA records with current IP address.\n" printf "Update Cloudflare DNS host A/AAAA records with current IP address.\n"
@@ -247,6 +258,7 @@ scriptName="$(basename "$0")"
logFile="$scriptPath/${scriptName%.*}.log" logFile="$scriptPath/${scriptName%.*}.log"
logToJournal=0 logToJournal=0
logToConsole=0 logToConsole=0
logToNone=0
logDebug=0 logDebug=0
useJsonLogFmt=1 useJsonLogFmt=1
useSyslogLogFmt=0 useSyslogLogFmt=0
@@ -296,6 +308,7 @@ while [ $# -gt 0 ]; do
--log-none) --log-none)
# do not log anything # do not log anything
logFile="/dev/null" logFile="/dev/null"
logToNone=1
;; ;;
--log-debug) --log-debug)
# log debugging messages # log debugging messages
@@ -355,7 +368,7 @@ while [ $# -gt 0 ]; do
*) *)
printf "\n%sUnknown option: %s\n" "$err" "$1" printf "\n%sUnknown option: %s\n" "$err" "$1"
printf "%sUse '--help' for valid options.%s\n\n" "$cyan" "$norm" printf "%sUse '--help' for valid options.%s\n\n" "$cyan" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog \ ([ "$logToConsole" -eq 0 ]) && writeLog \
"Unknown script parameter: '${1}'" "critical" "fail" "preexec" 1 "Unknown script parameter: '${1}'" "critical" "fail" "preexec" 1
exit 1 exit 1
;; ;;
@@ -366,12 +379,12 @@ done
### pre-flight checks ### pre-flight checks
if ! command -v curl >/dev/null; then if ! command -v curl >/dev/null; then
printf "\n%sThis script requires that 'curl' is installed and accessible. Exiting.%s\n\n" "$err" "$norm" printf "\n%sThis script requires that 'curl' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog "'curl' must be installed and accessible" "fatal" "fail" "preexec" 2 ([ "$logToConsole" -eq 0 ]) && writeLog "'curl' must be installed and accessible" "fatal" "fail" "preexec" 2
exit 2 exit 2
fi fi
if ! command -v jq >/dev/null; then if ! command -v jq >/dev/null; then
printf "\n%sThis script requires that 'jq' is installed and accessible. Exiting.%s\n\n" "$err" "$norm" printf "\n%sThis script requires that 'jq' is installed and accessible. Exiting.%s\n\n" "$err" "$norm"
([ "$logToConsole" -eq 0 ]) && writePlainTextLog "'jq' must be installed and accessible" "fatal" "fail" "preexec" 2 ([ "$logToConsole" -eq 0 ]) && writeLog "'jq' must be installed and accessible" "fatal" "fail" "preexec" 2
exit 2 exit 2
fi fi
if [ -z "$dnsRecords" ]; then if [ -z "$dnsRecords" ]; then
@@ -387,14 +400,14 @@ if [ "$logToJournal" -eq 1 ] && ! command -v logger >/dev/null 2>&1; then
fi fi
### initial log entries ### initial log entries
writePlainTextLog "starting '${scriptName}'" "info" "ok" "script" writeLog "starting '${scriptName}'" "info" "ok" "script"
writePlainTextLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup" writeLog "script path: ${scriptPath}/${scriptName}" "debug" "ok" "startup"
writePlainTextLog "credentials file: ${accountFile}" "debug" "ok" "startup" writeLog "credentials file: ${accountFile}" "debug" "ok" "startup"
if [ "$ip4" -eq 1 ]; then if [ "$ip4" -eq 1 ]; then
writePlainTextLog "mode: IPv4" "debug" "ok" "startup" writeLog "mode: IPv4" "debug" "ok" "startup"
elif [ "$ip6" -eq 1 ]; then elif [ "$ip6" -eq 1 ]; then
writePlainTextLog "mode: IPv6" "debug" "ok" "startup" writeLog "mode: IPv6" "debug" "ok" "startup"
fi fi
# detect and report IP address # detect and report IP address
@@ -402,21 +415,21 @@ if [ -z "$ipAddress" ]; then
# detect public ip address # detect public ip address
if [ "$ip4" -eq 1 ]; then if [ "$ip4" -eq 1 ]; then
if ! ipAddress="$(curl -s $ip4DetectionSvc)"; then if ! ipAddress="$(curl -s $ip4DetectionSvc)"; then
writePlainTextLog \ writeLog \
"Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10 "Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10
exit 10 exit 10
fi fi
fi fi
if [ "$ip6" -eq 1 ]; then if [ "$ip6" -eq 1 ]; then
if ! ipAddress="$(curl -s $ip6DetectionSvc)"; then if ! ipAddress="$(curl -s $ip6DetectionSvc)"; then
writePlainTextLog \ writeLog \
"Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10 "Unable to auto-detect this machine's public IP address; try again later or supply the IP address to be used" "err" "fail" "detectip" 10
exit 10 exit 10
fi fi
fi fi
writePlainTextLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup" writeLog "DDNS IP address (detected): $ipAddress" "info" "ok" "startup"
else else
writePlainTextLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup" writeLog "DDNS IP address (supplied): $ipAddress" "info" "ok" "startup"
fi fi
# iterate DNS records to update # iterate DNS records to update
@@ -428,7 +441,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
if [ -z "$record" ]; then if [ -z "$record" ]; then
continue continue
fi fi
writePlainTextLog "DNS host record '${record}' queued for update" "info" "ok" "startup" writeLog "DNS host record '${record}' queued for update" "info" "ok" "startup"
done done
### read Cloudflare credentials ### read Cloudflare credentials
@@ -445,14 +458,14 @@ case "$accountFile" in
;; ;;
esac esac
if [ -z "$cfKey" ]; then if [ -z "$cfKey" ]; then
writePlainTextLog "Cloudflare authorized API key (cfKey) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 21 writeLog "Cloudflare authorized API key (cfKey) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 21
exit 21 exit 21
fi fi
if [ -z "$cfZoneId" ]; then if [ -z "$cfZoneId" ]; then
writePlainTextLog "Cloudflare zone id (cfZoneId) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 22 writeLog "Cloudflare zone id (cfZoneId) is either null or undefined; please check your Cloudflare credentials file" "err" "fail" "creds" 22
exit 22 exit 22
fi fi
writePlainTextLog "Cloudflare credentials file read successfully" "debug" "ok" "creds" writeLog "Cloudflare credentials file read successfully" "debug" "ok" "creds"
### connect to Cloudflare and do what needs to be done! ### connect to Cloudflare and do what needs to be done!
dnsRecordsToUpdate="$dnsRecords$dnsSeparator" dnsRecordsToUpdate="$dnsRecords$dnsSeparator"
@@ -477,7 +490,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
-H "Authorization: Bearer ${cfKey}" \ -H "Authorization: Bearer ${cfKey}" \
-H "Content-Type: application/json" -H "Content-Type: application/json"
)"; then )"; then
writePlainTextLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "cflogin" 3 writeLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "cflogin" 3
exit 3 exit 3
fi fi
@@ -486,7 +499,7 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')" cfSuccess="$(printf "%s" "$cfLookup" | jq -r '.success')"
if [ "$cfSuccess" = "false" ]; then if [ "$cfSuccess" = "false" ]; then
listCFErrors "$cfLookup" "cflogin" listCFErrors "$cfLookup" "cflogin"
writePlainTextLog "Cloudflare API error; review any previously logged 'CF-ERR:' lines for details." "err" "fail" "cflogin" 25 writeLog "Cloudflare API error; review any previously logged 'CF-ERR:' lines for details." "err" "fail" "cflogin" 25
exit 25 exit 25
fi fi
@@ -494,18 +507,18 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
# skip to the next host if an existing host record cannot be found (this script *updates* only, does not create!) # skip to the next host if an existing host record cannot be found (this script *updates* only, does not create!)
if [ "$resultCount" = "0" ]; then if [ "$resultCount" = "0" ]; then
writePlainTextLog "Cannot find an existing record matching '${record}' to update" "warn" "warn" "ddns" writeLog "Cannot find an existing record matching '${record}' to update" "warn" "warn" "ddns"
invalidDomainCount=$((invalidDomainCount + 1)) invalidDomainCount=$((invalidDomainCount + 1))
continue continue
fi fi
objectId=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .id') objectId=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .id')
currentIpAddr=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .content') currentIpAddr=$(printf "%s" "$cfLookup" | jq -r '.result | .[] | .content')
writePlainTextLog "The current IP address for '${record}' is ${currentIpAddr}" "debug" "ok" "ddns" writeLog "The current IP address for '${record}' is ${currentIpAddr}" "debug" "ok" "ddns"
# skip to next hostname if record already up to date # skip to next hostname if record already up to date
if [ "$currentIpAddr" = "$ipAddress" ]; then if [ "$currentIpAddr" = "$ipAddress" ]; then
writePlainTextLog "The IP address for '${record}' is already up to date" "info" "ok" "ddns" writeLog "The IP address for '${record}' is already up to date" "info" "ok" "ddns"
continue continue
fi fi
@@ -519,17 +532,17 @@ while [ -n "$dnsRecordsToUpdate" ] && [ "$dnsRecordsToUpdate" != "$dnsSeparator"
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
--data "${updateJSON}" --data "${updateJSON}"
)"; then )"; then
writePlainTextLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "ddns" 3 writeLog "Unable to connect to Cloudflare servers; please try again later." "err" "fail" "ddns" 3
exit 3 exit 3
fi fi
# note update success or failure # note update success or failure
cfSuccess="$(printf "%s" "$cfResult" | jq '.success')" cfSuccess="$(printf "%s" "$cfResult" | jq '.success')"
if [ "$cfSuccess" = "true" ]; then if [ "$cfSuccess" = "true" ]; then
writePlainTextLog "The IP address for '${record}' successfully updated" "info" "ok" "ddns" writeLog "The IP address for '${record}' successfully updated" "info" "ok" "ddns"
else else
listCFErrors "$cfResult" "ddns" listCFErrors "$cfResult" "ddns"
writePlainTextLog "Unable to update the IP address for '${record}'" "err" "fail" "ddns" writeLog "Unable to update the IP address for '${record}'" "err" "fail" "ddns"
# do not exit with error, API error here is probably an update issue specific to this host # do not exit with error, API error here is probably an update issue specific to this host
# increment counter and note it after all processing finished # increment counter and note it after all processing finished
failedHostCount=$((failedHostCount + 1)) failedHostCount=$((failedHostCount + 1))
@@ -538,14 +551,14 @@ done
# exit # exit
if [ "$invalidDomainCount" -ne 0 ]; then if [ "$invalidDomainCount" -ne 0 ]; then
writePlainTextLog "${invalidDomainCount} invalid host(s) were supplied for updating" "warn" "warn" "ddns" writeLog "${invalidDomainCount} invalid host(s) were supplied for updating" "warn" "warn" "ddns"
fi fi
if [ "$failedHostCount" -ne 0 ]; then if [ "$failedHostCount" -ne 0 ]; then
writePlainTextLog \ writeLog \
"${failedHostCount} host update(s) failed; review 'CF-ERR:' lines in this log to help determine what may have gone wrong" "err" "fail" "ddns" 26 "${failedHostCount} host update(s) failed; review 'CF-ERR:' lines in this log to help determine what may have gone wrong" "err" "fail" "ddns" 26
exit 26 exit 26
else else
writePlainTextLog "${scriptName} completed successfully" "info" "ok" "script" writeLog "${scriptName} completed successfully" "info" "ok" "script"
fi fi
### exit return codes ### exit return codes