public static void Log(ChessBoard cb, Exception e, bool systemExit) { try { // print to Console Console.WriteLine(e); // redirect Console var writer = new StringWriter(); Console.SetOut(writer); // print info Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Chess22kDotNet " + UciOut.GetVersion()); Console.WriteLine(); Console.WriteLine("start fen"); Console.WriteLine(StartFen); Console.WriteLine(); Console.WriteLine("crashed fen"); Console.WriteLine(cb); Console.WriteLine(); // print statistics Statistics.Print(); Console.Out.Flush(); // print exception Serilog.Log.Information(writer.ToString()); Serilog.Log.Error(e, "An exception occurred"); } catch (IOException ex) { Console.WriteLine(ex); } finally { if (systemExit) { Environment.Exit(1); } } }