ведение трассировки стека с помощью регистратора

Я использую блок Logging Application с 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 + Трассировка стека: + 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