EnterpriseLibrary.Logging écrit les journaux avec une différence d’une heure

nous rencontrons un problème étrange avec la journalisation. Nous utilisons la bibliothèque Microsoft.Practices.EnterpriseLibrary.Logging pour vous connecter à notre application Web. Le problème est qu’elle écrit le journal avec un décalage de 1 heure par rapport à l’heure système actuelle.

Notre enregistreur est basé sur cet article et l’heure dans une entrée de journal n’est jamais définie dans le code par nous. Chaque entrée de journal a un titre qui ressemble à ceci:

MainLogSource Information: 0 : Timestamp: 11/04/2011 10:15:32 donc cet horodatage toujours 1 heure plus tôt que l’heure système (par exemple, cette entrée est apparue à 11h15).

Où peut être le problème? Merci

Par défaut, les journaux Enterprise Library utilisent l’horodatage UTC, ils ne sont donc pas affectés par l’heure avancée.

Vous pouvez modifier le formateur dans le fichier .config pour utiliser l’heure locale (voir la question ci-jointe), mais sachez que cela entraînera des entrées en double lorsque des changements d’heure ont lieu.

Enterprise Library 5.0 – Journalisation d’applications – DateTime incorrect

L’ignorance culturelle d’un côté de la comparaison?

Comme dans: l’enregistreur écrit l’heure en UTC et vous le comparez à l’heure du système local et vous l’avez réglé à une différence d’une heure? L’Europe centrale, par exemple, a une heure d’avance sur l’heure UTC (la moitié de l’année).

Quels sont vos parameters régionaux? C’est un phénomène assez courant. Fondamentalement, être des enregistreurs comparables, etc. LOVE régler les choses en UTC, et vous devriez le faire aussi. Je connais des entresockets qui exploitent les serveurs en heure UTC, il est donc plus facile de comparer les journaux à l’horloge système (au prix de l’horloge système toujours éteinte).

Ceci est probablement dû au fait que EntLib enregistre par défaut les horodatages au format UTC. Vous pouvez remplacer ceci voir ici

Définissez la propriété TimeStamp de la classe LogEntry dans votre code. Vous pouvez le régler à votre heure locale. Cela reflétera aux deux endroits: TimeStamp et ExtendedProperties. Comme ci-dessous:

  var newLog = new LogEntry(objException.Message, "General", 1, 1, TraceEventType.Error, "YourApp", null); newLog.TimeStamp = DateTime.Now; 

Il y a plusieurs possibilités qui me viennent à l’esprit:

  • L’horloge sur laquelle chaque machine exécute l’application n’a pas été réglée pour l’heure d’été.

  • Lorsque vous obtenez l’heure, vous demandez l’heure UTC plutôt que le fuseau horaire de l’environnement local actuel.