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