Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET日志框架设计_.net_Logging_Log4net - Fatal编程技术网

.NET日志框架设计

.NET日志框架设计,.net,logging,log4net,.net,Logging,Log4net,我们在当前的应用程序日志记录中使用log4net,但我不喜欢当前围绕它构建日志框架的方式。例如,它当前有一个单点故障,如果出于任何原因它无法连接到日志服务器,那么您就没有日志记录。我希望将其构建为一个灵活但简单的框架,允许我指定一个或多个“备份”追加器,以便在主追加器出现故障时使用(例如,如果日志服务器关闭,则改为写入文件) 你们有没有人偶然发现过这样的东西,你们喜欢并且写得很好?我不介意自己动手,但我非常喜欢尝试不去重新发明轮子 谢谢我没有遇到任何已经建成的东西。我建议您创建自己的append

我们在当前的应用程序日志记录中使用log4net,但我不喜欢当前围绕它构建日志框架的方式。例如,它当前有一个单点故障,如果出于任何原因它无法连接到日志服务器,那么您就没有日志记录。我希望将其构建为一个灵活但简单的框架,允许我指定一个或多个“备份”追加器,以便在主追加器出现故障时使用(例如,如果日志服务器关闭,则改为写入文件)

你们有没有人偶然发现过这样的东西,你们喜欢并且写得很好?我不介意自己动手,但我非常喜欢尝试不去重新发明轮子


谢谢

我没有遇到任何已经建成的东西。我建议您创建自己的appender,它使用现有的appender,但在属性中添加失败时的操作。可以使用作为新appender的基类,然后从中调用要使用的appender的append函数

因此,当log4使用您的记录器时,它将是这样的(注意:这并不完整,但应该给您一个起点):


我希望这能帮助您开始,如果您完成了,您也可以在这里发布解决方案。

事实上,我决定改用NLog,因为log4net的设置非常麻烦。NLog更易于使用,更易于设置,并且代码库保持最新(log4net几乎被放弃)

两者的结合支持这一点:记录器将所有事件缓冲到一组滚动文件中,然后异步读取这些文件,并使用HTTP/S将其发送到服务器

配置看起来像:

var log = new LoggerConfiguration()
    .WriteTo.Seq("http://my-seq-server", bufferBaseFilename: "C:\\Logs\\myapp")
    .CreateLogger();

我在这两个项目上都有工作-渴望得到一些关于这种方法如何符合要求的反馈(如果你足够幸运,能够切换到Serilog;)

NLog允许指定多个日志目标。log4net不也允许吗?我认为OP想要的是有多个日志目标,但只有在主日志目标不可用时才使用备用日志目标。可能重复:谢谢Kevin,这是一个很好的方法…我实际上写了一些与log4j包类似的东西,但那可能是5-6年前的事了,不幸的是我找不到该死的代码。如果我发现了一些东西,或者只是白手起家地写下来,我一定会发回这里,干杯
var log = new LoggerConfiguration()
    .WriteTo.Seq("http://my-seq-server", bufferBaseFilename: "C:\\Logs\\myapp")
    .CreateLogger();