rebus log4net имеет неправильную дату

Когда я создаю исключение в обработчике для типа сообщения, это исключение регистрируется с UTCDate, однако это должна быть дата компьютера.

Странно то, что он регистрирует его правильно, а затем регистрирует неправильно, поэтому в файл добавляется несколько сообщений журнала. Это не нужно!

Правильное время в журнале ниже 2014-02-18 14:... и неправильное время 18-02-2014 13:.... Мне не нужен журнал с неправильным временем Журнал:

2014-02-18 14:08:43,616 WARN Rebus 1 worker 1 Rebus.Bus.RebusBus - User exception in Rebus 1 worker 1: System.IO.IOException: Error writing to file ---> System.UnauthorizedAccessException: Access to the path 'X' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at X.Y(X X, X X, X X) in X:line 538
   --- End of inner exception stack trace ---
   at X.Y(X X, X X, X X) in X:line 546
   at Rebus.Bus.Dispatcher.DispatchToHandler[TMessage](TMessage message, IHandleMessages`1 handler)

18-02-2014 13:08:43:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.IOException: Error writing to file ---> System.UnauthorizedAccessException: Access to the path 'X' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at X.Y(X X, X X, X X) in X:line 538
   --- End of inner exception stack trace ---
   at X.Y(X X, X X, X X) in X:line 546
   at Rebus.Bus.Dispatcher.DispatchToHandler[TMessage](TMessage message, IHandleMessages`1 handler)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Rebus.Bus.Dispatcher.Dispatch[TMessage](TMessage message)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at Rebus.Bus.Worker.DoTry()
   at Rebus.Bus.Worker.TryProcessIncomingMessage()
   at Rebus.Bus.Worker.MainLoop()

Лог4NetКонфигурация:

<log4net>
    <logger name="NHibernate">
      <level value="ERROR" />
    </logger>
    <logger name="NHibernate.SQL">
      <level value="ERROR" />
    </logger>
    <!-- The DebugFileAppender writes all messages to a log file-->
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
      <file value="X" />
      <appendToFile value="true" />
      <maximumFileSize value="10000KB" />
      <maxSizeRollBackups value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level %thread %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <forecolor value="Red" />
      </mapping>
      <mapping>
        <level value="DEBUG" />
        <forecolor value="Yellow" />
      </mapping>
      <mapping>
        <level value="INFO" />
        <forecolor value="White" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionpattern value="%date [%thread] %logger %-5level - %message%newline" />
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <!--<param name="LogName" value="X" />-->
      <param name="ApplicationName" value="X" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %newline %type %newline %method %newline %message %newline %exception" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="WARN" />
        <levelMax value="FATAL" />
      </filter>
    </appender>
    <root>
      <!-- add other appenders here and the log messages will be sent to every listed appender -->
      <appender-ref ref="EventLogAppender" />
      <appender-ref ref="RollingFile" />
      <appender-ref ref="ColoredConsoleAppender" />
    </root>
  </log4net>

Настройка логирования ребуса:

var rebusConfigurer = Configure.With(new WindsorContainerAdapter(container))
    .Logging(l => l.Log4Net()).Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
    .MessageOwnership(o => o.FromRebusConfigurationSection())
    .X(s => s.StoreInSqlServer(() => (SqlConnection)container.Resolve<ISession>().Connection, "X", "X"))
    .SpecifyOrderOfHandlers(s => s.Use(new MyMessageHandlerInspector()));

Исключение поймано Ребусом

throw new IOException("Error writing to file", exception);

Как предотвратить или настроить, как ребус регистрирует это? Как видно из лога, часть логирования ребуса идет нормально, а часть нет.


person Casper Thule Hansen    schedule 18.02.2014    source источник


Ответы (1)


Дело в том, что Rebus отслеживает перехваченные исключения, включая их временные метки между повторными попытками, что достигается путем хранения списка экземпляров Timed<Exception>, и он используется для инициализации каждого экземпляра DateTime.UtcNow.

Я изменил его в Rebus 0.57.0, чтобы использовать DateTime.Now, потому что я согласен с вами, что это не имеет смысла - или, по крайней мере, это выглядит довольно странно рядом с временными метками Log4Net :)

person mookid8000    schedule 18.02.2014