Intercepting Console Stdout and Stderr

DockerShim does not intercept any application-level logs by default. Any direct console output from application logic is passed straight through. It is possible to intercept console output as such:

static void Main(string[] args) => DockerShimRunner.Main(new DockerShimSettings(), context =>

  Console.WriteLine("Hello\nWorld!"); // Formatted and written to stdout as one line, not two

Please note that intercepted console outputs require the use of WriteLine. Code such as Console.Write("Hello World!\n") will write Hello World!\\n, not Hello World!\n, and will be interpreted as a log message that has not yet completed.

Redirected console output using DockerShimContext.LoggingConsoleStdout captures all writes, and when WriteLine is invoked, it sends the log string to DockerShimContext.LoggingFactory. If you specify a custom DockerShimSettings.LoggingFactory, then you can use this technique to redirect all Console.WriteLine calls to your own logging provider.