Introduction
The most common and mandatory thing while coding is logging the results or logging the errors. The log file will give overview of what happened or check if anything went wrong.
In this post I will provide you a generic function how to log information while working with the script
Logging
Following example creates a log file and enters information into it
$DATE = get-date $LogPath = "C:\Custom\Projects\AdiCodes" $LogFileName = "AdisGroupSiteNewLog.log" $FilePath = $LogPath + "\" + $LogFileName $logFileCreated = $False function write-log([string]$label, [string]$logMsg) { if($logFileCreated -eq $False) { write-host "Creating log file..." if((Test-Path -path $LogPath) -ne $True) { write-host "Provide proper values to LogPath folder" -ForegroundColor Red } else { Add-Content -Path $FilePath -Value $logHeader $script:logFileCreated = $True write-host "Log file created..." } } else { [string]$info = [System.String]::Format("[$Date] {0}: {1}",$label, $logMsg) Add-Content -Path $FilePath -Value $info } } try { $siteUrl = "http://dummySite" write-log "Accessing web with url" $siteUrl $web = Get-SPWeb -identity $siteUrl } catch { write-host "Error: Please check the log file" -ForegroundColor Red write-log ("!!ERROR!!",$error[0]) }
Oveview of write-log
The above function uses two variables
$LogPath the directory where Logfile should be saved
Ex:
$LogPath = “C:\Custom\Projects\AdiCodes”
Note: The directory path should exist, otherwise the function will not log information
$LogFileName the log file name.
Ex:
$LogFileName = “AdisGroupSiteNewLog.log”
This file will be created if does not exists and appends data to that file
There are common scenarios where the script is scheduled as job. At that time we may require to create
log file based on the date so that it will be useful to review. More likely we can say that, lets review
today’s log file.
Set the $LogFileName as follows to create a new log file every day
$LogFileName = "AdisGroupSiteNewLog-{0}.log" -f $DATE.ToString("yyyyMMdd")
If we want to create the log file in the directory where script file is there, then set $LogPath as
$LogPath= Split-Path -parent $MyInvocation.MyCommand.Definition
Conclusion
This is one of the best useful method to any developer. Any script you write, make it mandatory that it should contain logging functionality.
You can observe how usefull this will be when deploying in staging environments or when working with large script files. Personally while developing projects and writing scripts for them, I never wrote a script without write-log function. Let me know your comments if you want any information and Happy Coding
References
Don’t miss Best articles of Powershell