Bird
Raised Fist0
Bash Scriptingscripting~20 mins

Logging framework in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Logging Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
What is the output of this logging command?
Consider this bash script snippet that uses a simple logging function:
log() {
  level=$1
  message=$2
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] $level: $message"
}

log "INFO" "Deployment started"

What will be the output format of the last command?
Bash Scripting
log() {
  level=$1
  message=$2
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] $level: $message"
}

log "INFO" "Deployment started"
A[YYYY-MM-DD HH:MM:SS] INFO: Deployment started
B[INFO] YYYY-MM-DD HH:MM:SS Deployment started
CINFO [YYYY-MM-DD HH:MM:SS]: Deployment started
DDeployment started INFO [YYYY-MM-DD HH:MM:SS]
Attempts:
2 left
💡 Hint
Look at how the echo command formats the output string with date and level.
❓ Configuration
intermediate
1:30remaining
Which syslog configuration line sets the log level to 'warning' for a service?
In the syslog configuration file, you want to log only warnings and errors from the 'auth' facility. Which line correctly configures this?
Aauth.error /var/log/auth.log
Bauth.debug /var/log/auth.log
Cauth.warning /var/log/auth.log
Dauth.info /var/log/auth.log
Attempts:
2 left
💡 Hint
The log level 'warning' includes warnings and errors but excludes info and debug.
❓ Troubleshoot
advanced
2:00remaining
Why does this bash logging function fail to log multi-word messages correctly?
Given this function:
log() {
  echo "[$(date)] $1: $2"
}

log INFO Deployment started successfully

Why does the output only show 'Deployment' instead of the full message?
Bash Scripting
log() {
  echo "[$(date)] $1: $2"
}

log INFO Deployment started successfully
ABecause $2 only captures the second word; the rest are ignored without quotes.
BBecause date command is missing format specifier.
CBecause echo does not support multiple arguments.
DBecause the function is missing a return statement.
Attempts:
2 left
💡 Hint
Think about how bash handles positional parameters and multiple words.
🔀 Workflow
advanced
2:30remaining
What is the correct order to set up a centralized logging system using rsyslog?
Arrange these steps in the correct order to configure a centralized logging server with rsyslog:
1. Configure clients to send logs to the server
2. Install rsyslog on server and clients
3. Configure server to receive remote logs
4. Restart rsyslog service on all machines
A2,1,3,4
B1,2,3,4
C1,3,2,4
D2,3,1,4
Attempts:
2 left
💡 Hint
You must install software before configuring it, and server config before client config.
✅ Best Practice
expert
3:00remaining
Which logging practice helps avoid losing logs during high load in a bash script?
You have a bash script that logs messages to a file. Sometimes under heavy load, logs are lost or incomplete. Which practice best prevents this?
AWrite logs to a variable and echo all at the end of the script
BUse a logging function that appends logs with '>>' and flushes output immediately
CUse 'echo' without redirection and rely on stdout capture
DWrite logs to /dev/null to avoid disk I/O delays
Attempts:
2 left
💡 Hint
Think about how to ensure logs are written safely and immediately to disk.

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