Skip to content

Commit 0a2c842

Browse files
committed
Initialize timestamp with log message
So if it takes some time to actually get to the log it will display the originating timestamp rather than the timestamp it was logged at
1 parent 07afe29 commit 0a2c842

4 files changed

Lines changed: 38 additions & 12 deletions

File tree

ModuleManager/Logging/ILogMessage.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace ModuleManager.Logging
66
public interface ILogMessage
77
{
88
LogType LogType { get; }
9+
DateTime Timestamp { get; }
910
string Message { get; }
1011
string ToLogString();
1112
}

ModuleManager/Logging/LogMessage.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@ namespace ModuleManager.Logging
55
{
66
public class LogMessage : ILogMessage
77
{
8-
private const string DATETIME_FORMAT_STRING = "yyyy-MM-dd HH:mm:ss.fff";
98
private const string DATETIME_FORMAT_STRING = "HH:mm:ss.fff";
109

1110
public LogType LogType { get; }
11+
public DateTime Timestamp { get; }
1212
public string Message { get; }
1313

1414
public LogMessage(LogType logType, string message)
1515
{
1616
LogType = logType;
17+
Timestamp = DateTime.Now;
1718
Message = message ?? throw new ArgumentNullException(nameof(message));
1819
}
1920

2021
public LogMessage(ILogMessage logMessage, string newMessage)
2122
{
2223
if (logMessage == null) throw new ArgumentNullException(nameof(logMessage));
2324
LogType = logMessage.LogType;
25+
Timestamp = logMessage.Timestamp;
2426
Message = newMessage ?? throw new ArgumentNullException(nameof(newMessage));
2527
}
2628

@@ -40,7 +42,7 @@ public string ToLogString()
4042
else
4143
prefix = "???";
4244

43-
return $"[{prefix} {DateTime.Now.ToString(DATETIME_FORMAT_STRING)}] {Message}";
45+
return $"[{prefix} {Timestamp.ToString(DATETIME_FORMAT_STRING)}] {Message}";
4446
}
4547

4648
public override string ToString()

ModuleManagerTests/Logging/LogMessageTest.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ namespace ModuleManagerTests.Logging
88
{
99
public class LogMessageTest
1010
{
11+
[Fact]
12+
public void TestConstructor()
13+
{
14+
LogMessage logMessage = new LogMessage(LogType.Log, "a message");
15+
Assert.Equal(LogType.Log, logMessage.LogType);
16+
Assert.True(logMessage.Timestamp <= DateTime.Now);
17+
Assert.True(logMessage.Timestamp > DateTime.Now - new TimeSpan(0, 0, 5));
18+
Assert.Equal("a message", logMessage.Message);
19+
}
20+
1121
[Fact]
1222
public void TestConstructor__NullMessage()
1323
{
@@ -25,8 +35,10 @@ public void TestConstructor__FromOtherMessage()
2535
ILogMessage logMessage = Substitute.For<ILogMessage>();
2636
logMessage.LogType.Returns(LogType.Log);
2737
logMessage.Message.Returns("the old message");
38+
logMessage.Timestamp.Returns(new DateTime(2000, 1, 1, 12, 34, 45, 678));
2839
LogMessage newLogMessage = new LogMessage(logMessage, "a new message");
2940
Assert.Equal(LogType.Log, newLogMessage.LogType);
41+
Assert.Equal(logMessage.Timestamp, newLogMessage.Timestamp);
3042
Assert.Equal("a new message", newLogMessage.Message);
3143
}
3244

@@ -100,5 +112,15 @@ public void TestToString()
100112
LogMessage message = new LogMessage(LogType.Log, "everything is ok");
101113
Assert.Equal("[ModuleManager.Logging.LogMessage LogType=Log Message=everything is ok]", message.ToString());
102114
}
115+
116+
[Fact]
117+
public void TestToLogMessage__Timestamp()
118+
{
119+
ILogMessage logMessage = Substitute.For<ILogMessage>();
120+
logMessage.LogType.Returns(LogType.Log);
121+
logMessage.Timestamp.Returns(new DateTime(2000, 1, 1, 12, 34, 56, 789));
122+
LogMessage message = new LogMessage(logMessage, "everything is ok");
123+
Assert.Equal("[LOG 12:34:56.789] everything is ok", message.ToLogString());
124+
}
103125
}
104126
}

ModuleManagerTests/Logging/ModLoggerTest.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System;
22
using Xunit;
33
using NSubstitute;
4-
using ModuleManager.Extensions;
4+
using UnityEngine;
55
using ModuleManager.Logging;
66

77
namespace ModuleManagerTests.Logging
@@ -53,17 +53,18 @@ public void TestConstructor__LoggerNull()
5353
[Fact]
5454
public void TestLog()
5555
{
56-
logger.Info("well hi there");
56+
ILogMessage logMessage = Substitute.For<ILogMessage>();
57+
logMessage.LogType.Returns(LogType.Log);
58+
logMessage.Message.Returns("well hi there");
59+
logMessage.Timestamp.Returns(new DateTime(2000, 1, 1, 12, 34, 45, 678));
5760

58-
innerLogger.AssertInfo("[MyMod] well hi there");
59-
}
60-
61-
[Fact]
62-
public void TestLog__Warning()
63-
{
64-
logger.Warning("I'm warning you");
61+
logger.Log(logMessage);
6562

66-
innerLogger.AssertWarning("[MyMod] I'm warning you");
63+
innerLogger.Received().Log(Arg.Is<ILogMessage>(msg =>
64+
msg.LogType == LogType.Log &&
65+
msg.Timestamp == logMessage.Timestamp &&
66+
msg.Message == "[MyMod] well hi there"
67+
));
6768
}
6869

6970
[Fact]

0 commit comments

Comments
 (0)