【发布时间】:2019-03-25 04:48:42
【问题描述】:
在 .NET 控制台应用程序中使用多线程 C#,我目前使用 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,每天轻松地创建文件。
有没有办法对数据库做同样的事情?它当然需要用一些初始化代码以某种方式创建......但我没有看到任何文档用于添加除了“文件”目标之外的任何内容。
理想情况下,我每天(每次运行)都会创建一个新数据库,文件名代表它运行的日期(就像我在上面使用 FileTarget 所做的那样)。
【问题讨论】:
-
c#,遵循代码优先原则,可以为您创建数据库。失败了,你可以用 sql 命令创建它。