Logging and Timestamps in Scripts

Summary

Log actions and errors with time info.


Logging is an essential aspect of scripting, regardless of whether you're automating system administration tasks, data processing, or building larger applications. Incorporating timestamps into your logs not only provides context for the recorded events but also aids in debugging, performance monitoring, and auditing. In this article, we’ll explore best practices for logging and how to implement timestamps effectively in your scripts.


Why Logging Matters

Scripts often run unattended or as part of automated systems. Without proper logging, when something goes wrong, finding the root cause can be time-consuming or even impossible. Logging allows you to:

  • Trace the script’s actions step-by-step.
  • Record errors and warnings for future analysis.
  • Measure the performance of script sections.
  • Provide a historical track record for compliance and audits.

The Importance of Timestamps

A log entry is much more useful if you know when it occurred. Timestamps help you:

  • Sequence events for easier debugging.
  • Correlate logs with external systems.
  • Calculate durations and identify performance bottlenecks.

Logging Approaches in Different Languages

Bash/Shell Scripts

Bash scripts are widely used for automating tasks. A common practice is to use the date command to prefix each log entry.

#!/bin/bash

log() {
  echo "$(date +'%Y-%m-%d %H:%M:%S') [$1] $2"
}

log "INFO" "Script started"
# ... your script code ...
log "ERROR" "Something went wrong"

Output Example:

2024-06-15 10:42:10 [INFO] Script started
2024-06-15 10:42:12 [ERROR] Something went wrong

Python Scripts

Python’s logging module makes it easy to include timestamps.

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

logging.info("Script started")
# ... your script code ...
logging.error("Something went wrong")

Output Example:

2024-06-15 10:42:10 [INFO] Script started
2024-06-15 10:42:12 [ERROR] Something went wrong

PowerShell Scripts

PowerShell can also include timestamps in its logs:

function Write-Log {
    param(
        [string]$Level,
        [string]$Message
    )
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    Write-Output "$timestamp [$Level] $Message"
}

Write-Log "INFO" "Script started"
# ... your script code ...
Write-Log "ERROR" "An error occurred"

Output Example:

2024-06-15 10:42:10 [INFO] Script started
2024-06-15 10:42:12 [ERROR] An error occurred

Best Practices for Logging and Timestamps

  1. Be Consistent: Use a consistent timestamp format (e.g., YYYY-MM-DD HH:MM:SS) throughout your scripts.
  2. Log Levels: Distinguish between INFO, WARNING, ERROR, and DEBUG messages.
  3. Compose Log Functions: Encapsulate logging in a function or class to avoid code repetition.
  4. Separate Logs: Redirect logs to a dedicated file for easier parsing.
  5. UTC vs Local Time: Decide whether to log in UTC (for distributed systems) or local time.
  6. Include Error Context: Log error messages with relevant context, such as filenames or variables.
  7. Rotate and Archive: For long-running scripts, rotate and archive log files to prevent disk overflow.

Common Pitfalls to Avoid

  • Missing Timestamps: Omitting time information makes logs impossible to use for time-based analysis.
  • Unstructured Logs: Inconsistent formats make it hard to search or parse logs.
  • Overlogging/Underlogging: Too much noise or too little detail both hinder troubleshooting.

Conclusion

Effective logging with timestamps transforms scripts from opaque automation tools into transparent, manageable systems. Whether you're writing a quick shell script or a production-grade automation program, investing a little time into proper logging pays off immensely when issues arise. Start today: add timestamps and log levels to your next script, and future-you will thank you.


Further Reading & Resources

Happy Scripting!