Это не вопрос, а ответ, который, надеюсь, поможет другим людям.
Те, кто ранее писал службу Windows, знают, в какой миссии можно найти ошибку, особенно если это происходит только в живой среде. В моем случае у меня была служба, которая работала гладко в течение нескольких часов, а затем упала из-за ошибки. Нет трассировки стека. Удачи найти иглу в стоге сена.
Служба действительно создавала файл журнала, и код был завален записью журнала, но, как было указано, было создано файлы журнала размером 500 МБ! Вы едва могли открыть файл, не считая его анализа. Но как вы обошли эту проблему? Вы можете попытаться создать файлы журналов с меньшей информацией или автоматически удалить старые записи журналов, поскольку новые записи записываются, но затем вы теряете важный контекст ошибки.
Решение - это файл журнала, который будет отслеживать циклы в вашем коде и автоматически удалять записи журнала для каждой успешной итерации этого цикла. Таким образом, вы можете поддерживать файл с задержанным долгом, который остается относительно небольшим одновременно. Когда ваш сервис ломается, ваш файл журнала скажет вам, где именно произошло, плюс весь необходимый контекст, чтобы объяснить, как и почему это произошло.
Вы можете загрузить этот генератор журнала из http://sourceforge.net/projects/smartl/files/?source=navbar. Это самостоятельный класс и все его методы статичны. Примерный класс, чтобы показать вам, как правильно использовать методы ведения журнала:
public void ExampleMethod()
{
SmartLog.EnterMethod("ExampleMethod()");
try
{
SmartLog.Write("Some code happening before the loop");
Guid exampleLoopID = SmartLog.RegisterLoop("exampleLoopID");
for (int i = 0; i < 10; i++)
{
SmartLog.IncrementLoop(exampleLoopID);
SmartLog.Write("Some code happening inside the loop.");
}
SmartLog.CompleteLoop(exampleLoopID);
SmartLog.Write("Some code happening after the loop.");
SmartLog.LeaveMethod("ExampleMethod()");
}
catch (Exception ex)
{
SmartLog.WriteException(ex);
SmartLog.LeaveMethod("ExampleMethod()");
throw;
}
}
Убедитесь, что ваше приложение имеет доступ на чтение и запись в своей корневой папке.
Если вы выполняете код и вы его разбиваете в цикле, файл журнала будет выглядеть примерно так:
. ENTER METHOD: FirstMethod()
some code happening here.
Calling a different method:
. . ENTER METHOD: ExampleMethod()
some code happening before the loop.
LOOP: doWorkLoopID [4135a8ed-05b7-45de-b887-b2ab3c638faa] - CURRENT ITERATION: 20
some code happening inside the loop.
Как только цикл будет завершен, его содержимое будет удалено, и ваш файл журнала будет выглядеть следующим образом:
. ENTER METHOD: FirstMethod()
some code happening here.
Calling a different method:
. . ENTER METHOD: ExampleMethod()
some code happening before the loop.
LOOP: doWorkLoopID [4135a8ed-05b7-45de-b887-b2ab3c638faa] - TOTAL ITERATIONS: 22
some code happening after the loop.
. . LEAVING METHOD: ExampleMethod()
some code happening here.
some code happening here.
. LEAVING METHOD: FirstMethod()
Надеюсь, это поможет кому-то решить эту проблему, которая в противном случае могла занять недели. Он наверняка помогло.