gpt4 book ai didi

c# - 输出自 Log4Net 中最后一条消息以来耗时

转载 作者:行者123 更新时间:2023-12-02 01:15:47 25 4
gpt4 key购买 nike

我在 C# 控制台应用程序中使用 log4net,我想知道是否可以让每个日志条目都包含自上次日志条目以来耗时?

现在,我正在使用 %-4timestamp(我相信这是自日志开始以来的毫秒数),因此我可以稍后浏览日志并计算条目和上一个条目。不过,我希望有一些东西可以用来让耗时显示在每条日志消息中。

这可能吗?

提前致谢!

编辑为了澄清耗时,我指的是自上次 log4net 记录消息以来耗时量。

例如,如果我有这个日志:

0    [main] INFO  MyApp  - Entering application.
36 [main] DEBUG Com.Foo.Bar - Did it again!
51 [main] INFO MyApp - Exiting application.

那么我想要的附加信息是这样的:

0   (0)  [main] INFO  MyApp  - Entering application.
36 (36) [main] DEBUG Com.Foo.Bar - Did it again!
51 (15) [main] INFO MyApp - Exiting application.

我在括号之间添加的额外值是自上次记录以来耗时。

最佳答案

我知道这是旧的,但我只是在寻找相同的东西并且不喜欢包装记录器。我认为更好的方法是使用 PatternConverter:

class DeltaPatternConverter : PatternLayoutConverter
{
private DateTime _last = DateTime.MinValue;

protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
DateTime now = DateTime.Now;
int ms = 0;
if (_last != DateTime.MinValue)
{
ms = (int)Math.Round((now - _last).TotalMilliseconds, 0, MidpointRounding.ToEven);
}
writer.Write("+" + ms);
_last = now;
}
}

像这样使用它:

var layout = new PatternLayout("%7timestampms (%7deltams) [%thread] %-5level %logger - %message%newline");
layout.AddConverter("delta", typeof(DeltaPatternConverter));
layout.ActivateOptions();

或者像这样:

<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="delta"></name>
<type value="My.Cool.Project.DeltaPatternConverter"></type>
</converter>
<conversionPattern value="%7timestampms (%7deltams) [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>

字符串 delta 将被转换。

关于c# - 输出自 Log4Net 中最后一条消息以来耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com