This is a Bad Idea, I know, but… I want to configure log4net programmatically from scratch with no config file. I’m working on a simple logging application for me and my team to use for a bunch of relatively small departmental applications we’re responsible for. I want them to all log to the same database. The logging application is just a wrapper around log4net with the AdoNetAppender preconfigured.
All of the applications are ClickOnce deployed, which presents a small problem with deploying the config file. If the config file were part of the core project, I could set its properties to deploy with the assembly. But it’s part of a linked application, so I don’t have the option of deploying it with the main application. (If that’s not true, somebody please let me know).
Probably because it’s a Bad Idea, there doesn’t seem to be much sample code available for programmatically configruating log4net from scratch. Here’s what I have so far.
Dim apndr As New AdoNetAppender() apndr.CommandText = 'INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)' apndr.ConnectionString = connectionString apndr.ConnectionType = 'System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' apndr.CommandType = CommandType.Text Dim logDate As New AdoNetAppenderParameter() logDate.ParameterName = '@log_date' logDate.DbType = DbType.DateTime logDate.Layout = New RawTimeStampLayout() apndr.AddParameter(logDate) Dim logLevel As New AdoNetAppenderParameter() logLevel.ParameterName = '@log_level' 'And so forth...
After configuring all the parameters for apndr, I at first tried this…
Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy) hier.Root.AddAppender(apndr)
It didn’t work. Then, as a shot in the dark, I tried this instead.
BasicConfigurator.Configure(apndr)
That didn’t work either. Does anybody have any good references on how to configure log4net programmatically from scratch with no config file?
One way I’ve done this in the past is to include the configuration file as an embedded resource, and just used log4net.Config.Configure(Stream).
That way, I could use the configuration syntax I was familiar with, and didn’t have to worry about getting a file deployed.