.net - 带有 Entity Framework 连接字符串的 NLog?

标签 .net entity-framework connection-string nlog

我正在尝试使用 'Database' NLog target并希望 NLog 读取我的连接字符串,以避免在同一个配置文件中将其设置两次。问题是我有一个 Entity Framework-style connection string ,因此使用 connectionStringName 属性不起作用。

在 log4net 中,我可以使用 custom AdoNetAppender并自己提取连接字符串的适当部分。有没有办法自定义 NLog 的数据库目标,以便我可以传入适当样式的连接字符串?

最佳答案

这个问题可以通过在代码中配置日志目标轻松解决:

    private DatabaseTarget CreateDatabaseTarget()
    {
        var entityFrameworkConnection = ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString;
        var builder = new EntityConnectionStringBuilder(entityFrameworkConnection);
        var connectionString = builder.ProviderConnectionString;

        var target = new DatabaseTarget()
        {
            ConnectionString = connectionString,
            CommandText = @"insert into Log ([DateTime], [Message]) values (@dateTime, @message);",
            Parameters = {
                new DatabaseParameterInfo("@dateTime", new NLog.Layouts.SimpleLayout("${date}")), 
                new DatabaseParameterInfo("@message", new NLog.Layouts.SimpleLayout("${message}")), 
           }
        };
        return target;
    }

然后您可以使用 NLog 配置注册它:

var target = CreateDatabaseTarget();
LogManager.Configuration.AddTarget("databaseTarget", CreateDatabaseTarget());
LogManager.Configuration.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Warn, target));

但是,如果您愿意接受一些 Nuget 依赖项或者想要更完整的解决方案,您可以查看 NLog.MvcNLog.EntityFramework都有可用 nuget 包的存储库...

关于.net - 带有 Entity Framework 连接字符串的 NLog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135453/

相关文章:

.net - 登录前握手期间的 SqlException

c# - 如何在一个应用程序中加载不同版本的相同程序集?

unit-testing - 如何对(在内存中) Entity Framework 进行单元测试?

.net - 如何在 .net 中以编程方式设置连接字符串配置?

.net - Microsoft .NET 版本中的 LTS 和 GA 有什么区别?

c# - 在 transactionScope 中删除用户时超时

azure - 连接/添加数据库时将 ASP.NET Core 应用程序部署到 Azure 失败

c# - 在非 ASP.Net 应用程序中加密连接字符串

sql-server-2005 - 持久安全信息和集成安全之间的区别?

c# - Ionic.Zip 库无法提取 .rar 文件 C#