Skip to content

Commit 0df9986

Browse files
committed
Basic log to file
1 parent 339855a commit 0df9986

File tree

7 files changed

+112
-55
lines changed

7 files changed

+112
-55
lines changed

Dependencies/Common

Dependencies/RfgTools

src/Gui/Documents/MapEditorDocument.bf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ namespace Nanoforge.Gui.Documents
4545
case .Ok(var newMap):
4646
Map = newMap;
4747
Map.Load();
48-
Log.Info("Finished importing map '{}'", MapName);
48+
Logger.Info("Finished importing map '{}'", MapName);
4949
case .Err(StringView err):
5050
_loadFailure = true;
5151
_loadFailureReason = err;
52-
Log.Error("Failed to import map '{}'. {}. See the log for more details.", MapName, err);
52+
Logger.Error("Failed to import map '{}'. {}. See the log for more details.", MapName, err);
5353
return;
5454
}
5555
}

src/Misc/Log.bf

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/Misc/Logger.bf

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
using System.IO;
2+
using System;
3+
using Common;
4+
5+
namespace Nanoforge.Misc
6+
{
7+
//Global logging interface
8+
[StaticInitAfter(typeof(DateTime))] //Must initialize first or Logger constructor has an error when using DateTime.Now
9+
public static class Logger
10+
{
11+
public static bool AutoFlush = true;
12+
private static StreamWriter _writer;
13+
private static FileStream _fileStream;
14+
15+
public static this()
16+
{
17+
#if DEBUG
18+
StringView logFilePath = scope $@"{Workspace.Directory}\NanoforgeDebugLog.log";
19+
#else
20+
StringView logFilePath = @".\NanoforgeLog.log";
21+
#endif
22+
_fileStream = new .();
23+
if (_fileStream.Open(logFilePath, FileMode.Append, .Write, .Read) case .Err(FileOpenError err))
24+
{
25+
Runtime.FatalError(scope $"Failed to open log file. Error: {err.ToString(.. scope .())}");
26+
}
27+
_writer = new .(_fileStream, .UTF8, 4096);
28+
29+
WriteLine("\n********************");
30+
WriteLine("Log opened at {}\n", DateTime.Now);
31+
}
32+
33+
public static ~this()
34+
{
35+
WriteLine("\nLog closed at {}", DateTime.Now);
36+
WriteLine("********************\n");
37+
DeleteIfSet!(_writer);
38+
DeleteIfSet!(_fileStream);
39+
}
40+
41+
public static void Info(StringView fmt, params Object[] args)
42+
{
43+
LabelledWrite("info", fmt, params args);
44+
}
45+
46+
public static void Warning(StringView fmt, params Object[] args)
47+
{
48+
LabelledWrite("warning", fmt, params args);
49+
}
50+
51+
public static void Error(StringView fmt, params Object[] args)
52+
{
53+
LabelledWrite("error", fmt, params args);
54+
}
55+
56+
public static void Fatal(StringView fmt, params Object[] args)
57+
{
58+
LabelledWrite("fatal", fmt, params args);
59+
}
60+
61+
private static void LabelledWrite(StringView label, StringView fmt, params Object[] args)
62+
{
63+
String str = scope String(256);
64+
str.AppendF(fmt, params args);
65+
_writer.WriteLine(scope $"[{label}][{DateTime.Now.ToString(.. scope .())}]: {str}");
66+
if (AutoFlush)
67+
Flush();
68+
}
69+
70+
public static void WriteLine(StringView fmt, params Object[] args)
71+
{
72+
_writer.WriteLine(fmt, params args);
73+
if (AutoFlush)
74+
Flush();
75+
}
76+
77+
public static void Write(StringView fmt, params Object[] args)
78+
{
79+
_writer.Write(fmt, params args);
80+
if (AutoFlush)
81+
Flush();
82+
}
83+
84+
public static void Flush()
85+
{
86+
_writer.Flush();
87+
}
88+
}
89+
}

