Как получить консольный вывод от сервиса C#?

Ошибка здесь:

if ($res[0] == 0)

$ res является объектом набора результатов. Предположительно, вы хотели использовать переменную $ row, которую вы использовали в предыдущей строке:

if ($row['aps'] == 0)
18
задан Mike Chess 14 October 2008 в 15:34
поделиться

6 ответов

Могут Вы для изменения служебного кода во всем ? Если так, использование Консоли. SetOut для записи в файл вместо этого был бы самой очевидной первой остановкой. Затем изменение в пользовании надлежащей библиотекой входа для следующего выпуска :)

30
ответ дан 30 November 2019 в 06:12
поделиться

У Вас есть набор опций; перенаправление консольного вывода в файл и пользование надлежащей библиотекой входа, как упомянуто являются двумя хорошими. Вот средняя опция: запишите в журнал событий.

EventLog log;
string logsource = "MyService";

// execute once per invocation
if (!System.Diagnostics.EventLog.SourceExists(logsource))
{
    System.Diagnostics.EventLog.CreateEventSource(
        logsource, "Application");
}
log = new EventLog();
log.Source = logsource;
log.Log = "Application";

// replace console logging with this
log.WriteEntry(message, EventLogEntryType.Information);

Затем ищут записи в журнале событий Приложения (Средства администрирования-> Event Viewer) где Источник = "MyService".

5
ответ дан 30 November 2019 в 06:12
поделиться

Я не использовал бы Консоль. WriteLine вообще от Сервиса Окна. Необходимо, вероятно, зарегистрировать эти ошибки к файлу журнала.

Другой способ сделать это так, чтобы несколько приложений могли использовать журналы, добавляет сообщения журнала очереди MSMQ.

3
ответ дан 30 November 2019 в 06:12
поделиться

В целом необходимо постараться не писать диагностическую информацию непосредственно в Консоль, журнал событий, MSMQ или в другом месте от кода приложения. Вместо этого назовите регистрирующийся API и используйте конфигурацию для перенаправления вывода везде, где Вы хотите.

, Например, Вы могли заменить всю Консоль. WriteLine Трассировкой. WriteLine (*). Затем можно перенаправить вывод к консоли, файлу или в другом месте путем изменения файла конфигурации приложения: например, для вывода к консоли используйте ConsoleTraceListener, что-то как:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="configConsoleListener"
             type="System.Diagnostics.ConsoleTraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
 </configuration>

При отладке, Вы получите свой вывод на консоли - на сайте для клиентов, Вы настроили бы его для перенаправления вывода трассировки в файл в журнал событий или подобный.

Еще лучше, используйте стороннюю платформу журналирования (я рекомендовал бы Log4Net), который даст Вам больше опций, чем Система. Диагностика. Трассировка.

(*) Трассировка. Писать/Прослеживать. WriteLine совпадают с Отладкой. Писать/Отлаживать. WriteLine, за исключением того, что последние только компилируются, если Отладочный символ определяется. Поэтому предпочтите, чтобы Трассировка Отладила, если Вы хотите, чтобы вывод был доступен в Сборках конечных версий.

12
ответ дан 30 November 2019 в 06:12
поделиться

использовать debug.writeline и использовать sysinternals debugview?

3
ответ дан 30 November 2019 в 06:12
поделиться

Я нашел этот пост в MSDN, который привязывает вывод консоли к форматированному текстовому полю, работал у меня очень быстро и легко.

Он переопределяет WriteLine и может быть расширенным, чтобы переопределить другие методы.

1
ответ дан 30 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: