Logging Function / Module

Tagged: 

This topic contains 1 reply, has 2 voices, and was last updated by Profile photo of Dave Wyatt Dave Wyatt 2 years, 2 months ago.

  • Author
    Posts
  • #18945
    Profile photo of LeroyJenkins608
    LeroyJenkins608
    Participant

    Hey everyone
    I'm curious what people here use for robust logging.
    I've been searching for ways to incorporate logging into my scripts. For example, I'm looking for a consistent way to log data to a .log file somewhere locally on the system running the scripts. The data I'm looking for is:
    -Time stamp
    -What the script is doing
    -Any errors encountered
    -Completion of Script with time stamp

    I've seen some examples out there, but they all involve just sending manually entered text to a log file. What I'd like is something that can accept pipeline input and have that appear in the log. (Ex: Get-Service | Write-Log). Or have the entire contents from the Start/Stop-Transcript piped to a log file.

    What have you come across that you've found to work well? Any recommendations?

  • #18946
    Profile photo of Dave Wyatt
    Dave Wyatt
    Moderator

    Here's what I use: http://gallery.technet.microsoft.com/Enhanced-Script-Logging-27615f85

    If you use the *-LogFile cmdlets, you get the default behavior, which is to prepend a date / time stamp to each line of output, along with an indicator of which stream it came from ([E] for error, [V] for verbose, etc) and send them to a log file. There are also equivalent *-OutputSubscriber cmdlets which allow you to define the behavior yourself. When you use those commands, you give it a Script Block which will be executed for each line of intercepted console output.

    Long story short, I only really have to add two lines of code to my scripts in order to get a log file:

    # near the beginning of the script:
    
    $script:logFile = Enable-LogFile -Path c:\path\to\log\file.txt
    
    # At the end of the script (optional, but can keep unrelated console output from bleeding into the script's log file):
    
    $script:logFile | Disable-LogFile
    

You must be logged in to reply to this topic.