I was writing a script recently, and I realized that I was missing the ability to use the standard logging module from Python. I decided to make a stripped-down logging function that would make logging easy, and that could be re-used. I'd be interested to hear what approaches others have taken to solving this problem. Here's what I came up with:
# Set severity constants
$MSG_INFORMATION = 0
$MSG_WARNING = 1
$MSG_ERROR = 2
$MSG_SEVERITY = @('Information', 'Warning', 'Error')
# Set configurable settings for logging
$LOG_LEVEL = $MSG_INFORMATION
$LOG_FILE = 'my_logfile.log'
$SMTP_TO = 'devnull@tojo2000.com'
$SMTP_SERVER = 'smtp.tojo2000.com'
$SMTP_SUBJECT = 'Script error!'
function Write-Log {
<#
.SYNOPSIS
Writes a message to the Log.
.DESCRIPTION
Logs a message to the logfile if the severity is higher than $LOG_LEVEL.
.PARAMETER severity
The severity of the message. Can be Information, Warning, or Error.
Use the $MSG_XXXX constants.
Note that Error will halt the script and send an email.
.PARAMETER message
A string to be printed to the log.
.EXAMPLE
Log $MSG_ERROR "Something has gone terribly wrong!"
#>
param([Parameter(Mandatory=$true)][int]$severity,
[Parameter(Mandatory=$true)][string]$message)
if ($severity -ge $LOG_LEVEL) {
$timestamp = Get-Date -Format 'yyyy-MM-dd hh:mm:ss'
$output = "$timestamp`t$($MSG_SEVERITY[$severity])`t$message"
Write-Output $output >> $LOG_FILE
if ($severity -ge $MSG_ERROR) {
Send-MailMessage -To $SMTP_TO `
-SmtpServer $SMTP_SERVER `
-Subject $SMTP_SUBJECT`
-Body $output `
-From $SMTP_FROM
exit 1
}
}
}