NLog记录错误的日期

时间:2017-06-09 08:33:56

标签: c# date nlog

我正在使用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}" />

该程序已针对各种日期格式的德语和英语(美国)Windows Server 2012和2016安装进行了测试;在各种SQL Server(Full和Express)2012,2014和2016实例上没有问题。正确插入日期,并由SSMS以ISO格式正确显示:

2017-06-09 10:24:43.410

然而,在一个系统上,似乎交换了几个月和几天; SSMS显示如下:

2017-09-06 10:20:43.200

MONTH(Logged)也会以9的形式返回,所以我想我可以排除SSMS的问题。

系统也是德国服务器2012系统,数据库是同一服务器上的SQL Server Express 2012,系统上的日期格式也是默认德语(d.m.Y)。日期正确设置为2017年6月9日

enter image description here

可能是什么问题;我怎么能告诉NLog以格式无关的方式记录当前日期?

2 个答案:

答案 0 :(得分:2)

另一个选项是将日期值作为ISO 8601格式的值发送。

${date:format=O}

由于NLog数据库目标中的所有参数都是字符串值,因此使用正确的格式非常重要。

答案 1 :(得分:1)

使用命令

检查SQL Server选项
dbcc useroptions

您有一个名为dateformat的选项,此处应用了日期格式。 您可以使用GUI

更改此选项

SSMS - &gt;服务器属性 - &gt;高级选项卡 - &gt;默认语言

还使用SET DATEFORMAT命令

SET DATEFORMAT mdy;

另请查看此article了解详情