我正在使用 NLog 4.3.11 运行应用程序。NLog 有一个配置了日期列的数据库:
<target name="database" xsi:type="Database" dbProvider="System.Data.SqlClient" connectionStringName="${DbConnectionStringName}" commandText="INSERT INTO Log (Logged, Application, Class, Thread, LogLevel, Message, ExceptionDetails, ActivityId, LoggedInUser) Values (@Logged, @Application, @Class, @Thread, @LogLevel, @Message, @ExceptionDetails, @ActivityId, @LoggedInUser)">
<parameter name="@logged" layout="${date}" />
Run Code Online (Sandbox Code Playgroud)
该程序已针对具有各自日期格式的各种德语和英语(美国)Windows Server 2012 和 2016 安装进行了测试;在各种 SQL Server(完整版和快速版)2012、2014 和 2016 实例上都没有问题。日期已正确插入,并由 SSMS 以 ISO 格式正确显示:
2017-06-09 10:24:43.410
Run Code Online (Sandbox Code Playgroud)
然而,在一个系统上,月和日似乎互换了;SSMS 显示如下:
2017-09-06 10:20:43.200
Run Code Online (Sandbox Code Playgroud)
并且MONTH(Logged)也作为 返回9,所以我想我可以排除 SSMS 的问题。
系统也是德国的Server 2012系统,数据库是同一台服务器上的SQL Server Express 2012,系统上的日期格式也是默认的德国(dmY)。日期正确设置为 2017 年 6 月 9 日
可能是什么问题; 我怎么能告诉 NLog 以与格式无关的方式记录当前日期?
现在 NLog 支持类型化数据库参数。为此,您需要 NLog 4.6+。
例如使用:
<parameter name="@logged" layout="${date}" dbtype="DateTime" />
Run Code Online (Sandbox Code Playgroud)
从文档:
dbType - DbType 的值之一(例如“Int32”、“Decimal”、“DateTime”),或带有属性名称前缀的 DBType 值,例如“SqlDbType.NChar”会将属性“SqlDbType”设置为“ NChar”。另一个例子:带有 NpgsqlParameter 的“NpgsqlDbType.Json”。在 NLog 4.6 中引入
另一种选择是将日期值作为 ISO 8601 格式的值发送。
${date:format=O}
Run Code Online (Sandbox Code Playgroud)
由于来自 NLog 数据库目标的所有参数都是字符串值,因此使用正确的格式很重要。
| 归档时间: |
|
| 查看次数: |
1134 次 |
| 最近记录: |