1

I have following code:

public class Log4NetSetup 
{
    public static void Setup()
    {

        #region log4net parameters

        AdoNetAppenderParameter logDate = new AdoNetAppenderParameter()
        {
            ParameterName = "@log_date",
            DbType = System.Data.DbType.DateTime,
            Layout = new RawTimeStampLayout()
        };

        AdoNetAppenderParameter thread = new AdoNetAppenderParameter()
        {
            ParameterName = "@thread",
            DbType = System.Data.DbType.String,
            Size = 255,
            Layout = (IRawLayout)new PatternLayout("%thread")
        };

        AdoNetAppenderParameter logLevel = new AdoNetAppenderParameter()
        {
            ParameterName = "@log_level",
            DbType = System.Data.DbType.String,
            Size = 50,
            Layout = (IRawLayout)new PatternLayout("%level")
        };

        AdoNetAppenderParameter logger = new AdoNetAppenderParameter()
        {
            ParameterName = "@logger",
            DbType = System.Data.DbType.String,
            Size = 255,
            Layout = (IRawLayout)new PatternLayout("%logger")
        };

        AdoNetAppenderParameter message = new AdoNetAppenderParameter()
        {
            ParameterName = "@message",
            DbType = System.Data.DbType.String,
            Size = 4000,
            Layout = (IRawLayout)new PatternLayout("%message")
        };

        AdoNetAppenderParameter exception = new AdoNetAppenderParameter()
        {
            ParameterName = "@exception",
            DbType = System.Data.DbType.String,
            Size = 2000,
            Layout = (IRawLayout)new ExceptionLayout()
        };

        #endregion


        AdoNetAppender dotNet = new AdoNetAppender()
        {
            BufferSize = 1,
            CommandType = System.Data.CommandType.Text,
            ConnectionType = "REDACTED",
            ConnectionString = "REDACTED",
            CommandText = "REDACTED",
        };


        dotNet.AddParameter(logDate);
        dotNet.AddParameter(thread);
        dotNet.AddParameter(logLevel);
        dotNet.AddParameter(logger);
        dotNet.AddParameter(message);
        dotNet.AddParameter(exception);

        dotNet.ActivateOptions();


        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

        hierarchy.Root.AddAppender(dotNet);
        hierarchy.Root.Level = Level.Debug;
        hierarchy.Configured = true;

        //log4net.Config.BasicConfigurator.Configure(dotNet);
        log4net.Config.BasicConfigurator.Configure(hierarchy);

    }
}

Then I run that in Global.Asax on startup.

This was working fine in a XML file, but when moving it to code it no longer wants to work.

I was moving this into code and followed many other ways to do this on SO. None of them seem to work in my situation.

How to configure log4net programmatically from scratch (no config)

and

Can you configure log4net in code instead of using a config file?

Cœur
  • 37,241
  • 25
  • 195
  • 267
kyurthich
  • 100
  • 1
  • 11

1 Answers1

2

Turns out there was an error, it was not causing a problem with the page though. There was a invalid cast with the following code:

AdoNetAppenderParameter thread = new AdoNetAppenderParameter()
        {
            ParameterName = "@thread",
            DbType = System.Data.DbType.String,
            Size = 255,
            Layout = (IRawLayout)new PatternLayout("%thread")
        };

Specifically:

Layout = (IRawLayout)new PatternLayout("%thread")

It needed to convert the type:

RawLayoutConverter rlc = new RawLayoutConverter();

AdoNetAppenderParameter thread = new AdoNetAppenderParameter()
        {
            ParameterName = "@thread",
            DbType = System.Data.DbType.String,
            Size = 255,
            Layout = (IRawLayout)rlc.ConvertFrom(new PatternLayout("%thread"))
        };
kyurthich
  • 100
  • 1
  • 11