NLog:按语法添加数据库目标(使用 AddTarget)



将多线程 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轻松地每天创建文件。

有没有办法对数据库做同样的事情? 当然,它需要以某种方式使用一些初始化代码创建......但我没有看到任何用于添加除"文件"目标以外的任何文档。

理想情况下,我每天都会创建一个新数据库(每次运行时(,文件名表示它运行的日期(就像我上面对 FileTarget 所做的那样(。

NLog中的所有内容都可以从配置文件(nlog.config(和代码中配置。

为此,您需要 DatabaseTarget(命名空间 NLog.Targets(。

属性的名称与 XML 属性匹配,因此文档位于此处:数据库目标。

小例子:

var config = new LoggingConfiguration();
config.AddRuleForAllLevels(new DatabaseTarget()
{
    ConnectionString = "MyConnectionString",
    CommandText = "INSERT .... ", //todo
    Parameters =
    {
        new DatabaseParameterInfo("@message", "${message}"),
        new DatabaseParameterInfo("@error", "${exception}"),
        new DatabaseParameterInfo("@date", "${date}"){ DbType = "DbType.Date"},
    }
});
LogManager.Configuration = config; // Apply config

最新更新