Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Logging framework in Bash Scripting

Choose your learning style10 modes available
Introduction

Logging helps you keep track of what your script is doing. It records messages that tell you about events or errors.

When you want to see what happened during a script run to find problems.
When you want to save important messages for later review.
When you want to monitor script progress in real time.
When you want to separate normal messages from error messages.
When you want to keep a history of script activity for auditing.
Syntax
Bash Scripting
log() {
  local level="$1"
  shift
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*"
}

This function prints a timestamp, a log level, and your message.

You can call it with levels like INFO, WARN, or ERROR.

Examples
Logs an informational message that the script started.
Bash Scripting
log INFO "Script started"
Logs an error message about a missing file.
Bash Scripting
log ERROR "File not found"
Logs a warning about disk space.
Bash Scripting
log WARN "Low disk space"
Sample Program

This script defines a simple logging function. It logs when the script starts and ends. It checks if a file exists and logs an error if not.

Bash Scripting
#!/bin/bash

log() {
  local level="$1"
  shift
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*"
}

log INFO "Script started"
if [ ! -f "/tmp/testfile" ]; then
  log ERROR "File /tmp/testfile not found"
else
  log INFO "File /tmp/testfile exists"
fi
log INFO "Script ended"
OutputSuccess
Important Notes

You can redirect log output to a file by running your script like: ./script.sh > script.log

Use different log levels to filter messages later.

Make sure your system clock is correct for accurate timestamps.

Summary

Logging records important messages during script execution.

A simple logging function prints timestamp, level, and message.

Use logging to find errors and understand script behavior.

Practice

(1/5)
1. What is the main purpose of a logging framework in a bash script?
easy
A. To record important messages during script execution
B. To speed up the script execution
C. To change file permissions automatically
D. To delete temporary files after running

Solution

  1. Step 1: Understand logging role

    Logging records messages that help track what the script does while running.
  2. Step 2: Compare options

    Only To record important messages during script execution describes recording messages; others describe unrelated tasks.
  3. Final Answer:

    To record important messages during script execution -> Option A
  4. Quick Check:

    Logging = record messages [OK]
Hint: Logging means saving messages about script actions [OK]
Common Mistakes:
  • Confusing logging with script speed optimization
  • Thinking logging changes file permissions
  • Assuming logging deletes files automatically
2. Which of the following is the correct syntax to define a simple logging function in bash that prints a message with a timestamp?
easy
A. log() echo "$(date) - $1"
B. log = echo "$(date) - $1"
C. function log echo "$(date) - $1"
D. log() { echo "$(date) - $1"; }

Solution

  1. Step 1: Review bash function syntax

    Functions use the format: name() { commands; }.
  2. Step 2: Check each option

    log() { echo "$(date) - $1"; } correctly defines a function with braces and echo command. Others have syntax errors.
  3. Final Answer:

    log() { echo "$(date) - $1"; } -> Option D
  4. Quick Check:

    Function syntax with braces = log() { echo "$(date) - $1"; } [OK]
Hint: Bash functions need () and braces { } [OK]
Common Mistakes:
  • Using spaces around = in function definition
  • Omitting braces {} for function body
  • Writing function without parentheses ()
3. Given the bash function:
log() { echo "$(date +'%Y-%m-%d %H:%M:%S') [$1] $2"; }

What is the output of log INFO "Script started"?
medium
A. Script started [INFO]
B. [INFO] Script started
C. 2024-06-01 12:00:00 [INFO] Script started
D. INFO Script started

Solution

  1. Step 1: Understand function parameters

    $1 is the log level (INFO), $2 is the message (Script started).
  2. Step 2: Understand echo format

    It prints date, then [$1], then $2, so output is timestamp + [INFO] + message.
  3. Final Answer:

    2024-06-01 12:00:00 [INFO] Script started -> Option C
  4. Quick Check:

    Format = timestamp + [level] + message [OK]
Hint: First param is level, second is message in log() [OK]
Common Mistakes:
  • Mixing order of parameters
  • Ignoring timestamp format
  • Missing brackets around log level
4. You have this logging function:
log() { echo "$(date +'%Y-%m-%d %H:%M:%S') [$1] $2"; }

But when you run log ERROR it prints:
2024-06-01 12:00:00 [ERROR]
What is the problem?
medium
A. Missing second argument for the message
B. Date command syntax is wrong
C. Function name 'log' is reserved
D. Brackets around $1 cause error

Solution

  1. Step 1: Check function usage

    Function expects two arguments: level and message.
  2. Step 2: Analyze output

    Only level is given, so message ($2) is empty, causing missing text after [ERROR].
  3. Final Answer:

    Missing second argument for the message -> Option A
  4. Quick Check:

    Two args needed: level and message [OK]
Hint: Always provide both level and message to log() [OK]
Common Mistakes:
  • Passing only one argument to log()
  • Assuming date syntax is incorrect
  • Thinking function name conflicts cause this
5. You want to improve your bash logging function to write logs to a file and include log levels only if they are WARNING or ERROR. Which code snippet correctly implements this?
hard
A. log() { if [ "$1" = "INFO" ]; then echo "$(date) [$1] $2" >> script.log; fi; }
B. log() { if [[ "$1" == "WARNING" || "$1" == "ERROR" ]]; then echo "$(date) [$1] $2" >> script.log; fi; }
C. log() { echo "$(date) [$1] $2" >> script.log; }
D. log() { echo "$2" >> script.log; }

Solution

  1. Step 1: Understand requirement

    Logs should be saved to a file and include level only if WARNING or ERROR.
  2. Step 2: Check each option

    log() { if [[ "$1" == "WARNING" || "$1" == "ERROR" ]]; then echo "$(date) [$1] $2" >> script.log; fi; } writes to file and filters levels correctly. log() { echo "$(date) [$1] $2" >> script.log; } writes all levels. log() { if [ "$1" = "INFO" ]; then echo "$(date) [$1] $2" >> script.log; fi; } only logs INFO. log() { echo "$2" >> script.log; } logs message without level.
  3. Final Answer:

    log() { if [[ "$1" == "WARNING" || "$1" == "ERROR" ]]; then echo "$(date) [$1] $2" >> script.log; fi; } -> Option B
  4. Quick Check:

    Filter levels and append to file = log() { if [[ "$1" == "WARNING" || "$1" == "ERROR" ]]; then echo "$(date) [$1] $2" >> script.log; fi; } [OK]
Hint: Use if condition to filter levels before logging to file [OK]
Common Mistakes:
  • Logging all levels without filtering
  • Not appending logs to file
  • Logging message without level info
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard