Option to log debug console output to a file. Closes #318
This commit is contained in:
@@ -67,7 +67,18 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
while (queuedMessages.Count > 0)
|
while (queuedMessages.Count > 0)
|
||||||
{
|
{
|
||||||
AddMessage(queuedMessages.Dequeue());
|
var newMsg = queuedMessages.Dequeue();
|
||||||
|
AddMessage(newMsg);
|
||||||
|
|
||||||
|
if (GameSettings.SaveDebugConsoleLogs)
|
||||||
|
{
|
||||||
|
unsavedMessages.Add(newMsg);
|
||||||
|
if (unsavedMessages.Count >= messagesPerFile)
|
||||||
|
{
|
||||||
|
SaveLogs();
|
||||||
|
unsavedMessages.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +162,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
while (queuedMessages.Count > 0)
|
while (queuedMessages.Count > 0)
|
||||||
{
|
{
|
||||||
AddMessage(queuedMessages.Dequeue());
|
var newMsg = queuedMessages.Dequeue();
|
||||||
|
AddMessage(newMsg);
|
||||||
|
|
||||||
|
if (GameSettings.SaveDebugConsoleLogs) unsavedMessages.Add(newMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -190,15 +190,16 @@ namespace Barotrauma
|
|||||||
sb.AppendLine("Last debug messages:");
|
sb.AppendLine("Last debug messages:");
|
||||||
for (int i = DebugConsole.Messages.Count - 1; i > 0; i--)
|
for (int i = DebugConsole.Messages.Count - 1; i > 0; i--)
|
||||||
{
|
{
|
||||||
sb.AppendLine(" " + DebugConsole.Messages[i].Time + " - " + DebugConsole.Messages[i].Text);
|
sb.AppendLine("[" + DebugConsole.Messages[i].Time + "] " + DebugConsole.Messages[i].Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sw.WriteLine(sb.ToString());
|
sw.WriteLine(sb.ToString());
|
||||||
sw.Close();
|
sw.Close();
|
||||||
|
|
||||||
CrashMessageBox( "A crash report (\"crashreport.txt\") was saved in the root folder of the game."+
|
if (GameSettings.SaveDebugConsoleLogs) DebugConsole.SaveLogs();
|
||||||
" If you'd like to help fix this bug, please post the report on the Undertow Games forums.");
|
|
||||||
|
CrashMessageBox( "A crash report (\"crashreport.log\") was saved in the root folder of the game."+
|
||||||
|
" If you'd like to help fix this bug, please post the report on Barotrauma's GitHub issue tracker: https://github.com/Regalis11/Barotrauma/issues/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -128,6 +128,10 @@ namespace Barotrauma
|
|||||||
//used for keeping track of the message entered when pressing up/down
|
//used for keeping track of the message entered when pressing up/down
|
||||||
static int selectedIndex;
|
static int selectedIndex;
|
||||||
|
|
||||||
|
private static List<ColoredText> unsavedMessages = new List<ColoredText>();
|
||||||
|
private static int messagesPerFile = 800;
|
||||||
|
public const string SavePath = "ConsoleLogs";
|
||||||
|
|
||||||
static DebugConsole()
|
static DebugConsole()
|
||||||
{
|
{
|
||||||
commands.Add(new Command("help", "", (string[] args) =>
|
commands.Add(new Command("help", "", (string[] args) =>
|
||||||
@@ -987,6 +991,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
commands.Add(new Command("togglekarma", "togglekarma: Toggles the karma system.", (string[] args) =>
|
commands.Add(new Command("togglekarma", "togglekarma: Toggles the karma system.", (string[] args) =>
|
||||||
{
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
if (GameMain.Server == null) return;
|
if (GameMain.Server == null) return;
|
||||||
GameMain.Server.KarmaEnabled = !GameMain.Server.KarmaEnabled;
|
GameMain.Server.KarmaEnabled = !GameMain.Server.KarmaEnabled;
|
||||||
}));
|
}));
|
||||||
@@ -2170,18 +2175,28 @@ namespace Barotrauma
|
|||||||
if (string.IsNullOrEmpty((msg))) return;
|
if (string.IsNullOrEmpty((msg))) return;
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
Messages.Add(new ColoredText(msg, color, isCommand));
|
var newMsg = new ColoredText(msg, color, isCommand);
|
||||||
|
Messages.Add(newMsg);
|
||||||
|
|
||||||
//TODO: REMOVE
|
//TODO: REMOVE
|
||||||
Console.ForegroundColor = XnaToConsoleColor.Convert(color);
|
Console.ForegroundColor = XnaToConsoleColor.Convert(color);
|
||||||
Console.WriteLine(msg);
|
Console.WriteLine(msg);
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
|
||||||
|
if (GameSettings.SaveDebugConsoleLogs)
|
||||||
|
{
|
||||||
|
unsavedMessages.Add(newMsg);
|
||||||
|
if (unsavedMessages.Count >= messagesPerFile)
|
||||||
|
{
|
||||||
|
SaveLogs();
|
||||||
|
unsavedMessages.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Messages.Count > MaxMessages)
|
if (Messages.Count > MaxMessages)
|
||||||
{
|
{
|
||||||
Messages.RemoveRange(0, Messages.Count - MaxMessages);
|
Messages.RemoveRange(0, Messages.Count - MaxMessages);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif CLIENT
|
#elif CLIENT
|
||||||
lock (queuedMessages)
|
lock (queuedMessages)
|
||||||
{
|
{
|
||||||
@@ -2276,5 +2291,51 @@ namespace Barotrauma
|
|||||||
isOpen = true;
|
isOpen = true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void SaveLogs()
|
||||||
|
{
|
||||||
|
if (unsavedMessages.Count == 0) return;
|
||||||
|
if (!Directory.Exists(SavePath))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(SavePath);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ThrowError("Failed to create a folder for debug console logs", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string fileName = "DebugConsoleLog_" + DateTime.Now.ToShortDateString() + "_" + DateTime.Now.ToShortTimeString() + ".txt";
|
||||||
|
var invalidChars = Path.GetInvalidFileNameChars();
|
||||||
|
foreach (char invalidChar in invalidChars)
|
||||||
|
{
|
||||||
|
fileName = fileName.Replace(invalidChar.ToString(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
string filePath = Path.Combine(SavePath, fileName);
|
||||||
|
if (File.Exists(filePath))
|
||||||
|
{
|
||||||
|
int fileNum = 2;
|
||||||
|
while (File.Exists(filePath + " (" + fileNum + ")"))
|
||||||
|
{
|
||||||
|
fileNum++;
|
||||||
|
}
|
||||||
|
filePath = filePath + " (" + fileNum + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.WriteAllLines(filePath, unsavedMessages.Select(l => "[" + l.Time + "] " + l.Text));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
unsavedMessages.Clear();
|
||||||
|
ThrowError("Saving debug console log to " + filePath + " failed", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static bool VerboseLogging { get; set; }
|
public static bool VerboseLogging { get; set; }
|
||||||
|
public static bool SaveDebugConsoleLogs { get; set; }
|
||||||
|
|
||||||
public GameSettings(string filePath)
|
public GameSettings(string filePath)
|
||||||
{
|
{
|
||||||
@@ -141,6 +142,7 @@ namespace Barotrauma
|
|||||||
WasGameUpdated = doc.Root.GetAttributeBool("wasgameupdated", false);
|
WasGameUpdated = doc.Root.GetAttributeBool("wasgameupdated", false);
|
||||||
|
|
||||||
VerboseLogging = doc.Root.GetAttributeBool("verboselogging", false);
|
VerboseLogging = doc.Root.GetAttributeBool("verboselogging", false);
|
||||||
|
SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false);
|
||||||
|
|
||||||
if (doc == null)
|
if (doc == null)
|
||||||
{
|
{
|
||||||
@@ -284,6 +286,7 @@ namespace Barotrauma
|
|||||||
new XAttribute("musicvolume", musicVolume),
|
new XAttribute("musicvolume", musicVolume),
|
||||||
new XAttribute("soundvolume", soundVolume),
|
new XAttribute("soundvolume", soundVolume),
|
||||||
new XAttribute("verboselogging", VerboseLogging),
|
new XAttribute("verboselogging", VerboseLogging),
|
||||||
|
new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs),
|
||||||
new XAttribute("enablesplashscreen", EnableSplashScreen));
|
new XAttribute("enablesplashscreen", EnableSplashScreen));
|
||||||
|
|
||||||
if (WasGameUpdated)
|
if (WasGameUpdated)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<config masterserverurl="http://www.undertowgames.com/baromaster" autocheckupdates="true" musicvolume="0.5" soundvolume="0.5" verboselogging="false">
|
<config masterserverurl="http://www.undertowgames.com/baromaster" autocheckupdates="true" musicvolume="0.5" soundvolume="0.5" verboselogging="false" savedebugconsolelogs="false">
|
||||||
<graphicsmode fullscreen="true" vsync="true" />
|
<graphicsmode fullscreen="true" vsync="true" />
|
||||||
<contentpackage path="Data/ContentPackages/Vanilla 0.8.xml" />
|
<contentpackage path="Data/ContentPackages/Vanilla 0.8.xml" />
|
||||||
<player name=""/>
|
<player name=""/>
|
||||||
|
|||||||
Reference in New Issue
Block a user