gpt4 book ai didi

c# - Log4Net:如何将程序内部的日志记录结果输出到一个变量中?

转载 作者:行者123 更新时间:2023-11-30 20:49:16 27 4
gpt4 key购买 nike

我正在尝试学习使用 Log4Net 来改进我的程序中的日志记录技术。我已经阅读了 Log4Net 网站上提供的文档,但是我有这些问题。

这是 Log4Net 网站上由 BasicConfigurator.Configure() 生成的示例程序中显示的最简单的输出。

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

我的程序已经有一个 Pane (在 Debug模式下)来显示循环通过大量异步尝试的程序流程。所以当我运行它时,我可以看到程序的流程(典型的批量调试方法)。

在这个级别,据我所知,通过使用 Log4Net,我可以在那些时刻收集日志,并且可以将这些日志附加到许多不同的输出方法中,例如控制台外部文件, db 等。这会导致代码加倍。在每个测试点中,一行将日志输出到 UI,另一行用于记录 Log4Net。

有什么方法可以将其中一个 appender 的内容(例如上面显示的那个)输出到字符串类型或类似类型的变量,以便能够在运行时显示它?

我不确定您如何在 WPF 应用程序中看到控制台的输出 。将 Log4Net 输出到一个文件中,然后将它的比赛打印回一个字符串似乎很有趣。


更新

Show output from: 下拉菜单设置为“Debug”。非常感谢@Aron 指出这一点。

最佳答案

Log4net 带有 UDPAppender,这是一种低调的方式,可以将您的日志内容传输到网络上的任何监听器。我建议使用它作为将日志推送到用户界面的一种方式。

<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
<remoteAddress value="127.0.0.1" /> <!-- local for the demo on my machine -->
<remotePort value="10000" />
<layout type="log4net.Layout.PatternLayout" value="%-5level %logger [%ndc] - %message%newline" />
</appender>

在 UI 中,在 WPF 应用程序的后台线程中将监听器挂接到这些消息可让您按自己喜欢的方式显示它们,例如作为 x 个最新日志上的滑动窗口,或将所有日志推送到您需要的 Pane 在你的问题中提到。

// launch this in a background thread
private static void UDPListen()
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
var udpClient = new UdpClient(10000);

while (true)
{
var buffer = udpClient.Receive(ref remoteEndPoint);
var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer);
// write the log to your pane
}
}

有趣的是,许多 log4net 的“仪表板”都使用这种方法来监控应用程序,因此如果您愿意,可以在应用程序的发布版本中删除该面板,然后从网络上的另一台机器上查看您的应用程序。


编辑:在任何应用程序中写入控制台writes to the standard output stream程序的一部分,您可以将其通过管道传输到其他进程;例如,启动使用以下语法写入控制台的 wpf 应用程序会将消息记录到 log.txt 文件

myApp.exe > log.txt

(以下示例感谢@Aron)作为一个更有用的示例,Visual Studio 将您所连接的程序的标准输出通过管道传输到其输出窗口中,因此发送到 ConsoleAppender 的任何内容都将出现在输出窗口中。

因此,如果您重用程序的默认输出,控制台附加程序会很有用,但没有任何强制您使用它。

关于c# - Log4Net:如何将程序内部的日志记录结果输出到一个变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23882230/

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