public RollingEmbeddedDatabaseAppender() { directory = Environment.CurrentDirectory; if(HttpContext.Current!=null) { directory = AppDomain.CurrentDomain.BaseDirectory; //this is apperantly required in order to work correctly under ASP.Net AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true); } m_usePreparedCommand = false; ReconnectOnError = true; CommandText = @"INSERT INTO Logs (Date, Thread, Level, Logger, Message, Exception) VALUES (@Date, @Thread, @Level, @Logger, @Message, @Exception)"; AdoNetAppenderParameter date = new AdoNetAppenderParameter(); date.DbType = DbType.DateTime; date.ParameterName = "@Date"; date.Layout = new RawTimeStampLayout(); AddParameter(date); AdoNetAppenderParameter thread = new AdoNetAppenderParameter(); thread.DbType = DbType.String; thread.ParameterName = "@Thread"; thread.Size = 255; thread.Layout = new Layout2RawLayoutAdapter(new PatternLayout("%thread")); AddParameter(thread); AdoNetAppenderParameter level = new AdoNetAppenderParameter(); level.DbType = DbType.String; level.ParameterName = "@Level"; level.Size = 50; level.Layout = new Layout2RawLayoutAdapter(new PatternLayout("%level")); AddParameter(level); AdoNetAppenderParameter logger = new AdoNetAppenderParameter(); logger.DbType = DbType.String; logger.ParameterName = "@Logger"; logger.Size = 512; logger.Layout = new Layout2RawLayoutAdapter(new PatternLayout("%logger")); AddParameter(logger); AdoNetAppenderParameter message = new AdoNetAppenderParameter(); message.DbType = DbType.String; message.ParameterName = "@Message"; message.Size = 2000; message.Layout = new Layout2RawLayoutAdapter(new PatternLayout("%message")); AddParameter(message); AdoNetAppenderParameter exception = new AdoNetAppenderParameter(); exception.DbType = DbType.String; exception.ParameterName = "@Exception"; exception.Size = 4000; exception.Layout = new Layout2RawLayoutAdapter(new PatternLayout("%exception")); AddParameter(exception); }