草庐IT

c# - 我应该在每个类还是在基类中声明一次 log4net 记录器?

声明一个记录器并在基类中调用LogManager.GetLogger似乎更干净,这样每个继承人都可以使用它。但是,在log4net站点和其他博客上,如thisblogpost它声明最好为每个类声明一个记录器,因为:Youcanuseloggersthiswaytoisolateloggingconcernsacrossyourobjects,andIwhollyrecommendyoudoso.Thiswillenableyoutothrottleanddirectlogoutputfromindividualloggersusinglog4net'shierarchicalconfi

c# - log4net的线程安全

log4net是否是线程安全的似乎有一些讨论,共识是框架是线程安全的,但appender不是,需要正确使用才能实现线程安全。有人可以对此有所了解,并可能举例说明以线程安全的方式使用RollingFileAppender吗?是否需要将其插入上下文?不知何故被锁定,还是什么? 最佳答案 根据这个link,RollingFileAppender是线程安全的(就日志而言)。这是来自log4net的开发人员之一。他特别指出,您的代码中不需要这样的锁定:lock(logger){logger.Info("Hello!");}

c# - log2(int) 和 log2(float) 的最快实现

问题是是否有其他(和/或更快)基本2log的实现?应用log2(int)和log2(float)操作在许多不同的上下文中非常有用。仅举几例:压缩算法、3d引擎和机器学习。在几乎所有这些上下文中,它们都用于调用数十亿次的低级代码......尤其是log2(int)操作非常有用。因为我发现自己一直在使用log2,所以我不想在这里给出我正在处理的特定应用程序。相同的是,这是一个真正的性能消耗者(如各种应用程序的性能测试所示)。对我来说,关键是尽快完成。测试所有实现的完整源代码添加在底部,因此您可以自己查看。当然……至少运行3次测试,并确保计数器足够大以达到几秒钟。此外,我执行“添加”操作以确

c# - log4net BufferingForwardingAppender 性能问题

编辑2:我已经解决了这个问题(见下面的答案)请注意,这个问题可能会影响所有装饰有BufferingForwardingAppender的附加程序以及所有继承自BufferingAppenderSkeleton的附加程序(分别为:AdoNetAppender、RemotingAppender、SmtpAppender和SmtpPickupDirAppender)*我正在做一些非常基本的log4net工作台,我尝试用BufferingForwardingAppender装饰RollingFileAppender。我在通过BufferingForwardingAppender而不是直接通过R

c# - 如何在 C# 中使用 'do' ByVal

据我了解,C#通过引用将参数传递给方法。在VB.NET中,您可以使用ByVal和ByRef指定它。默认值为ByVal。这是为了与VisualBasic6.0兼容,还是只是随机的?另外,我如何指定在C#中使用什么?我有点喜欢按值传递参数的想法。 最佳答案 C#中的参数默认是按值传递的。没有修饰符来明确这一点,但是如果您添加ref/out参数是通过引用。这里通常的混淆是:按值传递值类型(调用者看不到值类型的更改,但理想情况下值类型无论如何都应该是不可变的)通过引用传递值类型(调用者可以看到值类型的更改,但理想情况下值类型无论如何都应该是

c# - Entity Framework 核心 : Log queries for a single db context instance

使用EFCore(或与此相关的任何ORM)我想跟踪ORM在我的软件中的某些操作期间对数据库进行的查询次数。我之前在Python下使用过SQLAlchemy,在那个堆栈上,这很容易设置。我通常有单元测试,这些单元测试针对内存中的SQLite数据库断言针对场景进行的查询数量。现在我想使用EFCore做同样的事情,并查看了Loggingdocumentation.在我的测试设置代码中,我按照文档所述进行操作:using(vardb=newBloggingContext()){varserviceProvider=db.GetInfrastructure();varloggerFactory=

C# Windows 窗体 : On Close Do [Process]

如何让我的窗体在关闭时执行某些操作。 最佳答案 处理FormClosed事件。为此,转到“属性”窗口中的“事件”选项卡并双击FormClosed事件为其添加处理程序。然后您可以将代码放入生成的MyForm_FormClosed处理程序中。您也可以通过覆盖OnFormClosed方法来做到这一点;为此,请在代码窗口中键入overrideonformcl并从IntelliSense中键入OnFormClosed。如果您希望能够阻止表单关闭,请改为处理FormClosing事件,并将e.Cancel设置为true.

c# - 温莎城堡 : How do I inject all implementations of interface into a ctor?

我编写了一个由多个类实现的接口(interface)。我想编写一个服务类,它将所有已注册的实现注入(inject)到它的构造函数中。我能想到的唯一解决方案是在ctor中调用服务定位器并要求它Resolve()所有实现。理想情况下我想要这样的东西-interfaceIVehicle{voidStart();}classCar:IVehicle{publicvoidStart(){Console.WriteLine("Carstarted.");}}classTruck:IVehicle{publicvoidStart(){Console.WriteLine("Truckstarted."

c# - 是否可以在 log4net 配置中使用通配符记录器名称?

在我的应用程序中,我使用log4net,所有类型都根据它们的类型创建自己的记录器——例如:privatestaticreadonlyILogLog=LogManager.GetLogger(typeof(Program));在开发过程中,我将根记录器保留在DEBUG上,以便从我的代码中捕获所有日志输出。然而,第三方组件也使用相同的方法,但每秒生成数百条日志消息,我对其中任何一条都不感兴趣。是否可以在记录器配置中使用某种通配符,以强制所有记录器仅在WARN时记录,例如:[上面的确切示例,使用*不起作用] 最佳答案 您可以只指定命名空间

c# - 具有 Application Insights 的 Log4Net

我正在尝试配置我的azureasp.net网站以将log4net跟踪发送到AzureApplicationInsights。我可以在我的azure控制台页面View等中看到,因此我知道它工作正常。我还可以看到log4net跟踪,当配置文件处理程序时,但是当配置log4net以使用应用程序洞察处理程序时,我没有看到任何log4net条目出现在应用程序洞察仪表板中,在构建或运行时没有错误或警告-只是仪表板中没有结果。我查看了Fiddler中的网络流量,我可以看到页面浏览数据等被发送到应用程序洞察,但没有看到log4net跟踪流量,因此我怀疑这是一个配置问题。另外,我在我的主项目中尝试了Te