Я пытаюсь использовать SQLite с NLog, чтобы я мог хранить ведение журнала в базе данных SQLite, а не в плоском файле. Я последовал за хорошим учебным пособием, но даже тогда мой код не включен, работает как и ожидалось.Как использовать SQLite с NLog в .NET
Мой App.config
файл:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="SQLite" connectionString="Data Source=Log.db3;Version=3;" providerName="System.Data.SQLite" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
И это мой NLog.config файл
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File"
layout="${longdate} ${logger} ${message}"
fileName="${basedir}/logs/${shortdate}/${level}.txt"
keepFileOpen="false"/>
<target name="db" xsi:type="Database" keepConnection="false"
useTransactions="false"
dbProvider="System.Data.SQLite"
connectionString="Data Source=${basedir}\Log.db3;Version=3;"
commandText="INSERT into Log(Timestamp, Loglevel, Callsite, Message) values(@Timestamp, @Loglevel, @Callsite, @Message)">
<parameter name="@Timestamp" layout="${longdate}"/>
<parameter name="@Loglevel" layout="${level:uppercase=true}"/>
<parameter name="@Callsite" layout="${callsite:filename=true}"/>
<parameter name="@Message" layout="${message}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="db" />
</rules>
</nlog>
И это мой код:
static class Program
{
static Logger log = LogManager.GetCurrentClassLogger();
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
EnsureDb();
log.Info("Logging like a boss");
Application.Run(new Form1());
}
catch (Exception ex)
{
throw;
}
}
private static void EnsureDb()
{
if (File.Exists("Log.db3"))
return;
using (SQLiteConnection connection = new SQLiteConnection(ConfigurationManager.ConnectionStrings["SQLite"].ToString()))
using (SQLiteCommand command = new SQLiteCommand(
"CREATE TABLE Log (Timestamp TEXT, Loglevel TEXT, Callsite TEXT, Message TEXT)",
connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
}
Я скопировал этот код из Интернета, но, к сожалению, он не работает , Файл log.db3 всегда создается, но запись журнала не доходит до таблицы журналов. Как я могу это исправить?
Что не работает? Получаете ли вы ошибку и т. Д.? – nemesv
нет я не получаю сообщение об ошибке, log.db3 созданный файл, но таблица журнала всегда пустой – Shax