Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Logging framework in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Logging framework
Start Script
↓
Define Log Function
↓
Call Log Function with Message
↓
Log Function Formats Message
↓
Write Message to Log File
↓
Continue Script or Exit
The script starts, defines a logging function, then calls it to write formatted messages to a log file, continuing or ending afterward.
Execution Sample
Bash Scripting
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> script.log
}

log "Script started"
log "Task completed"
This script defines a log function that adds timestamped messages to a file, then logs two messages.
Execution Table
StepActionInput/MessageFormatted OutputLog File Content
1Define log functionN/AN/A
2Call log with 'Script started'Script started2024-06-01 12:00:00 - Script started2024-06-01 12:00:00 - Script started
3Call log with 'Task completed'Task completed2024-06-01 12:00:01 - Task completed2024-06-01 12:00:00 - Script started 2024-06-01 12:00:01 - Task completed
4Script endsN/AN/A2024-06-01 12:00:00 - Script started 2024-06-01 12:00:01 - Task completed
💡 Script ends after logging messages; log file contains timestamped entries.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
log functionundefineddefineddefineddefined
script.log fileemptycontains 1 linecontains 2 linescontains 2 lines
Key Moments - 2 Insights
Why do we use a function to log messages instead of echo directly?
Using a function centralizes formatting and file writing, so all logs have consistent timestamps and go to the same file, as shown in steps 2 and 3 of the execution_table.
How does the timestamp get added to each log message?
The log function uses the date command inside $(...) to get the current time each time it runs, formatting it before the message, as seen in the Formatted Output column.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the content of script.log after step 3?
ABoth 'Script started' and 'Task completed' messages with timestamps
BOnly 'Script started' message
CEmpty file
DOnly 'Task completed' message
💡 Hint
Check the Log File Content column at step 3 in the execution_table.
At which step is the log function first defined?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the Action column in the execution_table to see when the function is defined.
If we change the log function to not include the date command, how would the Log File Content change?
ALog file would be empty
BMessages would be duplicated
CMessages would have no timestamps
DMessages would be in uppercase
💡 Hint
Refer to the Formatted Output column showing timestamps added by the date command.
Concept Snapshot
Logging framework in bash:
- Define a log() function to format messages
- Use date command for timestamps
- Append messages to a log file
- Call log() with messages anytime
- Keeps logs consistent and centralized
Full Transcript
This visual execution shows how a bash script uses a logging framework by defining a log function. The function adds a timestamp to each message using the date command and appends it to a log file. The execution table traces defining the function, calling it with messages, and how the log file content grows. Variables tracked include the function definition and log file content. Key moments clarify why a function is used and how timestamps are added. Quiz questions test understanding of log file content, function definition timing, and effects of removing timestamps.

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