-4

I am looking for a clear example of using Log4Net in PowerShell to write a local log file. I have googled it, but the examples I have found (and linked to) have been confusing to me. I would love to include a specific problem, but since I am looking for a good reference I can’t.

Edit: Rewritten for clarity… maybe?

geek_01
  • 495
  • 4
  • 9
  • Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. – mhu Feb 13 '20 at 21:07
  • 1
    This is a good idea that I've considered as well, since I use Log4net in C# projects. You may have gotten downvoted for neglecting to [search](https://stackoverflow.com/search?q=%5Bpowershell%5D+log4net) first. [This first result](https://stackoverflow.com/questions/13496363/trying-to-get-log4net-working-with-powershell-with-a-log4net-config-file-in-the) is a decent start. – Rich Moss Feb 13 '20 at 23:34

1 Answers1

3

Well, seems like I worded my question poorly. I kept finding this link powershell-logging-using-apache-log4net but found it really hard to read.

So, I took this code and wrote it in friendlier fashion (for me). The entire ColoredConsoleAppender part can be removed, as it is just for displaying to console.

#####################################################################################################################
#Load log4net.dll
$DllPath = ([System.IO.Directory]::GetParent($MyInvocation.MyCommand.Path)).FullName
$DllFile = Resolve-Path (Join-Path -Path $DllPath -ChildPath 'log4net.dll')
[Void][Reflection.Assembly]::LoadFile($DllFile)
#####################################################################################################################
#FileAppender
#
#Define Values for FileAppender Configuration 
$Pattern = '[%date{yyyy-MM-dd HH:mm:ss.fff} (%utcdate{yyyy-MM-dd HH:mm:ss.fff})] [%level] [%message]%n'
$PatternLayout = [log4net.Layout.ILayout](new-object log4net.Layout.PatternLayout($Pattern))

$LogPath = ([System.IO.Directory]::GetParent($MyInvocation.MyCommand.Path)).FullName
$LogFile = Join-Path -Path $LogPath -ChildPath $('LogFile_{0:yyyy-MM-dd}_{0:HH-mm-ss}.log' -f (Get-Date))

$AppendToFile = $True

#Load FileAppender Configuration
$FileAppender = new-object log4net.Appender.FileAppender($PatternLayout,$LogFile,$AppendToFile);
$FileAppender.Threshold = [log4net.Core.Level]::All
[log4net.Config.BasicConfigurator]::Configure($FileAppender)
#####################################################################################################################
#ColoredConsoleAppender
#
#Define Values for ColoredConsoleAppender Configuration 
$Pattern = '[%date{yyyy-MM-dd HH:mm:ss.fff}] %message%n'
$PatternLayout = [log4net.Layout.ILayout](new-object log4net.Layout.PatternLayout($Pattern))
$ColoredConsoleAppender = new-object log4net.Appender.ColoredConsoleAppender($PatternLayout)

$ColoredConsoleAppenderLevelAndColors = new-object log4net.Appender.ColoredConsoleAppender+LevelColors

$ColoredConsoleAppenderLevelAndColors.Level = [log4net.Core.Level]::Debug
$ColoredConsoleAppenderLevelAndColors.ForeColor = [log4net.Appender.ColoredConsoleAppender+Colors]::Green
$ColoredConsoleAppender.AddMapping($ColoredConsoleAppenderLevelAndColors)

$ColoredConsoleAppenderLevelAndColors.level = [log4net.Core.Level]::Info
$ColoredConsoleAppenderLevelAndColors.ForeColor = [log4net.Appender.ColoredConsoleAppender+Colors]::White
$ColoredConsoleAppender.AddMapping($ColoredConsoleAppenderLevelAndColors)

$ColoredConsoleAppenderLevelAndColors.level=[log4net.Core.Level]::Warn
$ColoredConsoleAppenderLevelAndColors.ForeColor=[log4net.Appender.ColoredConsoleAppender+Colors]::Yellow
$ColoredConsoleAppender.AddMapping($ColoredConsoleAppenderLevelAndColors)

$ColoredConsoleAppenderLevelAndColors.level=[log4net.Core.Level]::Error
$ColoredConsoleAppenderLevelAndColors.ForeColor=[log4net.Appender.ColoredConsoleAppender+Colors]::Red
$ColoredConsoleAppender.AddMapping($ColoredConsoleAppenderLevelAndColors)

$ColoredConsoleAppenderLevelAndColors.level=[log4net.Core.Level]::Fatal
$ColoredConsoleAppenderLevelAndColors.ForeColor=[log4net.Appender.ColoredConsoleAppender+Colors]::HighIntensity -bxor [log4net.Appender.ColoredConsoleAppender+Colors]::Red
$ColoredConsoleAppender.AddMapping($ColoredConsoleAppenderLevelAndColors)

$ColoredConsoleAppender.ActivateOptions()

#Load FileAppender Configuration
$ColoredConsoleAppender.Threshold = [log4net.Core.Level]::All
[log4net.Config.BasicConfigurator]::Configure($ColoredConsoleAppender)
#####################################################################################################################
$Log = [log4net.LogManager]::GetLogger("root")
$Log.Debug(‘Debug message.’)
$Log.Info(‘Info message.’)
$Log.Warn(‘Warn message.’)
$Log.Error(‘Error message.’)
$Log.Fatal(‘Fatal message.’)
[log4net.LogManager]::ResetConfiguration()
geek_01
  • 495
  • 4
  • 9