-
-
Save goodmami/6556701 to your computer and use it in GitHub Desktop.
| #!/bin/bash | |
| ## | |
| ## Simple logging mechanism for Bash | |
| ## | |
| ## Author: Michael Wayne Goodman <[email protected]> | |
| ## Thanks: Jul for the idea to add a datestring. See: | |
| ## http://www.goodmami.org/2011/07/simple-logging-in-bash-scripts/#comment-5854 | |
| ## Thanks: @gffhcks for noting that inf() and debug() should be swapped, | |
| ## and that critical() used $2 instead of $1 | |
| ## | |
| ## License: Public domain; do as you wish | |
| ## | |
| exec 3>&2 # logging stream (file descriptor 3) defaults to STDERR | |
| verbosity=3 # default to show warnings | |
| silent_lvl=0 | |
| crt_lvl=1 | |
| err_lvl=2 | |
| wrn_lvl=3 | |
| inf_lvl=4 | |
| dbg_lvl=5 | |
| notify() { log $silent_lvl "NOTE: $1"; } # Always prints | |
| critical() { log $crt_lvl "CRITICAL: $1"; } | |
| error() { log $err_lvl "ERROR: $1"; } | |
| warn() { log $wrn_lvl "WARNING: $1"; } | |
| inf() { log $inf_lvl "INFO: $1"; } # "info" is already a command | |
| debug() { log $dbg_lvl "DEBUG: $1"; } | |
| log() { | |
| if [ $verbosity -ge $1 ]; then | |
| datestring=`date +'%Y-%m-%d %H:%M:%S'` | |
| # Expand escaped characters, wrap at 70 chars, indent wrapped lines | |
| echo -e "$datestring $2" | fold -w70 -s | sed '2~1s/^/ /' >&3 | |
| fi | |
| } |
Shouldn't "debug" be at a higher level of verbosity than "info"?
Also, why does $2 get used instead of $1 for critical()?
@gffhcks, sorry to be so late to respond. I didn't get any notification for your comment.
And thanks for pointing these out. Debug and Info are in the unconventional order because I didn't closely check with what other logging frameworks do. I'm not sure why I used $2 in critical(); that's just a bug. I'll fix both of these.
Hello, what does this statement means: sed '2~1s/^/ /' ?
@MapleLove2014, that indents the wrapped lines. 2~1 means to perform the following operation on every line starting from the 2nd (every 1 line after line 2), then s/^/ / is a substitution operation that matches the beginning of each line (^) and inserts two spaces. In a terminal you might try man sed to get more info about the command.
Ive used this extensively and made some modifications - tell me what you think! https://github.com/p1r473/zsh-color-logging
@p1r473 glad you found it useful! The colors in your version are a nice touch
To make the above working example, append the following to the bottom of the file: