2010-08-31 7 views
4

J'utilise le bloc Application de journalisation avec C# .Net 2.0. Mon code enregistre les informations d'erreur dans un fichier plat. J'ai placé toute la configuration requise dans web.config comme les écouteurs, les formateurs et les catégories, etc. comme décrit dans msdn et cela fonctionne très bien. Mais le problème est que je ne peux pas mettre plus de 50 caractères dans la propriété le.Message. Dans mon cas, la trace de la pile est longue de plus de 500 caractères et je veux me connecter au fichier plat en cas d'erreur.trace de pile de journalisation avec enregistreur

est-il une limite au nombre de charactors nous pouvons mettre à l'intérieur du message propriété d'objet logentry? ou existe-t-il un autre moyen de consigner la trace de la pile dans le fichier plat de l'enregistreur?

Voici le code simple.

LogEntry le = new LogEntry(); 
le.Categories.Add("ErrorsToEventLog"); 
le.Categories.Add("ErrorsToLogFile"); 
le.Title = "Error message"; 
le.TimeStamp = System.DateTime.Now; 
le.Severity = System.Diagnostics.TraceEventType.Error; 
le.Message = "<text of error's stack trace>"; 
Logger.write(le); 

paramètres de configuration

<configSections> 
<section name="loggingConfiguration" 
type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, 
Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=null" /> 

<section name="dataConfiguration" 
type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, 
Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=null" /> 
</configSections> 

Voici le formatter, je

<formatters> 
<add template="Timestamp: {timestamp} Message: {message}" 
type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, 
Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, 
Culture=neutral, PublicKeyToken=null" name="Text Formatter" /> 
</formatters> 

Et est ici l'auditeur,

<add fileName="Logs/ErrorLog_{Date}.log" 
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration. 
CustomTraceListenerData, 
Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, 
PublicKeyToken=null" traceOutputOptions="None" 
type="EnterpriseLibrary.Logging.Extensions.RollingFlatFileTraceListener, 
EnterpriseLibrary.Logging.Extensions, Version=1.0.0.0, Culture=neutral, 
PublicKeyToken=null" name="Custom TraceListener" initializeData="" /> 

Catégories

<categorySources> 
<add switchValue="All" name="ErrorsToEventLog"> 
<listeners> 
<add name="Formatted EventLog TraceListener" /> 
</listeners> 
</add> 
<add switchValue="All" name="ErrorsToLogFile"> 
<listeners> 
    <add name="Custom TraceListener" /> 
</listeners> 
</add> 
</categorySources> 
+0

Pouvez-vous poster les auditeurs et les sources configs? – StingyJack

+0

a modifié mon message avec plus d'info –

+0

Est-il possible qu'un charactor spécial dans la trace de la pile bloque le processus d'écriture du fichier? parce que si j'ai plus de 50 charactères dans la trace de pile, le fichier lui-même n'est pas créé? C'est juste une supposition ... –

Répondre

1

À ma connaissance, il n'y a pas de limite pour le message de journal. Comment définissez-vous la trace de la pile dans le message?

+0

chaîne str = "Message:" + exp.Message + Environment.NewLine + "Stack Trace:" + exp.StackTrace.ToString(); –

+0

J'ai réécrit tout mon code à partir de rien et j'ai constaté qu'il fonctionnait avec plus de 50 caractères. Je ne sais pas comment ça échouait auparavant !!! Besoin de vérifier la trace de la pile à ce moment-là à fond .. –

0

En supposant que votre analyse est correcte (ce n'est pas pratique pour moi de vérifier maintenant), avez-vous envisagé de créer une sous-classe pour LogEntry qui n'a pas les limites que vous utilisez?

+0

rien comme ça .. logentry est une classe d'espace de noms Microsoft.Practices.EnterpriseLibrary.Logging –

+0

S'il est pas étanche, vous pouvez toujours la sous-classer. Microsoft fait généralement du bon travail en concevant ses classes publiées de manière appropriée pour le sous-classement. En fait, en regardant vers le haut, ils ont déjà subclassed il une ou deux fois: http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.logging.logentry%28v=pandp.50%29 .aspx –

+0

merci pour la réponse et les informations utiles ... en quelque sorte, il a commencé à travailler après avoir réécrit tout le code. Je ne sais pas comment ça se fait! besoin de vérifier le texte de trace de la pile plus tôt –

Questions connexes