mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-24 20:34:29 +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 filter2 = new NamespaceFilter("GFramework");
|
||||||
var compositeFilter = new CompositeFilter(filter1, filter2);
|
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);
|
Assert.That(compositeFilter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ public class CompositeFilterTests
|
|||||||
var filter2 = new NamespaceFilter("GFramework");
|
var filter2 = new NamespaceFilter("GFramework");
|
||||||
var compositeFilter = new CompositeFilter(filter1, filter2);
|
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);
|
Assert.That(compositeFilter.ShouldLog(entry), Is.False);
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ public class CompositeFilterTests
|
|||||||
var filter2 = new NamespaceFilter("MyApp");
|
var filter2 = new NamespaceFilter("MyApp");
|
||||||
var compositeFilter = new CompositeFilter(filter1, filter2);
|
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);
|
Assert.That(compositeFilter.ShouldLog(entry), Is.False);
|
||||||
}
|
}
|
||||||
@ -66,19 +66,19 @@ public class CompositeFilterTests
|
|||||||
var compositeFilter = new CompositeFilter(levelFilter, namespaceFilter);
|
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);
|
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);
|
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);
|
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);
|
Assert.That(compositeFilter.ShouldLog(entry4), Is.False);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,10 +93,10 @@ public class CompositeFilterTests
|
|||||||
var outerComposite = new CompositeFilter(innerComposite, filter3);
|
var outerComposite = new CompositeFilter(innerComposite, filter3);
|
||||||
|
|
||||||
// 需要同时满足:Info 以上 AND GFramework 命名空间 AND Warning 以上
|
// 需要同时满足: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);
|
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
|
Assert.That(outerComposite.ShouldLog(entry2), Is.False); // 不满足 Warning
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -39,7 +39,7 @@ public class ConsoleAppenderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Append_ShouldWriteToWriter()
|
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);
|
_appender.Append(entry);
|
||||||
|
|
||||||
@ -54,8 +54,8 @@ public class ConsoleAppenderTests
|
|||||||
var filter = new LogLevelFilter(LogLevel.Warning);
|
var filter = new LogLevelFilter(LogLevel.Warning);
|
||||||
var appender = new ConsoleAppender(new DefaultLogFormatter(), _stringWriter, useColors: false, filter: filter);
|
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 infoEntry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Info message", null, null);
|
||||||
var warningEntry = new LogEntry(DateTime.Now, LogLevel.Warning, "TestLogger", "Warning message", null, null);
|
var warningEntry = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "TestLogger", "Warning message", null, null);
|
||||||
|
|
||||||
appender.Append(infoEntry);
|
appender.Append(infoEntry);
|
||||||
appender.Append(warningEntry);
|
appender.Append(warningEntry);
|
||||||
@ -70,7 +70,7 @@ public class ConsoleAppenderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Flush_ShouldFlushWriter()
|
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.Append(entry);
|
||||||
_appender.Flush();
|
_appender.Flush();
|
||||||
@ -82,7 +82,7 @@ public class ConsoleAppenderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Dispose_ShouldFlushWriter()
|
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.Append(entry);
|
||||||
_appender.Dispose();
|
_appender.Dispose();
|
||||||
@ -96,7 +96,7 @@ public class ConsoleAppenderTests
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 10; i++)
|
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);
|
_appender.Append(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public class DefaultLogFormatterTests
|
|||||||
public void Format_WithException_ShouldIncludeException()
|
public void Format_WithException_ShouldIncludeException()
|
||||||
{
|
{
|
||||||
var exception = new InvalidOperationException("Test exception");
|
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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ public class DefaultLogFormatterTests
|
|||||||
["UserId"] = 12345,
|
["UserId"] = 12345,
|
||||||
["UserName"] = "TestUser"
|
["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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ public class DefaultLogFormatterTests
|
|||||||
{
|
{
|
||||||
["Key1"] = null
|
["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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ public class DefaultLogFormatterTests
|
|||||||
|
|
||||||
for (int i = 0; i < levels.Length; i++)
|
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 result = _formatter.Format(entry);
|
||||||
|
|
||||||
Assert.That(result, Does.Contain(expectedStrings[i]));
|
Assert.That(result, Does.Contain(expectedStrings[i]));
|
||||||
@ -97,7 +97,7 @@ public class DefaultLogFormatterTests
|
|||||||
public void Format_WithLongMessage_ShouldNotTruncate()
|
public void Format_WithLongMessage_ShouldNotTruncate()
|
||||||
{
|
{
|
||||||
var longMessage = new string('A', 1000);
|
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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ public class DefaultLogFormatterTests
|
|||||||
public void Format_WithSpecialCharacters_ShouldPreserveCharacters()
|
public void Format_WithSpecialCharacters_ShouldPreserveCharacters()
|
||||||
{
|
{
|
||||||
var message = "Test\nNew\tLine\r\nSpecial: <>&\"'";
|
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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ public class FileAppenderTests
|
|||||||
{
|
{
|
||||||
using (var appender = new FileAppender(_testFilePath))
|
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.Append(entry);
|
||||||
appender.Flush();
|
appender.Flush();
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ public class FileAppenderTests
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 10; i++)
|
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);
|
appender.Append(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ public class FileAppenderTests
|
|||||||
{
|
{
|
||||||
using (var appender = new FileAppender(_testFilePath, new JsonLogFormatter()))
|
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.Append(entry);
|
||||||
appender.Flush();
|
appender.Flush();
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ public class FileAppenderTests
|
|||||||
var appender = new FileAppender(_testFilePath);
|
var appender = new FileAppender(_testFilePath);
|
||||||
appender.Dispose();
|
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));
|
Assert.Throws<ObjectDisposedException>(() => appender.Append(entry));
|
||||||
}
|
}
|
||||||
@ -137,7 +137,7 @@ public class FileAppenderTests
|
|||||||
// 第一次写入
|
// 第一次写入
|
||||||
using (var appender1 = new FileAppender(_testFilePath))
|
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.Append(entry);
|
||||||
appender1.Flush();
|
appender1.Flush();
|
||||||
}
|
}
|
||||||
@ -145,7 +145,7 @@ public class FileAppenderTests
|
|||||||
// 第二次写入
|
// 第二次写入
|
||||||
using (var appender2 = new FileAppender(_testFilePath))
|
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.Append(entry);
|
||||||
appender2.Flush();
|
appender2.Flush();
|
||||||
}
|
}
|
||||||
@ -161,7 +161,7 @@ public class FileAppenderTests
|
|||||||
{
|
{
|
||||||
using (var appender = new FileAppender(_testFilePath))
|
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.Append(entry);
|
||||||
appender.Flush();
|
appender.Flush();
|
||||||
|
|||||||
@ -39,7 +39,7 @@ public class JsonLogFormatterTests
|
|||||||
public void Format_WithException_ShouldIncludeExceptionDetails()
|
public void Format_WithException_ShouldIncludeExceptionDetails()
|
||||||
{
|
{
|
||||||
var exception = new InvalidOperationException("Test exception");
|
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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ public class JsonLogFormatterTests
|
|||||||
["UserName"] = "TestUser",
|
["UserName"] = "TestUser",
|
||||||
["IsActive"] = true
|
["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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public class JsonLogFormatterTests
|
|||||||
["Key1"] = null,
|
["Key1"] = null,
|
||||||
["Key2"] = "value"
|
["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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ public class JsonLogFormatterTests
|
|||||||
|
|
||||||
for (int i = 0; i < levels.Length; i++)
|
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 result = _formatter.Format(entry);
|
||||||
|
|
||||||
var doc = JsonDocument.Parse(result);
|
var doc = JsonDocument.Parse(result);
|
||||||
@ -144,7 +144,7 @@ public class JsonLogFormatterTests
|
|||||||
public void Format_WithSpecialCharacters_ShouldEscapeCorrectly()
|
public void Format_WithSpecialCharacters_ShouldEscapeCorrectly()
|
||||||
{
|
{
|
||||||
var message = "Test \"quoted\" and \n newline";
|
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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ public class JsonLogFormatterTests
|
|||||||
["Null"] = null,
|
["Null"] = null,
|
||||||
["Array"] = new[] { 1, 2, 3 }
|
["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);
|
var result = _formatter.Format(entry);
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ public class LogEntryTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Constructor_WithAllParameters_ShouldCreateEntry()
|
public void Constructor_WithAllParameters_ShouldCreateEntry()
|
||||||
{
|
{
|
||||||
var timestamp = DateTime.Now;
|
var timestamp = DateTime.UtcNow;
|
||||||
var properties = new Dictionary<string, object?> { ["Key1"] = "Value1" };
|
var properties = new Dictionary<string, object?> { ["Key1"] = "Value1" };
|
||||||
var exception = new InvalidOperationException("Test");
|
var exception = new InvalidOperationException("Test");
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ public class LogEntryTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Constructor_WithNullException_ShouldWork()
|
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);
|
Assert.That(entry.Exception, Is.Null);
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ public class LogEntryTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Constructor_WithNullProperties_ShouldWork()
|
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);
|
Assert.That(entry.Properties, Is.Null);
|
||||||
}
|
}
|
||||||
@ -48,7 +48,7 @@ public class LogEntryTests
|
|||||||
LogContext.Clear();
|
LogContext.Clear();
|
||||||
using (LogContext.Push("ContextKey", "ContextValue"))
|
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();
|
var allProps = entry.GetAllProperties();
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ public class LogEntryTests
|
|||||||
{
|
{
|
||||||
LogContext.Clear();
|
LogContext.Clear();
|
||||||
var properties = new Dictionary<string, object?> { ["PropKey"] = "PropValue" };
|
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();
|
var allProps = entry.GetAllProperties();
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ public class LogEntryTests
|
|||||||
using (LogContext.Push("ContextKey", "ContextValue"))
|
using (LogContext.Push("ContextKey", "ContextValue"))
|
||||||
{
|
{
|
||||||
var properties = new Dictionary<string, object?> { ["PropKey"] = "PropValue" };
|
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();
|
var allProps = entry.GetAllProperties();
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ public class LogEntryTests
|
|||||||
using (LogContext.Push("Key1", "ContextValue"))
|
using (LogContext.Push("Key1", "ContextValue"))
|
||||||
{
|
{
|
||||||
var properties = new Dictionary<string, object?> { ["Key1"] = "PropValue" };
|
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();
|
var allProps = entry.GetAllProperties();
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ public class LogEntryTests
|
|||||||
public void GetAllProperties_WithEmptyPropertiesAndEmptyContext_ShouldReturnEmpty()
|
public void GetAllProperties_WithEmptyPropertiesAndEmptyContext_ShouldReturnEmpty()
|
||||||
{
|
{
|
||||||
LogContext.Clear();
|
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();
|
var allProps = entry.GetAllProperties();
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ public class LogEntryTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void RecordEquality_WithSameValues_ShouldBeEqual()
|
public void RecordEquality_WithSameValues_ShouldBeEqual()
|
||||||
{
|
{
|
||||||
var timestamp = DateTime.Now;
|
var timestamp = DateTime.UtcNow;
|
||||||
var properties = new Dictionary<string, object?> { ["Key1"] = "Value1" };
|
var properties = new Dictionary<string, object?> { ["Key1"] = "Value1" };
|
||||||
|
|
||||||
var entry1 = new LogEntry(timestamp, LogLevel.Info, "TestLogger", "Test message", null, properties);
|
var entry1 = new LogEntry(timestamp, LogLevel.Info, "TestLogger", "Test message", null, properties);
|
||||||
@ -135,7 +135,7 @@ public class LogEntryTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void RecordEquality_WithDifferentValues_ShouldNotBeEqual()
|
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 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);
|
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()
|
public void ShouldLog_WithLevelAboveMinimum_ShouldReturnTrue()
|
||||||
{
|
{
|
||||||
var filter = new LogLevelFilter(LogLevel.Info);
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -23,7 +23,7 @@ public class LogLevelFilterTests
|
|||||||
public void ShouldLog_WithLevelEqualToMinimum_ShouldReturnTrue()
|
public void ShouldLog_WithLevelEqualToMinimum_ShouldReturnTrue()
|
||||||
{
|
{
|
||||||
var filter = new LogLevelFilter(LogLevel.Info);
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -32,7 +32,7 @@ public class LogLevelFilterTests
|
|||||||
public void ShouldLog_WithLevelBelowMinimum_ShouldReturnFalse()
|
public void ShouldLog_WithLevelBelowMinimum_ShouldReturnFalse()
|
||||||
{
|
{
|
||||||
var filter = new LogLevelFilter(LogLevel.Info);
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.False);
|
||||||
}
|
}
|
||||||
@ -42,12 +42,12 @@ public class LogLevelFilterTests
|
|||||||
{
|
{
|
||||||
var filter = new LogLevelFilter(LogLevel.Warning);
|
var filter = new LogLevelFilter(LogLevel.Warning);
|
||||||
|
|
||||||
var traceEntry = new LogEntry(DateTime.Now, LogLevel.Trace, "TestLogger", "Test", null, null);
|
var traceEntry = new LogEntry(DateTime.UtcNow, LogLevel.Trace, "TestLogger", "Test", null, null);
|
||||||
var debugEntry = new LogEntry(DateTime.Now, LogLevel.Debug, "TestLogger", "Test", null, null);
|
var debugEntry = new LogEntry(DateTime.UtcNow, LogLevel.Debug, "TestLogger", "Test", null, null);
|
||||||
var infoEntry = new LogEntry(DateTime.Now, LogLevel.Info, "TestLogger", "Test", null, null);
|
var infoEntry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", "Test", null, null);
|
||||||
var warningEntry = new LogEntry(DateTime.Now, LogLevel.Warning, "TestLogger", "Test", null, null);
|
var warningEntry = new LogEntry(DateTime.UtcNow, LogLevel.Warning, "TestLogger", "Test", null, null);
|
||||||
var errorEntry = new LogEntry(DateTime.Now, LogLevel.Error, "TestLogger", "Test", null, null);
|
var errorEntry = new LogEntry(DateTime.UtcNow, LogLevel.Error, "TestLogger", "Test", null, null);
|
||||||
var fatalEntry = new LogEntry(DateTime.Now, LogLevel.Fatal, "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(traceEntry), Is.False);
|
||||||
Assert.That(filter.ShouldLog(debugEntry), Is.False);
|
Assert.That(filter.ShouldLog(debugEntry), Is.False);
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public class NamespaceFilterTests
|
|||||||
public void ShouldLog_WithMatchingNamespace_ShouldReturnTrue()
|
public void ShouldLog_WithMatchingNamespace_ShouldReturnTrue()
|
||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("GFramework.Core", "MyApp");
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ public class NamespaceFilterTests
|
|||||||
public void ShouldLog_WithNonMatchingNamespace_ShouldReturnFalse()
|
public void ShouldLog_WithNonMatchingNamespace_ShouldReturnFalse()
|
||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("GFramework.Core", "MyApp");
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.False);
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ public class NamespaceFilterTests
|
|||||||
public void ShouldLog_WithExactMatch_ShouldReturnTrue()
|
public void ShouldLog_WithExactMatch_ShouldReturnTrue()
|
||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("GFramework.Core");
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ public class NamespaceFilterTests
|
|||||||
public void ShouldLog_WithPrefixMatch_ShouldReturnTrue()
|
public void ShouldLog_WithPrefixMatch_ShouldReturnTrue()
|
||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("GFramework");
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -62,7 +62,7 @@ public class NamespaceFilterTests
|
|||||||
public void ShouldLog_IsCaseInsensitive()
|
public void ShouldLog_IsCaseInsensitive()
|
||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("gframework.core");
|
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);
|
Assert.That(filter.ShouldLog(entry), Is.True);
|
||||||
}
|
}
|
||||||
@ -72,10 +72,10 @@ public class NamespaceFilterTests
|
|||||||
{
|
{
|
||||||
var filter = new NamespaceFilter("GFramework.Core", "MyApp.Services", "ThirdParty");
|
var filter = new NamespaceFilter("GFramework.Core", "MyApp.Services", "ThirdParty");
|
||||||
|
|
||||||
var entry1 = new LogEntry(DateTime.Now, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null);
|
var entry1 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "GFramework.Core.Logging", "Test", null, null);
|
||||||
var entry2 = new LogEntry(DateTime.Now, LogLevel.Info, "MyApp.Services.UserService", "Test", null, null);
|
var entry2 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "MyApp.Services.UserService", "Test", null, null);
|
||||||
var entry3 = new LogEntry(DateTime.Now, LogLevel.Info, "ThirdParty.Library", "Test", null, null);
|
var entry3 = new LogEntry(DateTime.UtcNow, LogLevel.Info, "ThirdParty.Library", "Test", null, null);
|
||||||
var entry4 = new LogEntry(DateTime.Now, LogLevel.Info, "OtherNamespace", "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(entry1), Is.True);
|
||||||
Assert.That(filter.ShouldLog(entry2), Is.True);
|
Assert.That(filter.ShouldLog(entry2), Is.True);
|
||||||
|
|||||||
@ -59,7 +59,7 @@ public class RollingFileAppenderTests
|
|||||||
// 写入足够多的日志触发轮转
|
// 写入足够多的日志触发轮转
|
||||||
for (int i = 0; i < 20; i++)
|
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);
|
$"This is a test message number {i} with some padding to increase size", null, null);
|
||||||
appender.Append(entry);
|
appender.Append(entry);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ public class RollingFileAppenderTests
|
|||||||
// 写入大量日志触发多次轮转
|
// 写入大量日志触发多次轮转
|
||||||
for (int i = 0; i < 50; i++)
|
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);
|
$"This is a test message number {i} with some padding to increase size significantly", null, null);
|
||||||
appender.Append(entry);
|
appender.Append(entry);
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ public class RollingFileAppenderTests
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 30; i++)
|
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);
|
$"Test message {i} with padding to trigger rolling", null, null);
|
||||||
appender.Append(entry);
|
appender.Append(entry);
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ public class RollingFileAppenderTests
|
|||||||
var appender = new RollingFileAppender(_testFilePath);
|
var appender = new RollingFileAppender(_testFilePath);
|
||||||
appender.Dispose();
|
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));
|
Assert.Throws<ObjectDisposedException>(() => appender.Append(entry));
|
||||||
}
|
}
|
||||||
@ -136,7 +136,7 @@ public class RollingFileAppenderTests
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < 10; i++)
|
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);
|
"This is a longer message to trigger rolling more frequently", null, null);
|
||||||
appender.Append(entry);
|
appender.Append(entry);
|
||||||
}
|
}
|
||||||
@ -153,7 +153,7 @@ public class RollingFileAppenderTests
|
|||||||
{
|
{
|
||||||
using (var appender = new RollingFileAppender(_testFilePath))
|
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.Append(entry);
|
||||||
appender.Flush();
|
appender.Flush();
|
||||||
|
|||||||
@ -34,7 +34,7 @@ public sealed class ConsoleLogger(
|
|||||||
/// <param name="exception">异常信息,可为空</param>
|
/// <param name="exception">异常信息,可为空</param>
|
||||||
protected override void Write(LogLevel level, string message, Exception? exception)
|
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 levelStr = LevelStrings[(int)level];
|
||||||
var log = $"[{timestamp}] {levelStr} [{Name()}] {message}";
|
var log = $"[{timestamp}] {levelStr} [{Name()}] {message}";
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ public class AudioSettings : ISettingsData
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取设置数据最后修改的时间
|
/// 获取设置数据最后修改的时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime LastModified { get; } = DateTime.Now;
|
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从指定的数据源加载音频设置
|
/// 从指定的数据源加载音频设置
|
||||||
|
|||||||
@ -38,7 +38,7 @@ public class GraphicsSettings : ISettingsData
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取设置数据最后修改的时间
|
/// 获取设置数据最后修改的时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime LastModified { get; } = DateTime.Now;
|
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从指定的数据源加载图形设置
|
/// 从指定的数据源加载图形设置
|
||||||
|
|||||||
@ -42,7 +42,7 @@ public class LocalizationSettings : ISettingsData
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取设置数据最后修改的时间
|
/// 获取设置数据最后修改的时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime LastModified { get; } = DateTime.Now;
|
public DateTime LastModified { get; } = DateTime.UtcNow;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从指定的数据源加载本地化设置
|
/// 从指定的数据源加载本地化设置
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public sealed class GodotLogger(
|
|||||||
protected override void Write(LogLevel level, string message, Exception? exception)
|
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 levelStr = LevelStrings[(int)level];
|
||||||
var logPrefix = $"[{timestamp}] {levelStr} [{Name()}]";
|
var logPrefix = $"[{timestamp}] {levelStr} [{Name()}]";
|
||||||
|
|
||||||
|
|||||||
@ -1012,7 +1012,7 @@ public class SaveSystem : AbstractSystem
|
|||||||
Level = 1,
|
Level = 1,
|
||||||
Health = 100,
|
Health = 100,
|
||||||
Position = Vector3.Zero,
|
Position = Vector3.Zero,
|
||||||
CreatedAt = DateTime.Now
|
CreatedAt = DateTime.UtcNow
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -439,7 +439,7 @@ public class EventBridge : AbstractSystem
|
|||||||
this.SendEvent(new PublicPlayerDiedEvent
|
this.SendEvent(new PublicPlayerDiedEvent
|
||||||
{
|
{
|
||||||
PlayerId = e.Id,
|
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)
|
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)
|
if (exception != null)
|
||||||
logMessage += $"\n{exception}";
|
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}");
|
GD.Print($"{timestamp} {prefix} {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -452,7 +452,7 @@ public class GameDataManager
|
|||||||
public void SaveGame(int slotId, SaveData data)
|
public void SaveGame(int slotId, SaveData data)
|
||||||
{
|
{
|
||||||
_saveStorage.Write($"slot_{slotId}", 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);
|
_saveStorage.Write($"slot_{slotId}/version", data.Version);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,13 +639,13 @@ public class CachedStorage : IStorage
|
|||||||
if (!_cacheTimestamps.TryGetValue(key, out var timestamp))
|
if (!_cacheTimestamps.TryGetValue(key, out var timestamp))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return DateTime.Now - timestamp > _cacheExpiry;
|
return DateTime.UtcNow - timestamp > _cacheExpiry;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateCache<T>(string key, T value)
|
private void UpdateCache<T>(string key, T value)
|
||||||
{
|
{
|
||||||
_cache[key] = 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
|
var profile = new GameProfile
|
||||||
{
|
{
|
||||||
PlayerName = playerName,
|
PlayerName = playerName,
|
||||||
LastPlayed = DateTime.Now,
|
LastPlayed = DateTime.UtcNow,
|
||||||
TotalPlayTime = 0
|
TotalPlayTime = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1029,7 +1029,7 @@ public partial class GameManager : Node, IController
|
|||||||
PlayerHealth = Context.GetModel<PlayerModel>().Health.Value,
|
PlayerHealth = Context.GetModel<PlayerModel>().Health.Value,
|
||||||
CurrentLevel = Context.GetModel<GameModel>().CurrentLevel.Value,
|
CurrentLevel = Context.GetModel<GameModel>().CurrentLevel.Value,
|
||||||
Inventory = Context.GetModel<InventoryModel>().GetData(),
|
Inventory = Context.GetModel<InventoryModel>().GetData(),
|
||||||
Timestamp = DateTime.Now,
|
Timestamp = DateTime.UtcNow,
|
||||||
Version = 1
|
Version = 1
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -1096,7 +1096,7 @@ public class AutoSaveSystem : AbstractSystem
|
|||||||
// 保存到自动存档槽
|
// 保存到自动存档槽
|
||||||
var storage = Context.GetUtility<IStorage>();
|
var storage = Context.GetUtility<IStorage>();
|
||||||
storage.Write("autosave", saveData);
|
storage.Write("autosave", saveData);
|
||||||
storage.Write("autosave/timestamp", DateTime.Now);
|
storage.Write("autosave/timestamp", DateTime.UtcNow);
|
||||||
|
|
||||||
Logger.Debug("Auto-save completed successfully");
|
Logger.Debug("Auto-save completed successfully");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -144,7 +144,7 @@ storage.Write("user://saves/slot_001.dat", saveData);
|
|||||||
|
|
||||||
// 存储调试信息(普通路径)
|
// 存储调试信息(普通路径)
|
||||||
var debugLog = new DebugLog { /* ... */ };
|
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,
|
MaxHealth = 100,
|
||||||
Mana = 50,
|
Mana = 50,
|
||||||
MaxMana = 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)
|
public record PlayerCreatedDomainEvent(PlayerId PlayerId, PlayerName PlayerName, PlayerClass Class)
|
||||||
: IDomainEvent
|
: IDomainEvent
|
||||||
{
|
{
|
||||||
public DateTime OccurredAt { get; } = DateTime.Now;
|
public DateTime OccurredAt { get; } = DateTime.UtcNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
public record PlayerLevelUpDomainEvent(PlayerId PlayerId, PlayerName PlayerName, int NewLevel, int OldLevel)
|
public record PlayerLevelUpDomainEvent(PlayerId PlayerId, PlayerName PlayerName, int NewLevel, int OldLevel)
|
||||||
: IDomainEvent
|
: 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 record AggregateSnapshot(string StreamId, int Version) : IDomainEvent
|
||||||
{
|
{
|
||||||
public DateTime OccurredAt { get; } = DateTime.Now;
|
public DateTime OccurredAt { get; } = DateTime.UtcNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ConcurrencyException : Exception
|
public class ConcurrencyException : Exception
|
||||||
@ -855,7 +855,7 @@ public class PlayerEventHandler : IEventHandler<PlayerLevelUpEvent>,
|
|||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
player.IsAlive = false;
|
player.IsAlive = false;
|
||||||
player.DeathTime = DateTime.Now;
|
player.DeathTime = DateTime.UtcNow;
|
||||||
_playerRepository.Update(player);
|
_playerRepository.Update(player);
|
||||||
|
|
||||||
// 发送通知
|
// 发送通知
|
||||||
@ -1160,7 +1160,7 @@ public class ChatService : IChatService
|
|||||||
{
|
{
|
||||||
PlayerId = playerId,
|
PlayerId = playerId,
|
||||||
Message = FilterMessage(message),
|
Message = FilterMessage(message),
|
||||||
Timestamp = DateTime.Now,
|
Timestamp = DateTime.UtcNow,
|
||||||
Channel = channel
|
Channel = channel
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1176,7 +1176,7 @@ public class ChatService : IChatService
|
|||||||
{
|
{
|
||||||
PlayerId = "system",
|
PlayerId = "system",
|
||||||
Message = message,
|
Message = message,
|
||||||
Timestamp = DateTime.Now,
|
Timestamp = DateTime.UtcNow,
|
||||||
Channel = "system"
|
Channel = "system"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -569,7 +569,7 @@ public partial class SmartResourceLoader : Node, IController
|
|||||||
{
|
{
|
||||||
Path = path,
|
Path = path,
|
||||||
Priority = priority,
|
Priority = priority,
|
||||||
RequestTime = DateTime.Now
|
RequestTime = DateTime.UtcNow
|
||||||
};
|
};
|
||||||
|
|
||||||
_loadQueue.Enqueue(request);
|
_loadQueue.Enqueue(request);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user