在J2EE应用程序(例如在WebSphere中运行的应用程序)中,当我使用System.out.println()时,我的文本将转换为标准输出,由WebSphere管理控制台映射到一个文件。
在ASP中。NET应用程序(像一个运行在IIS), Console.WriteLine()的输出去哪里?IIS进程必须有一个stdin, stdout和stderr;但是stdout映射到/dev/null的Windows版本还是我在这里错过了一个关键的概念?
我不是问我是否应该在那里记录日志(我使用log4net),而是问输出到哪里?我最好的信息来自于这个讨论,他们说Console. setout()可以改变TextWriter,但它仍然没有回答控制台的初始值是什么,或者如何在配置/运行时代码之外设置它的问题。
如果你看一下。net Reflector中的Console类,你会发现如果一个进程没有一个相关的控制台,Console。外出控制台。错误是由流支持的。Null(包装在TextWriter中),这是Stream的一个虚拟实现,基本上忽略所有输入,并且不提供输出。
因此,它在概念上等同于/dev/null,但实现更加简化:null设备没有实际的I/O发生。
此外,除了调用SetOut之外,没有办法配置默认值。
更新2020-11-02:由于这个答案在2020年仍在收集选票,可能应该注意的是,在ASP。NET Core,通常附带一个控制台。您可以配置ASP。NET Core IIS模块通过stdoutLogEnabled和stdoutLogFile设置将所有stdout和stderr输出重定向到日志文件:
<system.webServer>
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
hostingModel="inprocess"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" />
<system.webServer>