Используя многопоточный C # с консольным приложением .NET, в настоящее время я использую NLog для входа в файл и базу данных. Я пишу в несколько разных файлов журнала в зависимости от того, какое «хранилище» обрабатывает транзакцию. Я делаю это, добавляя file targets
вот так:
var targetFileName = Path.Combine(Path.GetDirectoryName(fileName),
string.Format("{0}-{1}{2}", Path.GetFileNameWithoutExtension(fileName), name, Path.GetExtension(fileName)));
var target =
new FileTarget
{
FileName = targetFileName,
Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss.fff}|${level}|${threadid}|${logger}|${event-properties:item=StoreID}|${message}${exception:format=tostring}"
};
//Add async wrapper here
var asyncWrapper = new AsyncTargetWrapper
{
WrappedTarget = target,
QueueLimit = 20000,
OverflowAction = AsyncTargetWrapperOverflowAction.Discard
};
//Create rule
var rule = new LoggingRule(name, LogLevel.Trace, asyncWrapper);
LogManager.Configuration.LoggingRules.Add(rule);
//Add target
LogManager.Configuration.AddTarget(name, asyncWrapper);
//Tell logmanager to reconfigure itself
LogManager.ReconfigExistingLoggers();
Затем я могу использовать LogManager.GetLogger(name)
для извлечения регистратора.
В моем NLog.config я также захожу в базу данных <target name="Database" xsi:type="Database">
Я запускаю свое приложение и закрываю его каждый день. Используя файловые цели, я могу легко создавать файлы каждый день, создавая новый FileTarget
.
Есть ли способ сделать то же самое с базой данных? Конечно, его нужно было бы как-то создать с некоторым кодом инициализации ... но я не вижу документации для добавления чего-либо, кроме цели "file".
В идеале, я бы создавал новую базу данных каждый день (каждый раз, когда я запускаю) с именем файла, показывающим, в какой день она работала (так же, как я делал выше с FileTarget).