Früher heute habe ich eine Frage über die Konfiguration von log4net aus dem Code gestellt und bekam sehr schnell eine Antwort, die es mir ermöglichte, es für die Ausgabe in eine Textdatei zu konfigurieren. Seitdem haben sich meine Bedürfnisse geändert und ich muss SqLite als Appender verwenden. Also habe ich die folgende Klasse dies zu ermöglichen:log4net config SqLite in code
public static class SqLiteAppender
{
public static IAppender GetSqliteAppender(string dbFilename)
{
var dbFile = new FileInfo(dbFilename);
if (!dbFile.Exists)
{
CreateLogDb(dbFile);
}
var appender = new AdoNetAppender
{
ConnectionType = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite",
ConnectionString = String.Format("Data Source={0};Version=3;", dbFilename),
CommandText = "INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)"
};
appender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@Date",
DbType = DbType.DateTime,
Layout = new log4net.Layout.RawTimeStampLayout()
});
appender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@Level",
DbType = DbType.String,
Layout = new log4net.Layout.RawPropertyLayout { Key = "Level" }
});
appender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@Logger",
DbType = DbType.String,
Layout = new log4net.Layout.RawPropertyLayout { Key = "LoggerName" }
});
appender.AddParameter(new AdoNetAppenderParameter
{
ParameterName = "@Message",
DbType = DbType.String,
Layout = new log4net.Layout.RawPropertyLayout { Key = "RenderedMessage" }
});
appender.BufferSize = 100;
appender.ActivateOptions();
return appender;
}
public static void CreateLogDb(FileInfo file)
{
using (var conn = new SQLiteConnection())
{
conn.ConnectionString = string.Format("Data Source={0};New=True;Compress=True;Synchronous=Off", file.FullName);
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText =
@"CREATE TABLE Log(
LogId INTEGER PRIMARY KEY,
Date DATETIME NOT NULL,
Level VARCHAR(50) NOT NULL,
Logger VARCHAR(255) NOT NULL,
Message TEXT DEFAULT NULL
);";
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Close();
}
}
}
Das Problem ist, dass, obwohl die Datenbank erstellt wird und die Tabelle hinzugefügt, ich bin keine Protokollierung dieses bekommen.
ist die Klasse wie folgt verwendet:
BasicConfigurator.Configure(SqLiteAppender.GetSqliteAppender(applicationContext.GetLogFile().FullName));
jede Hilfe mich in der richtigen Richtung würde geschätzt zeigen.
Dank
Sie können diese Frage für eine Lösung überprüfen: http://StackOverflow.com/Questions/382336/log4net-and-System-Data-Sqlite –
@ Dillie-O - Mit Ausnahme dieser Frage verwendet XML, wenn Richard nach Code-Konfiguration sucht . – jfar