Как известно, исключения генератора направляются в StiLogService, который умеет сбрасывать
их в файл и в System.Diagnostics.Trace
Однако нередким является использовнание приложением своего логгера, реализующего требуемый регламент
обработки ошибок.
Хотелось бы иметь возможность прицепиться своим логгером к StiLogService (как угодно, например
подписаться на его событие или зарегистрировать своего листнера - не важно), главное
дотянуться до исключения, которое может быть сожрано генератором, но перед этим
направлено в StiLogService. Разумеется при этом надо видеть ошибка это или просто генератору
поговорить хочется...
Такие исключения есть, пример навскидку: у нас есть отчёты прекрасно работающие из-под XP и не работающие в 98,
при этом никаких сообщений об ошибках нет, бодро проходит прогресс формирования страниц и тишина, нет превью, нет ошибок,
а в лог при этом (если его включить) сбрасываются вполне конкретные исключения про ошибки рендеринга.
Однако глупо иметь свой единый логгер приложения, а ошибки генератора искать где-то в дебрях файловой системы,
хочется и их направить на путь истинный, а вот не предусмотрено это в StiLogService...
Уверен, что разработчики нас поддержат, фича полезная и не сложно реализуемая.
Посмотрите, на какие извраты приходится идти, чтобы реализовать это в существующей архитектуре генератора:
приходится включать в StiLogService трассировку, вешать своего листнера в глобальный трассировщик, потом
придумывать как отфильтровать нужные сообщения (а никак, кроме как по внешнему виду... ужос...)
и перенаправлять их уже куда надо...
Код: Выделить всё
System.Diagnostics.Trace.Listeners.Add(new ReportingTraceListener());
Stimulsoft.Report.StiLogService.TraceEnabled = true;
///
/// Слушатель событий трассировки, пытающийся выловить сообщения об ошибках генератора отчётов
/// и перенеправить их в стандартный лог приложения.
/// Временное решение, используемое в отсутствии поддержки CustomLog генератором отчётов.
///
public class ReportingTraceListener : System.Diagnostics.TraceListener
{
public override void Write(string message)
{
internalWriteLine(message);
}
public override void WriteLine(string message)
{
internalWriteLine(message);
}
private void internalWriteLine(string message)
{
if (isStiReportError(message))
{
PDPLog.Error(message); // 0) &&
(message.IndexOf("Method : [") > 0) &&
(message.IndexOf("====================================================") > 0);
}
}
Дорогие товарищи разработчики, учтите наше пожелание и сделайте
поддержку CustomLog в генераторе. Спасибо заранее.