I want to present my code for configuring the excellent log4net logging system without the help of xml-files.
The code uses three Appenders, the database logging is done to a Postgres-DB using the free Devart Posgres library. I use the common property "Commandline" to log the command line parameters additionally.
Imports log4net Imports log4net.Appender Imports log4net.Repository Imports log4net.Repository.Hierarchy Public Class clsLoggerConfiguration Public Shared Sub initLogging() Dim l As log4net.Repository.Hierarchy.Logger Dim s As String Try s = String.Join(";", Environment.GetCommandLineArgs) log4net.GlobalContext.Properties.Item("Commandline") = s l = CType(LogManager.GetRepository, Hierarchy).Root l.AddAppender(myGetColoredConsoleAppender()) l.AddAppender(myGetRollingFileAppender()) l.AddAppender(myGetAdoNetAppender()) l.Repository.Configured = True Catch ex As Exception myErrorHandler(ex) End Try End Sub Private Shared Function myGetAdoNetAppender() As AdoNetAppender Dim lAppender As AdoNetAppender = Nothing Dim sSQL As String Dim p As AdoNetAppenderParameter Try sSQL = "INSERT INTO applog (" sSQL &= "fld_date, " sSQL &= "fld_thread, " sSQL &= "fld_level, " sSQL &= "fld_logger, " sSQL &= "fld_message, " sSQL &= "fld_method, " sSQL &= "fld_class, " sSQL &= "fld_exception, " sSQL &= "fld_context, " sSQL &= "fld_pcname, " sSQL &= "fld_username, " sSQL &= "fld_startparameter " sSQL &= ") VALUES (" sSQL &= "@date, " sSQL &= "@thread, " sSQL &= "@level, " sSQL &= "@logger, " sSQL &= "@message, " sSQL &= "@method, " sSQL &= "@class, " sSQL &= "@exception, " sSQL &= "@context, " sSQL &= "@pcname, " sSQL &= "@username, " sSQL &= "@startparameter " sSQL &= ")" lAppender = New AdoNetAppender() lAppender.Name = "Database" lAppender.Threshold = log4net.Core.Level.Info lAppender.ConnectionString = g_DBLayer.getConnectionstring lAppender.ConnectionType = "Devart.Data.PostgreSql.PgSqlConnection, Devart.Data.PostgreSql, Version=4.55.37.0, Culture=neutral, PublicKeyToken=09af7300eec23701" lAppender.CommandText = sSQL lAppender.BufferSize = 1 p = New AdoNetAppenderParameter p.ParameterName = "@date" p.DbType = DbType.DateTime p.Layout = New Layout.RawTimeStampLayout lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@thread" p.DbType = DbType.String p.Size = 32 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%t")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@level" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%p")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@logger" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%c")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@message" p.DbType = DbType.String p.Size = 4000 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%m")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@method" p.DbType = DbType.String p.Size = 200 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%M")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@class" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%C{1}")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@exception" p.DbType = DbType.String p.Size = 4000 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.ExceptionLayout) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@context" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%x")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@pcname" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%property{log4net:HostName}")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@username" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%username")) lAppender.AddParameter(p) p = New AdoNetAppenderParameter p.ParameterName = "@startparameter" p.DbType = DbType.String p.Size = 512 p.Layout = New Layout.Layout2RawLayoutAdapter(New Layout.PatternLayout("%property{Commandline}")) lAppender.AddParameter(p) lAppender.ActivateOptions() Catch ex As Exception myErrorHandler(ex) End Try Return lAppender End Function Private Shared Function myGetColoredConsoleAppender() As ColoredConsoleAppender Dim lAppender As ColoredConsoleAppender = Nothing Dim sLayout As String Dim m As Appender.ColoredConsoleAppender.LevelColors Try sLayout = "%date{dd-MM-yyyy HH:mm:ss,fff} %-5level %-30.30C{1} %-30.30M %m %exception %newline" lAppender = New ColoredConsoleAppender() lAppender.Name = "Console" lAppender.Layout = New log4net.Layout.PatternLayout(sLayout) lAppender.Threshold = log4net.Core.Level.All m = New Appender.ColoredConsoleAppender.LevelColors m.ForeColor = ColoredConsoleAppender.Colors.Red m.Level = log4net.Core.Level.Fatal lAppender.AddMapping(m) m = New Appender.ColoredConsoleAppender.LevelColors m.ForeColor = ColoredConsoleAppender.Colors.Red m.Level = log4net.Core.Level.Error lAppender.AddMapping(m) m = New Appender.ColoredConsoleAppender.LevelColors m.ForeColor = ColoredConsoleAppender.Colors.Yellow m.Level = log4net.Core.Level.Warn lAppender.AddMapping(m) m = New Appender.ColoredConsoleAppender.LevelColors m.ForeColor = ColoredConsoleAppender.Colors.Cyan m.Level = log4net.Core.Level.Info lAppender.AddMapping(m) m = New Appender.ColoredConsoleAppender.LevelColors m.ForeColor = ColoredConsoleAppender.Colors.Green m.Level = log4net.Core.Level.Debug lAppender.AddMapping(m) lAppender.ActivateOptions() Catch ex As Exception myErrorHandler(ex) End Try Return lAppender End Function Private Shared Function myGetRollingFileAppender() As RollingFileAppender Dim lAppender As RollingFileAppender = Nothing Dim sFile As String Dim sLayout As String Try sLayout = "%date{dd-MM-yyyy HH:mm:ss,fff} %-5level %-30.30C{1} %-30.30M %m %exception %newline" sFile = Application.StartupPath & "\Log\myLog.txt" lAppender = New RollingFileAppender() lAppender.Name = "RollingFile" lAppender.AppendToFile = True lAppender.File = sFile lAppender.Layout = New log4net.Layout.PatternLayout(sLayout) lAppender.Threshold = log4net.Core.Level.Info lAppender.RollingStyle = RollingFileAppender.RollingMode.Size lAppender.MaxSizeRollBackups = 10 lAppender.MaximumFileSize = "1MB" lAppender.StaticLogFileName = True lAppender.ActivateOptions() Catch ex As Exception myErrorHandler(ex) End Try Return lAppender End Function End Class
Comments wellcome!