Last active
July 30, 2022 21:47
-
-
Save pleasemarkdarkly/4496f1f61badf85ed3519c95a61562c7 to your computer and use it in GitHub Desktop.
Logging tool for console output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
#-------------------------------------------------------------------------------------------------- | |
# log4bash - Makes logging in Bash scripting suck less | |
# Copyright (c) Fred Palmer | |
# Licensed under the MIT license | |
# http://github.com/fredpalmer/log4bash | |
# https://git.io/Jep8T | |
#-------------------------------------------------------------------------------------------------- | |
set -e # Fail on first error | |
# Useful global variables that users may wish to reference | |
SCRIPT_ARGS="$@" | |
SCRIPT_NAME="$0" | |
SCRIPT_NAME="${SCRIPT_NAME#\./}" | |
SCRIPT_NAME="${SCRIPT_NAME##/*/}" | |
SCRIPT_BASE_DIR="$(cd "$( dirname "$0")" && pwd )" | |
# This should probably be the right way - didn't have time to experiment though | |
# declare -r INTERACTIVE_MODE="$([ tty --silent ] && echo on || echo off)" | |
declare -r INTERACTIVE_MODE=$([ "$(uname)" == "Darwin" ] && echo "on" || echo "off") | |
#-------------------------------------------------------------------------------------------------- | |
# Begin Help Section | |
HELP_TEXT="" | |
# This function is called in the event of an error. | |
# Scripts which source this script may override by defining their own "usage" function | |
usage() { | |
echo -e "${HELP_TEXT}"; | |
exit 1; | |
} | |
# End Help Section | |
#-------------------------------------------------------------------------------------------------- | |
#-------------------------------------------------------------------------------------------------- | |
# Begin Logging Section | |
if [[ "${INTERACTIVE_MODE}" == "off" ]] | |
then | |
# Then we don't care about log colors | |
declare -r LOG_DEFAULT_COLOR="" | |
declare -r LOG_ERROR_COLOR="" | |
declare -r LOG_INFO_COLOR="" | |
declare -r LOG_SUCCESS_COLOR="" | |
declare -r LOG_WARN_COLOR="" | |
declare -r LOG_DEBUG_COLOR="" | |
else | |
declare -r LOG_DEFAULT_COLOR="\033[0m" | |
declare -r LOG_ERROR_COLOR="\033[1;31m" | |
declare -r LOG_INFO_COLOR="\033[1m" | |
declare -r LOG_SUCCESS_COLOR="\033[1;32m" | |
declare -r LOG_WARN_COLOR="\033[1;33m" | |
declare -r LOG_DEBUG_COLOR="\033[1;34m" | |
fi | |
# This function scrubs the output of any control characters used in colorized output | |
# It's designed to be piped through with text that needs scrubbing. The scrubbed | |
# text will come out the other side! | |
prepare_log_for_nonterminal() { | |
# Essentially this strips all the control characters for log colors | |
sed "s/[[:cntrl:]]\[[0-9;]*m//g" | |
} | |
log() { | |
local log_text="$1" | |
local log_level="$2" | |
local log_color="$3" | |
# Default level to "info" | |
[[ -z ${log_level} ]] && log_level="INFO"; | |
[[ -z ${log_color} ]] && log_color="${LOG_INFO_COLOR}"; | |
echo -e "${log_color}[$(date +"%Y-%m-%d %H:%M:%S %Z")] [${log_level}] ${log_text} ${LOG_DEFAULT_COLOR}"; | |
return 0; | |
} | |
log_info() { log "$@"; } | |
log_speak() { | |
if type -P say >/dev/null | |
then | |
local easier_to_say="$1"; | |
case "${easier_to_say}" in | |
studionowdev*) | |
easier_to_say="studio now dev ${easier_to_say#studionowdev}"; | |
;; | |
studionow*) | |
easier_to_say="studio now ${easier_to_say#studionow}"; | |
;; | |
esac | |
say "${easier_to_say}"; | |
fi | |
return 0; | |
} | |
log_success() { log "$1" "SUCCESS" "${LOG_SUCCESS_COLOR}"; } | |
log_error() { log "$1" "ERROR" "${LOG_ERROR_COLOR}"; log_speak "$1"; } | |
log_warning() { log "$1" "WARNING" "${LOG_WARN_COLOR}"; } | |
log_debug() { log "$1" "DEBUG" "${LOG_DEBUG_COLOR}"; } | |
log_captains() { | |
if type -P figlet >/dev/null; | |
then | |
figlet -f computer -w 120 "$1"; | |
else | |
log "$1"; | |
fi | |
log_speak "$1"; | |
return 0; | |
} | |
log_campfire() { | |
# This function performs a campfire notification with the arguments passed to it | |
if [[ -z ${CAMPFIRE_API_AUTH_TOKEN} || -z ${CAMPFIRE_NOTIFICATION_URL} ]] | |
then | |
log_warning "CAMPFIRE_API_AUTH_TOKEN and CAMPFIRE_NOTIFICATION_URL must be set in order log to campfire." | |
return 1; | |
fi | |
local campfire_message=" | |
{ | |
\"message\": { | |
\"type\":\"TextMessage\", | |
\"body\":\"$@\" | |
} | |
}" | |
curl \ | |
--write-out "\r\n" \ | |
--user ${CAMPFIRE_API_AUTH_TOKEN}:X \ | |
--header 'Content-Type: application/json' \ | |
--data "${campfire_message}" \ | |
${CAMPFIRE_NOTIFICATION_URL} | |
return $?; | |
} | |
# End Logging Section | |
#-------------------------------------------------------------------------------------------------- | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment