到目前为止,我还没有与配置文件联系。因此,与此相关的是,我认为我在初次使用log4net时缺少一些基本知识以完全理解。
这是我已经读过的内容:
https://stackify.com/log4net-guide-dotnet-logging
https://csharp.today/log4net-tutorial-great-library-for-logging
log4net configuration with [assembly:]
让我们说解决方案中有三种不同类型的项目,每个项目都附加了log4net:
1)我应将以下几行准确放置在哪里?在我想登录的每个班级?
private static readonly log4net.ILog log
= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
2)我想知道如何在要使用它的任何地方上方获得静态对象。因此,我在项目LowLevel中添加了如下所示的类,希望只是“使用”会有所帮助。
using System;
using System.Collections.Generic;
using System.Text;
using log4net;
namespace LowLevel.NuGet.Log4Net
{
public class Log4Net
{
// Avoiding overhead by logging, reducing use of CPU via static LogManager object.
private static readonly log4net.ILog _log
= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
//
// Properties
//
public static log4net.ILog Log { get => _log; }
}
}
但是我建议我不会工作,因为.NET Standard 2.0项目没有自己的配置文件。
非常感谢。
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我真的不知道为什么马特建议这个可憎的东西(恕我直言)。是的,您可以简单地将其复制并粘贴到您要记录的每个类中,但是反射是slow。
尽管事实是,LogManager应该为同一类提供相同的Logger
实例,但is建议将其设为静态,以避免调用LogManager。这应该提高性能,尤其是当您有经常实例化的日志记录类时。
在log4net文档(以及我自然会做的事情)中,替代方法是这样:
private static readonly ILog log = LogManager.GetLogger(typeof(ClassName));
缺点:您在那里有一个类名,因此没有简单的C&P。
BUT如果使用重构功能更改类名,Visual Studio将对其进行更改,并且您可以定义快捷方式/模板来自动地填充类名。但是,即使您手动执行此操作,与反射相比,我还是会喜欢它。
供参考:typeof operator和lang-reference: typeof
使用库进行日志记录配置实际上没有任何意义。它们不会“独立”执行。您将要做的是利用名称空间。
[给出库A和B,名称空间为“ my.prj.A”和“ my.prj.B”,以及“主”应用程序“ my.prj.App”,那么您将拥有一个配置该应用程序。但是,您仍然可以应用其他设置/附加程序:
log4net跨越一棵配置继承树(如其“配置”和“入门”文档中所述)。因此,您将always拥有一个根记录器。如果没有其他记录器,这是默认值或后备选项。
然后,您可以定义子记录器(我的说法,不确定他们叫什么),例如:
logger“ my.prj”,如果没有其他特定的记录器适用,则将应用于从typeof(my.prj.*.SomeClass)
创建的所有记录器。没道理吗是的,它可以-它将not适用于例如第三方库。如果他们碰巧使用log4net,它们将退回到root。
logger“ my.prj.A”将应用于库A中的所有类。
FeatureNamespace
中的所有类。...你明白了。
BTW:使用... = LogManager.GetLogger("MySuperSpecialLogger");
可以为“ MySuperSpecialLogger”定义一个配置,该配置在调试时会派上用场,因为您可以“遵循”类之间的某些流,并且可以轻松地按记录器名称过滤日志或使用它写入其他文件等或者,您可以汇总loginput以获得文档。例如,您有3种登录方法,但需要记录尝试和成功/失败的日志:您可以为此创建一个命名记录器,并将其连接到自己的附加程序,在3种实现中获取它,并编写日志登录尝试/成功/失败的输出-完成。
对libs进行no配置也有其他效果: