小编典典

Console.WriteLine 在 ASP.NET 中的位置在哪里?

all

在 J2EE 应用程序(如在 WebSphere 中运行的应用程序)中,当我使用 时System.out.println(),我的文本会进入标准输出,由
WebSphere 管理控制台映射到一个文件。

在 ASP.NET 应用程序(如在 IIS
中运行的应用程序)中,输出Console.WriteLine()到哪里去?IIS进程必须有stdin、stdout和stderr;但是 stdout
是否映射到 /dev/null 的 Windows 版本,还是我在这里遗漏了一个关键概念?

不是在问 我是否应该在那里登录(我使用
log4net),但输出到哪里去了?我最好的信息来自这个讨论,他们说Console.SetOut()可以更改TextWriter,但它仍然没有回答关于控制台的初始值是什么的问题,或者如何在运行时代码的配置/外部设置它。


阅读 129

收藏
2022-04-01

共1个答案

小编典典

如果您查看.NET
Reflector
Console中的类,您会发现如果一个进程没有关联的控制台,并且由(包装在
a中)支持,这是一个基本忽略所有输入的虚拟实现,并且没有输出。Console.Out``Console.Error``Stream.Null``TextWriter``Stream

所以它在概念上等同于/dev/null,但实现更加精简:没有实际的 I/O 发生在 null 设备上。

此外,除了调用之外SetOut,没有办法配置默认值。

2020-11-02 更新 :由于这个答案在 2020 年仍在收集投票,​​可能应该注意的是,在 ASP.NET Core 下,通常
附加一个控制台。您可以配置ASP.NET Core IIS 模块stdoutLogEnabled以通过和设置将所有
stdout 和 stderr 输出重定向到日志文件stdoutLogFile

<system.webServer>
  <aspNetCore processPath="dotnet"
              arguments=".\MyApp.dll"
              hostingModel="inprocess"
              stdoutLogEnabled="true"
              stdoutLogFile=".\logs\stdout" />
<system.webServer>
2022-04-01