mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
fix(logging): 统一使用UTC时间戳记录日志
- 将所有DateTime.Now替换为DateTime.UtcNow以确保时区一致性 - 修复文档中的时间戳记录方式 - 更新测试代码中的时间戳生成逻辑 - 统一框架各模块的时间记录标准
This commit is contained in:
parent
7d0e5931d1
commit
e94e4890cd
@ -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
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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<ObjectDisposedException>(() => 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();
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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<string, object?> { ["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<string, object?> { ["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<string, object?> { ["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<string, object?> { ["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<string, object?> { ["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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<ObjectDisposedException>(() => 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();
|
||||
|
||||
@ -34,7 +34,7 @@ public sealed class ConsoleLogger(
|
||||
/// <param name="exception">异常信息,可为空</param>
|
||||
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}";
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ public class AudioSettings : ISettingsData
|
||||
/// <summary>
|
||||
/// 获取设置数据最后修改的时间
|
||||
/// </summary>
|
||||
public DateTime LastModified { get; } = DateTime.Now;
|
||||
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// 从指定的数据源加载音频设置
|
||||
|
||||
@ -38,7 +38,7 @@ public class GraphicsSettings : ISettingsData
|
||||
/// <summary>
|
||||
/// 获取设置数据最后修改的时间
|
||||
/// </summary>
|
||||
public DateTime LastModified { get; } = DateTime.Now;
|
||||
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// 从指定的数据源加载图形设置
|
||||
|
||||
@ -42,7 +42,7 @@ public class LocalizationSettings : ISettingsData
|
||||
/// <summary>
|
||||
/// 获取设置数据最后修改的时间
|
||||
/// </summary>
|
||||
public DateTime LastModified { get; } = DateTime.Now;
|
||||
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// 从指定的数据源加载本地化设置
|
||||
|
||||
@ -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()}]";
|
||||
|
||||
|
||||
@ -1012,7 +1012,7 @@ public class SaveSystem : AbstractSystem
|
||||
Level = 1,
|
||||
Health = 100,
|
||||
Position = Vector3.Zero,
|
||||
CreatedAt = DateTime.Now
|
||||
CreatedAt = DateTime.UtcNow
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -439,7 +439,7 @@ public class EventBridge : AbstractSystem
|
||||
this.SendEvent(new PublicPlayerDiedEvent
|
||||
{
|
||||
PlayerId = e.Id,
|
||||
Timestamp = DateTime.Now
|
||||
Timestamp = DateTime.UtcNow
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -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}";
|
||||
|
||||
|
||||
@ -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}");
|
||||
}
|
||||
|
||||
|
||||
@ -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<T>(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<PlayerModel>().Health.Value,
|
||||
CurrentLevel = Context.GetModel<GameModel>().CurrentLevel.Value,
|
||||
Inventory = Context.GetModel<InventoryModel>().GetData(),
|
||||
Timestamp = DateTime.Now,
|
||||
Timestamp = DateTime.UtcNow,
|
||||
Version = 1
|
||||
};
|
||||
}
|
||||
@ -1096,7 +1096,7 @@ public class AutoSaveSystem : AbstractSystem
|
||||
// 保存到自动存档槽
|
||||
var storage = Context.GetUtility<IStorage>();
|
||||
storage.Write("autosave", saveData);
|
||||
storage.Write("autosave/timestamp", DateTime.Now);
|
||||
storage.Write("autosave/timestamp", DateTime.UtcNow);
|
||||
|
||||
Logger.Debug("Auto-save completed successfully");
|
||||
}
|
||||
|
||||
@ -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);
|
||||
```
|
||||
|
||||
### 存在性检查
|
||||
|
||||
@ -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<PlayerLevelUpEvent>,
|
||||
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"
|
||||
};
|
||||
|
||||
|
||||
@ -569,7 +569,7 @@ public partial class SmartResourceLoader : Node, IController
|
||||
{
|
||||
Path = path,
|
||||
Priority = priority,
|
||||
RequestTime = DateTime.Now
|
||||
RequestTime = DateTime.UtcNow
|
||||
};
|
||||
|
||||
_loadQueue.Enqueue(request);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user