如何在运行时更改NLog目标的连接字符串?

弗拉基米尔

在我的WebAPI应用程序中,我试图Application_BeginRequest根据我的自定义标头值登录到几个单独的数据库中

为了实现这个目标我试图修改targetNlog.config,像这样:

<target name="database" 
        xsi:type="Database" 
        connectionString="${gdc:item=myConnectionstring}" 
        commandText="..sql command..">..params..</target>

Application_BeginRequest我试图这样设置myConnectionstring

GlobalDiagnosticsContext.Set("myConnectionString", connectionString);

但这不起作用,并且在NLog的internalLogFile错误中显示:

2015-02-19 12:12:48.8776 Error Error when writing to database System.InvalidOperationException: The ConnectionString property has not been initialized.
   at System.Data.SqlClient.SqlConnection.PermissionDemand()
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at NLog.Targets.DatabaseTarget.OpenConnection(String connectionString)
   at NLog.Targets.DatabaseTarget.WriteEventToDatabase(LogEventInfo logEvent)
   at NLog.Targets.DatabaseTarget.Write(LogEventInfo logEvent)

我尝试将以下参数写入db(使用恒定连接字符串配置):

<parameter name="@cn" layout="${gdc:myConnectionstring}"/>
<parameter name="@cn1" layout="${gdc:item=myConnectionstring}"/>

但是它们似乎是空的,但是,当我调试WebApi Action时,该操作抛出了我希望写入数据库的错误,并GlobalDiagnosticsContext.Get("myConnectionString")返回了预期值。

我做错了什么?为什么我可以在中看到期望值,GlobalDiagnosticsContext.Get("myConnectionString")${gdc:item=myConnectionstring}解析为空字符串?

弗拉基米尔

找到了另一种方法来实现这一目标:

var databaseTarget = (DatabaseTarget)LogManager.Configuration.FindTargetByName("database");
databaseTarget.ConnectionString = connectionString;
LogManager.ReconfigExistingLoggers();

但是仍然不清楚为什么GlobalDiagnosticsContext东西不起作用..

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在运行时更改NLog规则目标?

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

使用连接字符串和精简程序时如何在运行时更改初始目录

来自分类Dev

在运行时使用连接字符串

来自分类Dev

Azure Web服务-在运行时更改数据库连接字符串

来自分类Dev

实体框架-在运行时更改连接字符串(需要解释)

来自分类Dev

在运行时更改连接字符串–这是正确的方法吗?

来自分类Dev

在EF 6中在运行时更改连接字符串

来自分类Dev

C#在运行时更改自定义连接字符串

来自分类Dev

EF6在运行时更改连接字符串

来自分类Dev

如何在运行时将字符串转换为代码

来自分类Dev

如何在运行时在Objective-C中查找字符串常量?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时将用户提供的字符串映射到对象属性?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时使用持有其名称的字符串访问常量字符串?

来自分类Dev

如何在运行时更改微调器的字符串数组如何在if语句中使用微调器的选定项目(eclipse中的Android)

来自分类Dev

自动将字符串解析为目标基本类型的方式(在运行时)

来自分类Dev

SQLite EF6在运行时以编程方式设置连接字符串

来自分类Dev

对于每个调用,在运行时将连接字符串传递给Entity Framework

来自分类Dev

在运行时设置数据库连接字符串

来自分类Dev

实体框架在运行时设置连接字符串

来自分类Dev

如何在运行时将字符串转换为其自身的带引号的版本?

来自分类Dev

如何在运行时将字符串数组存储到单个应用程序设置属性?

来自分类Dev

PyQt:在运行时转换模块字符串

来自分类Dev

尝试在运行时编辑字符串

Related 相关文章

  1. 1

    如何在运行时更改NLog规则目标?

  2. 2

    如何在运行时在EF7 Core中更改连接字符串?

  3. 3

    Castle和NLog在运行时更改连接字符串

  4. 4

    Castle和NLog在运行时更改连接字符串

  5. 5

    Dapper 在运行时更改连接字符串

  6. 6

    使用连接字符串和精简程序时如何在运行时更改初始目录

  7. 7

    在运行时使用连接字符串

  8. 8

    Azure Web服务-在运行时更改数据库连接字符串

  9. 9

    实体框架-在运行时更改连接字符串(需要解释)

  10. 10

    在运行时更改连接字符串–这是正确的方法吗?

  11. 11

    在EF 6中在运行时更改连接字符串

  12. 12

    C#在运行时更改自定义连接字符串

  13. 13

    EF6在运行时更改连接字符串

  14. 14

    如何在运行时将字符串转换为代码

  15. 15

    如何在运行时在Objective-C中查找字符串常量?

  16. 16

    如何在运行时将java中的字符串参数作为参数传递

  17. 17

    如何在运行时将用户提供的字符串映射到对象属性?

  18. 18

    如何在运行时将java中的字符串参数作为参数传递

  19. 19

    如何在运行时使用持有其名称的字符串访问常量字符串?

  20. 20

    如何在运行时更改微调器的字符串数组如何在if语句中使用微调器的选定项目(eclipse中的Android)

  21. 21

    自动将字符串解析为目标基本类型的方式(在运行时)

  22. 22

    SQLite EF6在运行时以编程方式设置连接字符串

  23. 23

    对于每个调用,在运行时将连接字符串传递给Entity Framework

  24. 24

    在运行时设置数据库连接字符串

  25. 25

    实体框架在运行时设置连接字符串

  26. 26

    如何在运行时将字符串转换为其自身的带引号的版本?

  27. 27

    如何在运行时将字符串数组存储到单个应用程序设置属性?

  28. 28

    PyQt:在运行时转换模块字符串

  29. 29

    尝试在运行时编辑字符串

热门标签

归档