регистриране на проследяване на стека с регистратор

Използвам блок за приложение за регистриране с C#.Net 2.0. Моят код регистрира информацията за грешка в плосък файл. Зададох цялата необходима конфигурация в web.config като слушатели, формати и категории и т.н., както е описано в msdn, и работи добре. Но проблемът е, че не мога да поставя повече от 50 знака в свойството le.Message. В моя случай проследяването на стека е дълго повече от 500 знака, които искам да вляза в плоския файл, когато възникне грешка.

Има ли някакво ограничение за броя на знаците, които можем да поставим в Свойството на съобщението на обекта LogEntry? или има някакъв друг начин за регистриране на проследяването на стека в плоския файл на регистратора?

Ето простия код.

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);

конфигурационни настройки

<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>

Ето форматиращия инструмент, който използвах,

<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>

И ето го слушателят,

<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="" />

Категории

<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>

person Anil Soman    schedule 31.08.2010    source източник
comment
Можете ли да публикувате конфигурациите на слушателите и източниците?   -  person StingyJack    schedule 31.08.2010
comment
редактира публикацията ми с повече информация   -  person Anil Soman    schedule 31.08.2010
comment
Възможно ли е някакъв специален символ в проследяването на стека да блокира процеса на запис на файл? защото ако имам повече от 50 знака в проследяването на стека, самият файл не се създава? Това е само предположение...   -  person Anil Soman    schedule 31.08.2010
comment
Спрете да гадаете и разберете. Опитайте да регистрирате някои твърдо кодирани низове, след това погледнете какво има в трасирането на стека ви и вижте кой е първият незаписан знак. Имайте предвид, че промяната на конфигурациите на регистъра на събитията на Windows може да изисква рестартиране, за да се вземат промените (според документите).   -  person Greg D    schedule 31.08.2010
comment
Съгласен с Грег. Друго предложение ще бъде да премахнете слушателя на регистър на събития и да опитате само с файловия слушател.   -  person VinayC    schedule 31.08.2010


Отговори (2)


Доколкото ми е известно, няма такова ограничение за регистрационните съобщения. Как настройвате трасирането на стека към съобщението?

person VinayC    schedule 31.08.2010
comment
низ str = Съобщение: + exp.Message + Environment.NewLine + Stack Trace: + exp.StackTrace.ToString(); - person Anil Soman; 31.08.2010
comment
Написах отново целия си код от нулата и открих, че той работи и приема повече от 50 знака. Не знам как се проваляше преди това!!! Трябва да проверите внимателно проследяването на стека по това време.. - person Anil Soman; 01.09.2010

Ако приемем, че анализът ви е правилен (не е удобно за мен да проверявам отново в момента), обмисляли ли сте да създадете подклас за LogEntry, който няма ограниченията, срещу които се сблъсквате?

person Greg D    schedule 31.08.2010
comment
нищо подобно.. LogEntry е клас от пространството на имената Microsoft.Practices.EnterpriseLibrary.Logging - person Anil Soman; 31.08.2010
comment
Ако не е запечатано, пак можете да го подкласирате. Microsoft обикновено върши доста добра работа, като проектира своите публикувани класове по подходящ начин и за подкласове. Всъщност, като го потърсят, те вече са го подкласирали няколко пъти: msdn.microsoft.com/en-us/library/ - person Greg D; 31.08.2010
comment
благодаря за отговора и полезната информация... по някакъв начин започна да работи, след като пренаписах отново целия код. не знам как така! трябва да проверите старателно предишния текст за проследяване на стека - person Anil Soman; 01.09.2010