【问题标题】:NLog: Adding database targets grammatically (using AddTarget)NLog:以语法方式添加数据库目标(使用 AddTarget)
【发布时间】: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# nlog


【解决方案1】:

NLog 中的所有内容都可以通过配置文件 (nlog.config) 和代码进行配置。

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

属性的名称确实与 XML 属性匹配,所以文档在这里:Database target

小例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多