В приложении J2EE (например, работающем в WebSphere), когда я использую System.out.println(), мой текст переходит в стандартный формат, который отображается в файл консолью администратора WebSphere.
Куда делаются выходные данные Console.WriteLine() в приложении ASP.NET (например, в приложении IIS)? У процесса IIS должны быть stdin, stdout и stderr; но сопоставлен ли стандартный вывод с версией / dev / null для Windows, или мне здесь не хватает ключевой концепции?
Я не спрашиваю, должен ли я там регистрироваться (я использую log4net), но куда выводятся результаты? Моя лучшая информация была получена из этого обсуждения, где они сказали Console.SetOut() может изменить TextWriter, но он все еще не ответил на вопрос о том, каково начальное значение консоли или как установить его в конфигурации / вне кода времени выполнения.
Фактически он перейдет в STDOUT рабочего процесса ASP.NET. Где это указано, я не уверен. FlySwat 26.09.2008
Вот вопрос - куда девается STDOUT? Kevin Hakanson 24.08.2009
видимо никто не знает, но все используют это в своих примерах. wtf Jason 26.08.2009
Если вы искали цели отладки, я бы сослался на ответ @Greg Bernhardt ниже. Ram 09.10.2015
@KevinHakanson FWIW все эти годы спустя stdout для любого процесса выбирается его родительским процессом, процессом, который его запустил. В этом случае родителем будет IIS. Это может указать вам правильное направление. jpaugh 25.10.2018
Если вы посмотрите на класс Console в .NET Reflector, вы обнаружите, что если процесс не имеет связанной консоли, Console.Out и Console.Error поддерживаются Stream.Null (заключены в TextWriter), что является фиктивной реализацией Stream, которая в основном игнорирует весь ввод и не дает вывода.
Таким образом, он концептуально эквивалентен /dev/null, но реализация более упрощена: фактического ввода-вывода с нулевым устройством не происходит.
Кроме того, кроме вызова SetOut, нет возможности настроить значение по умолчанию.
Обновление 2020-11-02: поскольку этот ответ все еще набирает голоса в 2020 году, вероятно, следует отметить, что в ASP.NET Core обычно есть прикрепленная консоль. Вы можете настроить ASP.NET Core IIS Модуль для перенаправления всего вывода stdout и stderr в файл журнала с помощью настроек stdoutLogEnabled и stdoutLogFile:
Если вы используете System.Diagnostics.Debug.WriteLine(...) вместо Console.WriteLine(), вы можете увидеть результаты в окне Вывод Visual Studio.
Ответ 3 · рейтинг 29 · Artur Carvalho
Я нашел этот вопрос, пытаясь изменить вывод журнала DataContext в окно вывода. Итак, для всех, кто пытается сделать то же самое, я создал следующее:
class DebugTextWriter : System.IO.TextWriter {
public override void Write(char[] buffer, int index, int count) {
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value) {
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding {
get { return System.Text.Encoding.Default; }
}
}
И после этого: dc.Log = new DebugTextWriter (), и я могу видеть все запросы в окне вывода (dc - это DataContext).
Взгляните на это для получения дополнительной информации: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers
Ответ 4 · рейтинг 18 · Chris
Если вы используете IIS Express и запускаете его из командной строки, окно DOS останется открытым. , и вы увидите там Console.Write операторов.
Предполагается, что у вас есть каталог веб-сайта в C: \ Projects \ Website1. Он запустит IIS Express и будет обслуживать страницы в каталоге вашего веб-сайта. Это оставит командные окна открытыми, и вы увидите там выходную информацию. Допустим, у вас есть файл default.aspx с таким кодом:
Расположите окна браузера и команд так, чтобы вы могли видеть их оба на экране. Теперь введите в свой браузер: http://localhost:1655/. Вы увидите Hello! на веб-странице, но в командном окне вы увидите что-то вроде
Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0
Я сделал это просто, разместив код в блоке кода в разметке, но любые операторы консоли в вашем коде -behind или где-либо еще в вашем коде также будет отображаться здесь.
Ответ 5 · рейтинг 9 · Nik
System.Diagnostics.Debug.WriteLine(...); помещает его в непосредственное окно в Visual Studio 2008.
Перейдите в меню Отладка -> Windows -> Немедленно:
Ответ 6 · рейтинг 6 · Craig Tyler
По умолчанию консоль просто не прослушивается. При работе в режиме отладки к нему подключена консоль, но в производственной среде, как вы и подозревали, сообщение просто никуда не отправляется, потому что ничего не слушает.
Ответ 7 · рейтинг 5 · Charles Graham
Если вы не находитесь в строгом консольном приложении, я бы не стал его использовать, потому что вы его действительно не видите. Я бы использовал Trace.WriteLine () для отладочной информации, которую можно включать и выключать в производственной среде.
Ответ 8 · рейтинг 3 · Brian Griffin
Объект TraceContext в ASP.NET записывает в DefaultTraceListener, который выводит в хост-процесс стандартный вывод. Вместо использования Console.Write(), если вы используете Trace.Write, вывод пойдет на стандартный вывод процесса.
Вы можете использовать объект System.Diagnostics.Process, чтобы получить процесс ASP.NET для вашего сайта и контролировать стандартный вывод с помощью события OutputDataRecieved.
Ответ 9 · рейтинг 1 · mickey
если вы использовали NLog в своем проекте ASP.net, вы можете добавить цель отладчика :
теперь у вас есть консольный вывод, как у Jetty в окне "Вывод" VS, и убедитесь, что вы работаете в режиме отладки (F5).
Ответ 10 · Chris Go
Когда дело касается IISExpress, это сбивает с толку всех. Консольные сообщения читать нечего. Так, например, в приложениях ASPCORE MVC он настраивается с помощью appsettings.json, который ничего не делает, если вы используете IISExpress.
Сейчас вы можете просто добавить loggerFactory.AddDebug (LogLevel.Debug); в разделе "Настройка", и он, по крайней мере, покажет вам ваши журналы в окне "Вывод отладки".