diff --git a/README.md b/README.md index bcf9550..f9557d3 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,18 @@ Checks a given folder for certain file extensions recursively. All found files w The [check_folder_for_extension test folder](cffe_test) contains of 13 files, 12 of them images, which should be found by the test. -function call: +Function call: ``` -check_folder_for_extension ./cffe_test "*.jpg *.JPG" +check_folder $my_folder $extension_list +``` + +To test the function call: +``` +check_folder_for_extension.sh ./cffe_test "*.jpg *.JPG" ``` For multiple extensions (or other parts of the file name to match) space separate the list, like shown above. + ## Clean up Cleaning up in a script and exit with a given exit code. @@ -27,3 +33,39 @@ For testing the function call the script with: ``` clean_up.sh test ``` + +## Logger + +[Logger](logger.sh) to write messages with individual levels to a file. + +In level *debug* all logged messages are printed to stdout, too. + +Log levels are + +5 LLDebug, *for exceptionally verbose messages, also on std out* + +4 LLInfo, *informative messages* + +3 LLWarning, *warning messages* + +2 LLError, *error messages* + +1 LLMdtry and *mandatory messages to get minimal info in a log file* + +0 LLMute *really nothing gets written* + +The higher the level set in `$Log_Level` to the logger, the more verbose it gets. + +``` +logger $LLWARNING "This is my message"; +``` +produces the following message in the log file: + +``` +logger 20231122_22:43:19 Warning: This is my message! +``` + +For testing the function call the script with just: +``` +logger.sh +``` diff --git a/logger.sh b/logger.sh new file mode 100755 index 0000000..2d0b928 --- /dev/null +++ b/logger.sh @@ -0,0 +1,112 @@ +# Log levels for messages +LLMute=0 +LLMdtry=1 # mandatory: messages that are always written to the log (except mute) +LLError=2 +LLWarning=3 +LLInfo=4 +LLDebug=5 +## Actual log level of the logger used +Log_Level=$LLInfo + +## base name of the logging script. +Log_Name="${0##*/}"; + +## Write log of the script. +## $1 Loglevel to log the message with. +## $2 message to log. +function logger() { + local _logging_level=$1; + local _log_message=$2; + if [[ $Log_Level -lt $_logging_level ]]; then + return; + fi + local _now=$($DATE +%Y%m%d_%H:%M:%S); + if [[ $_logging_level -eq $LLInfo ]]; then + _type=" Info:"; + elif [[ $_logging_level -eq $LLError ]]; then + _type=" ERROR!"; + elif [[ $_logging_level -eq $LLWarning ]]; then + _type=" Warning:"; + elif [[ $_logging_level -eq $LLDebug ]]; then + _type=" DEBUG:"; + else + _type=":"; + fi + printf "$Log_Name ${_now}${_type} ${_log_message}\n" >> $Log_File; + if [[ $Log_Level -eq $LLDebug ]]; then + printf "${_now}${_type} ${_log_message}\n"; + fi +} + +function test() { + printf "Running tests for logger().\n"; + local _exit_val=0; + # Test log level mute: no logfile should be created! + Log_Level=$LLMute; + logger $LLMdtry "In level mute nothing should be logged!"; + if [ -e "$Log_File" ]; then # the logfile should not exist! + ((_exit_val+=1)) + printf "logger() test on log level Mute: FAILED!\n"; + rm $Log_File; + else + printf "logger() test on log level Mute: OK.\n"; + fi + + # Test log level Mdtry, but log with level error: still no logfile should be created! + Log_Level=$LLMdtry; + logger $LLError "In level Mdtry an error should not be logged!"; + if [ -e "$Log_File" ]; then # the logfile should not exist! + ((_exit_val+=1)) + printf "logger() test on log level Mandatory; logging an error happend, so test FAILED!\n"; + rm $Log_File; + else + printf "logger() test on log level Mandatory: when logging an error failed: test OK.\n"; + fi + + # Test log level Info, but log with level error: logfile should be created! + Log_Level=$LLInfo; + logger $LLError "In level Info an error should be logged!"; + if [ -e "$Log_File" ]; then # the logfile should now exist. + printf "logger() test on log level Info: logging an error succeeded, test OK.\n"; + rm $Log_File; + else + ((_exit_val+=1)) + printf "logger() test on log level Info: logging an error FAILED!\n"; + fi + + # Test log level Info, but log with level debug: logfile should not be created! + Log_Level=$LLInfo; + logger $LLDebug "In level Info a debug message should not be logged!"; + if [ -e "$Log_File" ]; then # the logfile should not exist. + ((_exit_val+=1)) + printf "logger() test on log level Info: logging a debug message succeeded, so test FAILED!\n"; + rm $Log_File; + else + printf "logger() test on log level Info: logging a debug message failed: test OK.\n"; + fi + + # Test log level Debug, but log with level debug: logfile should be created! + Log_Level=$LLDebug; + logger $LLDebug "In level Debug a debug message should be logged. ALso the message should appaer on std out."; + if [ -e "$Log_File" ]; then # the logfile should not exist. + printf "logger() test on log level Debug: logging a debug message succeeded, so test OK.\n"; + rm $Log_File; + else + ((_exit_val+=1)) + printf "logger() test on log level Debug: logging a debug message failed: test FAILED!\n"; + fi + + return $_exit_val; +} + +DATE=$(which date); + +Run_Date=$($DATE +%Y_%m_%d) +Log_File="${Run_Date}_${Log_Name}.log"; + +test +if [ $? -eq 0 ]; then + printf "All test succeeded.\n"; +else + printf "$? of 5 tests FAILED!\n"; +fi