src/Rfg/Import/MapImporter.bf

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace Nanoforge.Rfg.Import
2323
var packfileSearch = PackfileVFS.GetPackfile(map.PackfileName);
2424
if (packfileSearch case .Err(let err))
2525
{
26-
Log.Error(scope $"Map importer failed to locate primary packfile '{map.PackfileName}'");
26+
Logger.Error(scope $"Map importer failed to locate primary packfile '{map.PackfileName}'");
2727
changes.Rollback();
2828
return .Err("Failed to find the maps primary packfile. Check the log.");
2929
}
@@ -33,18 +33,18 @@ namespace Nanoforge.Rfg.Import
3333
for (int i in 0..<packfile.Entries.Count)
3434
{
3535
StringView entryName = packfile.EntryNames[i];
36-
if (Path.GetExtension(entryName, .. scope .()) == ".rfgzone_pc" && !entryName.StartsWith("p_", .OrdinalIgnoreCase))
36+
if (Path.GetExtension(entryName, .. scope .()) != ".rfgzone_pc" || entryName.StartsWith("p_", .OrdinalIgnoreCase))
37+
continue;
38+
39+
Result<Zone, StringView> zoneImportResult = ImportZone(packfile, entryName, changes);
40+
switch (zoneImportResult)
3741
{
38-
Result<Zone, StringView> zoneImportResult = ImportZone(packfile, entryName, changes);
39-
switch(zoneImportResult)
40-
{
41-
case .Ok(let zone):
42-
map.Zones.Add(zone);
43-
case .Err(let err):
44-
Log.Error(scope $"Failed to import zone '{entryName}' for '{name}'. {err}");
45-
changes.Rollback();
46-
return .Err("Failed to import a zone. Check the log.");
47-
}
42+
case .Ok(let zone):
43+
map.Zones.Add(zone);
44+
case .Err(let err):
45+
Logger.Error(scope $"Failed to import zone '{entryName}' for '{name}'. {err}");
46+
changes.Rollback();
47+
return .Err("Failed to import a zone. Check the log.");
4848
}
4949
}
5050

@@ -57,15 +57,15 @@ namespace Nanoforge.Rfg.Import
5757
var zoneBytes = packfile.ReadSingleFile(filename);
5858
if (zoneBytes case .Err(let err))
5959
{
60-
Log.Error("Failed to extract '{}'. {}", filename, err);
60+
Logger.Error("Failed to extract '{}'. {}", filename, err);
6161
return .Err("Failed to extract zone file bytes");
6262
}
6363
defer delete zoneBytes.Value;
6464

6565
var persistentZoneBytes = packfile.ReadSingleFile(scope $"p_{filename}");
6666
if (persistentZoneBytes case .Err(let err))
6767
{
68-
Log.Error("Failed to extract '{}'. {}", filename, err);
68+
Logger.Error("Failed to extract '{}'. {}", filename, err);
6969
return .Err("Failed to extract persistent zone file bytes");
7070
}
7171
defer delete persistentZoneBytes.Value;

src/Rfg/Import/ZoneImporter.bf

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ namespace Nanoforge.Rfg.Import
4949
ZoneFile36 zoneFile = scope .();
5050
if (zoneFile.Load(fileBytes, useInPlace: true) case .Err(let err))
5151
{
52-
Log.Error(scope $"Failed to parse zone file '{zoneFilename}'. {err}");
52+
Logger.Error(scope $"Failed to parse zone file '{zoneFilename}'. {err}");
5353
return .Err("Failed to parse zone file");
5454
}
5555
ZoneFile36 persistentZoneFile = scope .();
5656
if (persistentZoneFile.Load(persistentFileBytes, useInPlace: true) case .Err(let err)) //Note: useInPlace is true so the Span<u8> must stay alive as long as the ZoneFile is alive
5757
{
58-
Log.Error(scope $"Failed to parse persistent zone file 'p_{zoneFilename}'. {err}");
58+
Logger.Error(scope $"Failed to parse persistent zone file 'p_{zoneFilename}'. {err}");
5959
return .Err("Failed to parse persistent zone file");
6060
}
6161

@@ -77,13 +77,13 @@ namespace Nanoforge.Rfg.Import
7777
case .Ok(let obj):
7878
zone.Objects.Add(obj);
7979
case .Err(let err):
80-
Log.Error(scope $"Zone object reader for class '{rfgObj.Classname}' failed. {err}");
80+
Logger.Error(scope $"Zone object reader for class '{rfgObj.Classname}' failed. {err}");
8181
return .Err("Zone object read error.");
8282
}
8383
}
8484
else
8585
{
86-
Log.Error(scope $"Encountered an unsupported zone object class '{rfgObj.Classname}'. Please write an importer for that class and try again.");
86+
Logger.Error(scope $"Encountered an unsupported zone object class '{rfgObj.Classname}'. Please write an importer for that class and try again.");
8787
return .Err("Encountered an unsupported zone object class.");
8888
}
8989
}
@@ -108,7 +108,7 @@ namespace Nanoforge.Rfg.Import
108108
#if DEBUG
109109
if (!StringView.Equals(obj.Classname, rfgObj.Classname, true))
110110
{
111-
Log.Error(scope $"Object type mismatch between primary and persistent zone files for {zone.Name}");
111+
Logger.Error(scope $"Object type mismatch between primary and persistent zone files for {zone.Name}");
112112
return .Err("Object type mismatch between primary and persistent zone files");
113113
}
114114
#endif

0 commit comments

Comments
 (0)