Log4Net不显示准确的时间戳

时间:2018-03-24 15:08:00

标签: log4net

我使用Log4Net CSV appender记录基于Azure的Web应用程序:

我看到多个条目具有相同的时间戳 - 显然没有记录服务器上给定事件的实际时刻:

2018-03-19 21:59:52.000 OrderId: 191096  Starts to validate, multi: 
2018-03-19 21:59:52.000 OrderId: 191096  validation request:
2018-03-19 21:59:52.000 OrderId: 191096 passed validation. AuthKey:6128994
2018-03-19 21:59:52.000 OrderId: 191096 Single starts
2018-03-19 21:59:52.000 OrderId: 191096 submits: 
2018-03-19 21:59:52.000 SaveOrderChanges: 191096
2018-03-19 21:59:52.000 SaveOrderChanges: 191096

我原本以为可能需要将日志写入文件,而不是按字面意思生成条目,但除非我误读了上下文this answer indicates otherwise

显然我有一些配置错误。我的CSV是使用以下代码构建的:http://element533.blogspot.com/2010/05/writing-to-csv-using-log4net.html

Full appender:

  <appender name="CsvFileAppender" type="log4net.Appender.FileAppender">
    <file value="D:/home/logfiles/log4netCSV.log" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <appendToFile value="true"/>
    <threshold value="INFO" />
    <layout type=" myWeb.CsvPatternLayout, myWeb">
      <header value="DateTime,Thread,Level,Logger,Message,Exception&#13;&#10;" />
      <conversionPattern value="%date%newfield[%thread]%newfield %-5level%newfield% %property{Ip} _+ %aspnet-request{ASP.NET_SessionId} _+ %logger %newfield%message%newfield%exception%endrow" />
    </layout>
  </appender>

1 个答案:

答案 0 :(得分:0)

你的日期显示为很奇怪 2018-03-19 21:59:52.000

默认格式为Iso8601,second和milisec之间的分隔符为逗号:
https://github.com/apache/logging-log4net/blob/master/src/DateFormatter/Iso8601DateFormatter.cs#L26

我建议你使用明确的日期: %date{yyyy-MM-dd HH:mm:ss.fff}
此外,如果您需要CSV文件,则需要使用逗号分隔值:

<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.fff},[%thread],%level,..." />

更新

我刚在Azure上对此进行了测试,看看它是否有任何操作,并且显示正确:
http://swagger-net-test.azurewebsites.net/log4net.log
我有一个接一个的两个日志操作,它们确实显示不同的时间戳

DateTime,Thread,Level,Logger,Message
2018-04-08 13:19:48.658,[20],INFO,Swagger_Test.Controllers.LogController,Test1
2018-04-08 13:19:48.689,[20],ERROR,Swagger_Test.Controllers.LogController,Test2