diff --git a/GFramework.Core.Tests/logging/CompositeFilterTests.cs b/GFramework.Core.Tests/logging/CompositeFilterTests.cs index ead293e..4e7416d 100644 --- a/GFramework.Core.Tests/logging/CompositeFilterTests.cs +++ b/GFramework.Core.Tests/logging/CompositeFilterTests.cs @@ -29,7 +29,7 @@ public class CompositeFilterTests var filter2 = new NamespaceFilter("GFramework"); var compositeFilter = new CompositeFilter(filter1, filter2); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry), Is.True); } @@ -41,7 +41,7 @@ public class CompositeFilterTests var filter2 = new NamespaceFilter("GFramework"); var compositeFilter = new CompositeFilter(filter1, filter2); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry), Is.False); } @@ -53,7 +53,7 @@ public class CompositeFilterTests var filter2 = new NamespaceFilter("MyApp"); var compositeFilter = new CompositeFilter(filter1, filter2); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry), Is.False); } @@ -66,19 +66,19 @@ public class CompositeFilterTests var compositeFilter = new CompositeFilter(levelFilter, namespaceFilter); // 满足所有条件 - var entry1 = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry1 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry1), Is.True); // 级别不满足 - var entry2 = new LogEntry(DateTime.Now, LogLevel.Debug, "GFramework.Core", "Test", null, null); + var entry2 = new LogEntry(DateTime.UtcNow, LogLevel.Debug, "GFramework.Core", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry2), Is.False); // 命名空间不满足 - var entry3 = new LogEntry(DateTime.Now, LogLevel.Info, "OtherNamespace", "Test", null, null); + var entry3 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "OtherNamespace", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry3), Is.False); // 都不满足 - var entry4 = new LogEntry(DateTime.Now, LogLevel.Debug, "OtherNamespace", "Test", null, null); + var entry4 = new LogEntry(DateTime.UtcNow, LogLevel.Debug, "OtherNamespace", "Test", null, null); Assert.That(compositeFilter.ShouldLog(entry4), Is.False); } @@ -93,10 +93,10 @@ public class CompositeFilterTests var outerComposite = new CompositeFilter(innerComposite, filter3); // 需要同时满足:Info 以上 AND GFramework 命名空间 AND Warning 以上 - var entry1 = new LogEntry(DateTime.Now, LogLevel.Warning, "GFramework.Core", "Test", null, null); + var entry1 = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "GFramework.Core", "Test", null, null); Assert.That(outerComposite.ShouldLog(entry1), Is.True); - var entry2 = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry2 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(outerComposite.ShouldLog(entry2), Is.False); // 不满足 Warning } } \ No newline at end of file diff --git a/GFramework.Core.Tests/logging/ConsoleAppenderTests.cs b/GFramework.Core.Tests/logging/ConsoleAppenderTests.cs index 9375562..c170fd2 100644 --- a/GFramework.Core.Tests/logging/ConsoleAppenderTests.cs +++ b/GFramework.Core.Tests/logging/ConsoleAppenderTests.cs @@ -39,7 +39,7 @@ public class ConsoleAppenderTests [Test] public void Append_ShouldWriteToWriter() { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); _appender.Append(entry); @@ -54,8 +54,8 @@ public class ConsoleAppenderTests var filter = new LogLevelFilter(LogLevel.Warning); var appender = new ConsoleAppender(new DefaultLogFormatter(), _stringWriter, useColors: false, filter: filter); - var infoEntry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Info message", null, null); - var warningEntry = new LogEntry(DateTime.Now, LogLevel.Warning, "TestLogger", "Warning message", null, null); + var infoEntry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Info message", null, null); + var warningEntry = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "TestLogger", "Warning message", null, null); appender.Append(infoEntry); appender.Append(warningEntry); @@ -70,7 +70,7 @@ public class ConsoleAppenderTests [Test] public void Flush_ShouldFlushWriter() { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); _appender.Append(entry); _appender.Flush(); @@ -82,7 +82,7 @@ public class ConsoleAppenderTests [Test] public void Dispose_ShouldFlushWriter() { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); _appender.Append(entry); _appender.Dispose(); @@ -96,7 +96,7 @@ public class ConsoleAppenderTests { for (int i = 0; i < 10; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", $"Message {i}", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"Message {i}", null, null); _appender.Append(entry); } diff --git a/GFramework.Core.Tests/logging/DefaultLogFormatterTests.cs b/GFramework.Core.Tests/logging/DefaultLogFormatterTests.cs index f997c1c..19aec51 100644 --- a/GFramework.Core.Tests/logging/DefaultLogFormatterTests.cs +++ b/GFramework.Core.Tests/logging/DefaultLogFormatterTests.cs @@ -36,7 +36,7 @@ public class DefaultLogFormatterTests public void Format_WithException_ShouldIncludeException() { var exception = new InvalidOperationException("Test exception"); - var entry = new LogEntry(DateTime.Now, LogLevel.Error, "TestLogger", "Error occurred", exception, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Error, "TestLogger", "Error occurred", exception, null); var result = _formatter.Format(entry); @@ -53,7 +53,7 @@ public class DefaultLogFormatterTests ["UserId"] = 12345, ["UserName"] = "TestUser" }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "User action", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "User action", null, properties); var result = _formatter.Format(entry); @@ -70,7 +70,7 @@ public class DefaultLogFormatterTests { ["Key1"] = null }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, properties); var result = _formatter.Format(entry); @@ -86,7 +86,7 @@ public class DefaultLogFormatterTests for (int i = 0; i < levels.Length; i++) { - var entry = new LogEntry(DateTime.Now, levels[i], "TestLogger", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, levels[i], "TestLogger", "Test", null, null); var result = _formatter.Format(entry); Assert.That(result, Does.Contain(expectedStrings[i])); @@ -97,7 +97,7 @@ public class DefaultLogFormatterTests public void Format_WithLongMessage_ShouldNotTruncate() { var longMessage = new string('A', 1000); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", longMessage, null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", longMessage, null, null); var result = _formatter.Format(entry); @@ -108,7 +108,7 @@ public class DefaultLogFormatterTests public void Format_WithSpecialCharacters_ShouldPreserveCharacters() { var message = "Test\nNew\tLine\r\nSpecial: <>&\"'"; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", message, null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", message, null, null); var result = _formatter.Format(entry); diff --git a/GFramework.Core.Tests/logging/FileAppenderTests.cs b/GFramework.Core.Tests/logging/FileAppenderTests.cs index c7d51e5..d1a7641 100644 --- a/GFramework.Core.Tests/logging/FileAppenderTests.cs +++ b/GFramework.Core.Tests/logging/FileAppenderTests.cs @@ -73,7 +73,7 @@ public class FileAppenderTests { using (var appender = new FileAppender(_testFilePath)) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); appender.Append(entry); appender.Flush(); } @@ -90,7 +90,7 @@ public class FileAppenderTests { for (int i = 0; i < 10; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", $"Message {i}", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"Message {i}", null, null); appender.Append(entry); } @@ -110,7 +110,7 @@ public class FileAppenderTests { using (var appender = new FileAppender(_testFilePath, new JsonLogFormatter())) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); appender.Append(entry); appender.Flush(); } @@ -126,7 +126,7 @@ public class FileAppenderTests var appender = new FileAppender(_testFilePath); appender.Dispose(); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); Assert.Throws(() => appender.Append(entry)); } @@ -137,7 +137,7 @@ public class FileAppenderTests // 第一次写入 using (var appender1 = new FileAppender(_testFilePath)) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "First message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "First message", null, null); appender1.Append(entry); appender1.Flush(); } @@ -145,7 +145,7 @@ public class FileAppenderTests // 第二次写入 using (var appender2 = new FileAppender(_testFilePath)) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Second message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Second message", null, null); appender2.Append(entry); appender2.Flush(); } @@ -161,7 +161,7 @@ public class FileAppenderTests { using (var appender = new FileAppender(_testFilePath)) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); appender.Append(entry); appender.Flush(); diff --git a/GFramework.Core.Tests/logging/JsonLogFormatterTests.cs b/GFramework.Core.Tests/logging/JsonLogFormatterTests.cs index f056335..9c026a4 100644 --- a/GFramework.Core.Tests/logging/JsonLogFormatterTests.cs +++ b/GFramework.Core.Tests/logging/JsonLogFormatterTests.cs @@ -39,7 +39,7 @@ public class JsonLogFormatterTests public void Format_WithException_ShouldIncludeExceptionDetails() { var exception = new InvalidOperationException("Test exception"); - var entry = new LogEntry(DateTime.Now, LogLevel.Error, "TestLogger", "Error occurred", exception, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Error, "TestLogger", "Error occurred", exception, null); var result = _formatter.Format(entry); @@ -60,7 +60,7 @@ public class JsonLogFormatterTests ["UserName"] = "TestUser", ["IsActive"] = true }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "User action", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "User action", null, properties); var result = _formatter.Format(entry); @@ -98,7 +98,7 @@ public class JsonLogFormatterTests ["Key1"] = null, ["Key2"] = "value" }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, properties); var result = _formatter.Format(entry); @@ -132,7 +132,7 @@ public class JsonLogFormatterTests for (int i = 0; i < levels.Length; i++) { - var entry = new LogEntry(DateTime.Now, levels[i], "TestLogger", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, levels[i], "TestLogger", "Test", null, null); var result = _formatter.Format(entry); var doc = JsonDocument.Parse(result); @@ -144,7 +144,7 @@ public class JsonLogFormatterTests public void Format_WithSpecialCharacters_ShouldEscapeCorrectly() { var message = "Test \"quoted\" and \n newline"; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", message, null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", message, null, null); var result = _formatter.Format(entry); @@ -178,7 +178,7 @@ public class JsonLogFormatterTests ["Null"] = null, ["Array"] = new[] { 1, 2, 3 } }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test", null, properties); var result = _formatter.Format(entry); diff --git a/GFramework.Core.Tests/logging/LogEntryTests.cs b/GFramework.Core.Tests/logging/LogEntryTests.cs index 2e51b93..4e08d38 100644 --- a/GFramework.Core.Tests/logging/LogEntryTests.cs +++ b/GFramework.Core.Tests/logging/LogEntryTests.cs @@ -12,7 +12,7 @@ public class LogEntryTests [Test] public void Constructor_WithAllParameters_ShouldCreateEntry() { - var timestamp = DateTime.Now; + var timestamp = DateTime.UtcNow; var properties = new Dictionary { ["Key1"] = "Value1" }; var exception = new InvalidOperationException("Test"); @@ -29,7 +29,7 @@ public class LogEntryTests [Test] public void Constructor_WithNullException_ShouldWork() { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); Assert.That(entry.Exception, Is.Null); } @@ -37,7 +37,7 @@ public class LogEntryTests [Test] public void Constructor_WithNullProperties_ShouldWork() { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); Assert.That(entry.Properties, Is.Null); } @@ -48,7 +48,7 @@ public class LogEntryTests LogContext.Clear(); using (LogContext.Push("ContextKey", "ContextValue")) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); var allProps = entry.GetAllProperties(); @@ -64,7 +64,7 @@ public class LogEntryTests { LogContext.Clear(); var properties = new Dictionary { ["PropKey"] = "PropValue" }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, properties); var allProps = entry.GetAllProperties(); @@ -79,7 +79,7 @@ public class LogEntryTests using (LogContext.Push("ContextKey", "ContextValue")) { var properties = new Dictionary { ["PropKey"] = "PropValue" }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, properties); var allProps = entry.GetAllProperties(); @@ -98,7 +98,7 @@ public class LogEntryTests using (LogContext.Push("Key1", "ContextValue")) { var properties = new Dictionary { ["Key1"] = "PropValue" }; - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, properties); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, properties); var allProps = entry.GetAllProperties(); @@ -113,7 +113,7 @@ public class LogEntryTests public void GetAllProperties_WithEmptyPropertiesAndEmptyContext_ShouldReturnEmpty() { LogContext.Clear(); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); var allProps = entry.GetAllProperties(); @@ -123,7 +123,7 @@ public class LogEntryTests [Test] public void RecordEquality_WithSameValues_ShouldBeEqual() { - var timestamp = DateTime.Now; + var timestamp = DateTime.UtcNow; var properties = new Dictionary { ["Key1"] = "Value1" }; var entry1 = new LogEntry(timestamp, LogLevel.Info, "TestLogger", "Test message", null, properties); @@ -135,7 +135,7 @@ public class LogEntryTests [Test] public void RecordEquality_WithDifferentValues_ShouldNotBeEqual() { - var timestamp = DateTime.Now; + var timestamp = DateTime.UtcNow; var entry1 = new LogEntry(timestamp, LogLevel.Info, "TestLogger", "Test message 1", null, null); var entry2 = new LogEntry(timestamp, LogLevel.Info, "TestLogger", "Test message 2", null, null); diff --git a/GFramework.Core.Tests/logging/LogLevelFilterTests.cs b/GFramework.Core.Tests/logging/LogLevelFilterTests.cs index fcc86b7..3bdaec3 100644 --- a/GFramework.Core.Tests/logging/LogLevelFilterTests.cs +++ b/GFramework.Core.Tests/logging/LogLevelFilterTests.cs @@ -14,7 +14,7 @@ public class LogLevelFilterTests public void ShouldLog_WithLevelAboveMinimum_ShouldReturnTrue() { var filter = new LogLevelFilter(LogLevel.Info); - var entry = new LogEntry(DateTime.Now, LogLevel.Warning, "TestLogger", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "TestLogger", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -23,7 +23,7 @@ public class LogLevelFilterTests public void ShouldLog_WithLevelEqualToMinimum_ShouldReturnTrue() { var filter = new LogLevelFilter(LogLevel.Info); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -32,7 +32,7 @@ public class LogLevelFilterTests public void ShouldLog_WithLevelBelowMinimum_ShouldReturnFalse() { var filter = new LogLevelFilter(LogLevel.Info); - var entry = new LogEntry(DateTime.Now, LogLevel.Debug, "TestLogger", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Debug, "TestLogger", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.False); } @@ -42,12 +42,12 @@ public class LogLevelFilterTests { var filter = new LogLevelFilter(LogLevel.Warning); - var traceEntry = new LogEntry(DateTime.Now, LogLevel.Trace, "TestLogger", "Test", null, null); - var debugEntry = new LogEntry(DateTime.Now, LogLevel.Debug, "TestLogger", "Test", null, null); - var infoEntry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test", null, null); - var warningEntry = new LogEntry(DateTime.Now, LogLevel.Warning, "TestLogger", "Test", null, null); - var errorEntry = new LogEntry(DateTime.Now, LogLevel.Error, "TestLogger", "Test", null, null); - var fatalEntry = new LogEntry(DateTime.Now, LogLevel.Fatal, "TestLogger", "Test", null, null); + var traceEntry = new LogEntry(DateTime.UtcNow, LogLevel.Trace, "TestLogger", "Test", null, null); + var debugEntry = new LogEntry(DateTime.UtcNow, LogLevel.Debug, "TestLogger", "Test", null, null); + var infoEntry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test", null, null); + var warningEntry = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "TestLogger", "Test", null, null); + var errorEntry = new LogEntry(DateTime.UtcNow, LogLevel.Error, "TestLogger", "Test", null, null); + var fatalEntry = new LogEntry(DateTime.UtcNow, LogLevel.Fatal, "TestLogger", "Test", null, null); Assert.That(filter.ShouldLog(traceEntry), Is.False); Assert.That(filter.ShouldLog(debugEntry), Is.False); diff --git a/GFramework.Core.Tests/logging/NamespaceFilterTests.cs b/GFramework.Core.Tests/logging/NamespaceFilterTests.cs index 2765046..7feb93e 100644 --- a/GFramework.Core.Tests/logging/NamespaceFilterTests.cs +++ b/GFramework.Core.Tests/logging/NamespaceFilterTests.cs @@ -26,7 +26,7 @@ public class NamespaceFilterTests public void ShouldLog_WithMatchingNamespace_ShouldReturnTrue() { var filter = new NamespaceFilter("GFramework.Core", "MyApp"); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -35,7 +35,7 @@ public class NamespaceFilterTests public void ShouldLog_WithNonMatchingNamespace_ShouldReturnFalse() { var filter = new NamespaceFilter("GFramework.Core", "MyApp"); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "OtherNamespace", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "OtherNamespace", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.False); } @@ -44,7 +44,7 @@ public class NamespaceFilterTests public void ShouldLog_WithExactMatch_ShouldReturnTrue() { var filter = new NamespaceFilter("GFramework.Core"); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -53,7 +53,7 @@ public class NamespaceFilterTests public void ShouldLog_WithPrefixMatch_ShouldReturnTrue() { var filter = new NamespaceFilter("GFramework"); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -62,7 +62,7 @@ public class NamespaceFilterTests public void ShouldLog_IsCaseInsensitive() { var filter = new NamespaceFilter("gframework.core"); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); Assert.That(filter.ShouldLog(entry), Is.True); } @@ -72,10 +72,10 @@ public class NamespaceFilterTests { var filter = new NamespaceFilter("GFramework.Core", "MyApp.Services", "ThirdParty"); - var entry1 = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); - var entry2 = new LogEntry(DateTime.Now, LogLevel.Info, "MyApp.Services.UserService", "Test", null, null); - var entry3 = new LogEntry(DateTime.Now, LogLevel.Info, "ThirdParty.Library", "Test", null, null); - var entry4 = new LogEntry(DateTime.Now, LogLevel.Info, "OtherNamespace", "Test", null, null); + var entry1 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null); + var entry2 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "MyApp.Services.UserService", "Test", null, null); + var entry3 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "ThirdParty.Library", "Test", null, null); + var entry4 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "OtherNamespace", "Test", null, null); Assert.That(filter.ShouldLog(entry1), Is.True); Assert.That(filter.ShouldLog(entry2), Is.True); diff --git a/GFramework.Core.Tests/logging/RollingFileAppenderTests.cs b/GFramework.Core.Tests/logging/RollingFileAppenderTests.cs index cdeeb7c..09c70ab 100644 --- a/GFramework.Core.Tests/logging/RollingFileAppenderTests.cs +++ b/GFramework.Core.Tests/logging/RollingFileAppenderTests.cs @@ -59,7 +59,7 @@ public class RollingFileAppenderTests // 写入足够多的日志触发轮转 for (int i = 0; i < 20; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"This is a test message number {i} with some padding to increase size", null, null); appender.Append(entry); } @@ -81,7 +81,7 @@ public class RollingFileAppenderTests // 写入大量日志触发多次轮转 for (int i = 0; i < 50; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"This is a test message number {i} with some padding to increase size significantly", null, null); appender.Append(entry); } @@ -100,7 +100,7 @@ public class RollingFileAppenderTests { for (int i = 0; i < 30; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"Test message {i} with padding to trigger rolling", null, null); appender.Append(entry); } @@ -124,7 +124,7 @@ public class RollingFileAppenderTests var appender = new RollingFileAppender(_testFilePath); appender.Dispose(); - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); Assert.Throws(() => appender.Append(entry)); } @@ -136,7 +136,7 @@ public class RollingFileAppenderTests { for (int i = 0; i < 10; i++) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "This is a longer message to trigger rolling more frequently", null, null); appender.Append(entry); } @@ -153,7 +153,7 @@ public class RollingFileAppenderTests { using (var appender = new RollingFileAppender(_testFilePath)) { - var entry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test message", null, null); + var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test message", null, null); appender.Append(entry); appender.Flush(); diff --git a/GFramework.Core/logging/ConsoleLogger.cs b/GFramework.Core/logging/ConsoleLogger.cs index 468a35b..091c290 100644 --- a/GFramework.Core/logging/ConsoleLogger.cs +++ b/GFramework.Core/logging/ConsoleLogger.cs @@ -34,7 +34,7 @@ public sealed class ConsoleLogger( /// 异常信息,可为空 protected override void Write(LogLevel level, string message, Exception? exception) { - var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); + var timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff"); var levelStr = LevelStrings[(int)level]; var log = $"[{timestamp}] {levelStr} [{Name()}] {message}"; diff --git a/GFramework.Game.Abstractions/setting/data/AudioSettings.cs b/GFramework.Game.Abstractions/setting/data/AudioSettings.cs index 56651ce..15b75fe 100644 --- a/GFramework.Game.Abstractions/setting/data/AudioSettings.cs +++ b/GFramework.Game.Abstractions/setting/data/AudioSettings.cs @@ -39,7 +39,7 @@ public class AudioSettings : ISettingsData /// /// 获取设置数据最后修改的时间 /// - public DateTime LastModified { get; } = DateTime.Now; + public DateTime LastModified { get; } = DateTime.UtcNow; /// /// 从指定的数据源加载音频设置 diff --git a/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs b/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs index ba0bfef..63213a1 100644 --- a/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs +++ b/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs @@ -38,7 +38,7 @@ public class GraphicsSettings : ISettingsData /// /// 获取设置数据最后修改的时间 /// - public DateTime LastModified { get; } = DateTime.Now; + public DateTime LastModified { get; } = DateTime.UtcNow; /// /// 从指定的数据源加载图形设置 diff --git a/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs b/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs index 1f11d33..72fe044 100644 --- a/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs +++ b/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs @@ -42,7 +42,7 @@ public class LocalizationSettings : ISettingsData /// /// 获取设置数据最后修改的时间 /// - public DateTime LastModified { get; } = DateTime.Now; + public DateTime LastModified { get; } = DateTime.UtcNow; /// /// 从指定的数据源加载本地化设置 diff --git a/GFramework.Godot/logging/GodotLogger.cs b/GFramework.Godot/logging/GodotLogger.cs index e4642bc..8a0cfdb 100644 --- a/GFramework.Godot/logging/GodotLogger.cs +++ b/GFramework.Godot/logging/GodotLogger.cs @@ -36,7 +36,7 @@ public sealed class GodotLogger( protected override void Write(LogLevel level, string message, Exception? exception) { // 构造时间戳和日志前缀 - var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); + var timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff"); var levelStr = LevelStrings[(int)level]; var logPrefix = $"[{timestamp}] {levelStr} [{Name()}]"; diff --git a/docs/zh-CN/best-practices/architecture-patterns.md b/docs/zh-CN/best-practices/architecture-patterns.md index 774564c..a0b6b7d 100644 --- a/docs/zh-CN/best-practices/architecture-patterns.md +++ b/docs/zh-CN/best-practices/architecture-patterns.md @@ -1012,7 +1012,7 @@ public class SaveSystem : AbstractSystem Level = 1, Health = 100, Position = Vector3.Zero, - CreatedAt = DateTime.Now + CreatedAt = DateTime.UtcNow }; } } diff --git a/docs/zh-CN/core/events.md b/docs/zh-CN/core/events.md index 328bd4d..3509f31 100644 --- a/docs/zh-CN/core/events.md +++ b/docs/zh-CN/core/events.md @@ -439,7 +439,7 @@ public class EventBridge : AbstractSystem this.SendEvent(new PublicPlayerDiedEvent { PlayerId = e.Id, - Timestamp = DateTime.Now + Timestamp = DateTime.UtcNow }); }); } diff --git a/docs/zh-CN/core/logging.md b/docs/zh-CN/core/logging.md index 2699d72..faff9bf 100644 --- a/docs/zh-CN/core/logging.md +++ b/docs/zh-CN/core/logging.md @@ -118,7 +118,7 @@ public class CustomLogger : AbstractLogger protected override void Write(LogLevel level, string message, Exception? exception) { // 自定义日志输出逻辑 - var logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] [{level}] {message}"; + var logMessage = $"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}] [{level}] {message}"; if (exception != null) logMessage += $"\n{exception}"; diff --git a/docs/zh-CN/core/utility.md b/docs/zh-CN/core/utility.md index f7ff3bf..60a9f1d 100644 --- a/docs/zh-CN/core/utility.md +++ b/docs/zh-CN/core/utility.md @@ -432,7 +432,7 @@ public class LogUtility : IUtility _ => "" }; - string timestamp = DateTime.Now.ToString("HH:mm:ss"); + string timestamp = DateTime.UtcNow.ToString("HH:mm:ss"); GD.Print($"{timestamp} {prefix} {message}"); } diff --git a/docs/zh-CN/game/index.md b/docs/zh-CN/game/index.md index 2888937..dca6922 100644 --- a/docs/zh-CN/game/index.md +++ b/docs/zh-CN/game/index.md @@ -452,7 +452,7 @@ public class GameDataManager public void SaveGame(int slotId, SaveData data) { _saveStorage.Write($"slot_{slotId}", data); - _saveStorage.Write($"slot_{slotId}/timestamp", DateTime.Now); + _saveStorage.Write($"slot_{slotId}/timestamp", DateTime.UtcNow); _saveStorage.Write($"slot_{slotId}/version", data.Version); } @@ -639,13 +639,13 @@ public class CachedStorage : IStorage if (!_cacheTimestamps.TryGetValue(key, out var timestamp)) return true; - return DateTime.Now - timestamp > _cacheExpiry; + return DateTime.UtcNow - timestamp > _cacheExpiry; } private void UpdateCache(string key, T value) { _cache[key] = value; - _cacheTimestamps[key] = DateTime.Now; + _cacheTimestamps[key] = DateTime.UtcNow; } } ``` @@ -928,7 +928,7 @@ public partial class GameManager : Node, IController var profile = new GameProfile { PlayerName = playerName, - LastPlayed = DateTime.Now, + LastPlayed = DateTime.UtcNow, TotalPlayTime = 0 }; @@ -1029,7 +1029,7 @@ public partial class GameManager : Node, IController PlayerHealth = Context.GetModel().Health.Value, CurrentLevel = Context.GetModel().CurrentLevel.Value, Inventory = Context.GetModel().GetData(), - Timestamp = DateTime.Now, + Timestamp = DateTime.UtcNow, Version = 1 }; } @@ -1096,7 +1096,7 @@ public class AutoSaveSystem : AbstractSystem // 保存到自动存档槽 var storage = Context.GetUtility(); storage.Write("autosave", saveData); - storage.Write("autosave/timestamp", DateTime.Now); + storage.Write("autosave/timestamp", DateTime.UtcNow); Logger.Debug("Auto-save completed successfully"); } diff --git a/docs/zh-CN/godot/storage.md b/docs/zh-CN/godot/storage.md index 32590c3..03b7da1 100644 --- a/docs/zh-CN/godot/storage.md +++ b/docs/zh-CN/godot/storage.md @@ -144,7 +144,7 @@ storage.Write("user://saves/slot_001.dat", saveData); // 存储调试信息(普通路径) var debugLog = new DebugLog { /* ... */ }; -storage.Write("logs/debug_" + DateTime.Now.Ticks + ".json", debugLog); +storage.Write("logs/debug_" + DateTime.UtcNow.Ticks + ".json", debugLog); ``` ### 存在性检查 diff --git a/docs/zh-CN/tutorials/advanced-patterns.md b/docs/zh-CN/tutorials/advanced-patterns.md index 50386f6..f2d0a20 100644 --- a/docs/zh-CN/tutorials/advanced-patterns.md +++ b/docs/zh-CN/tutorials/advanced-patterns.md @@ -51,7 +51,7 @@ public class CreatePlayerCommand : AbstractCommand MaxHealth = 100, Mana = 50, MaxMana = 50, - CreatedAt = DateTime.Now + CreatedAt = DateTime.UtcNow }; // 保存玩家数据 @@ -440,13 +440,13 @@ public interface IDomainEvent public record PlayerCreatedDomainEvent(PlayerId PlayerId, PlayerName PlayerName, PlayerClass Class) : IDomainEvent { - public DateTime OccurredAt { get; } = DateTime.Now; + public DateTime OccurredAt { get; } = DateTime.UtcNow; } public record PlayerLevelUpDomainEvent(PlayerId PlayerId, PlayerName PlayerName, int NewLevel, int OldLevel) : IDomainEvent { - public DateTime OccurredAt { get; } = DateTime.Now; + public DateTime OccurredAt { get; } = DateTime.UtcNow; } // 领域服务 @@ -620,7 +620,7 @@ public interface IEventStore public record AggregateSnapshot(string StreamId, int Version) : IDomainEvent { - public DateTime OccurredAt { get; } = DateTime.Now; + public DateTime OccurredAt { get; } = DateTime.UtcNow; } public class ConcurrencyException : Exception @@ -855,7 +855,7 @@ public class PlayerEventHandler : IEventHandler, if (player != null) { player.IsAlive = false; - player.DeathTime = DateTime.Now; + player.DeathTime = DateTime.UtcNow; _playerRepository.Update(player); // 发送通知 @@ -1160,7 +1160,7 @@ public class ChatService : IChatService { PlayerId = playerId, Message = FilterMessage(message), - Timestamp = DateTime.Now, + Timestamp = DateTime.UtcNow, Channel = channel }; @@ -1176,7 +1176,7 @@ public class ChatService : IChatService { PlayerId = "system", Message = message, - Timestamp = DateTime.Now, + Timestamp = DateTime.UtcNow, Channel = "system" }; diff --git a/docs/zh-CN/tutorials/godot-integration.md b/docs/zh-CN/tutorials/godot-integration.md index 1cd06f9..6c4ef3a 100644 --- a/docs/zh-CN/tutorials/godot-integration.md +++ b/docs/zh-CN/tutorials/godot-integration.md @@ -569,7 +569,7 @@ public partial class SmartResourceLoader : Node, IController { Path = path, Priority = priority, - RequestTime = DateTime.Now + RequestTime = DateTime.UtcNow }; _loadQueue.Enqueue(request);