- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道 NLog 中内置了一些日志级别,例如跟踪、信息、致命等
我想定义一些新的,例如“DBLog”,并且只能将所有带有 DBlog 的日志配置为针对某个目标。
有办法吗?或者我必须定义自定义日志?
最佳答案
@SemVanmeenen 是对的,NLog 不允许添加自定义级别(即扩展 LogLevel 类中的可能值)。另外,鉴于级别的工作方式,至少在 NLog 中,每个级别通常表示消息的优先级。因此,如果您将一些(或所有)记录器配置为仅记录错误和更高级别的消息,则不会记录任何跟踪、调试、信息和警告消息。 DBLog 级别适合哪里?这似乎更像是一个“类别”(可以有点类似于记录器名称)而不是一个级别。
您真的需要一个特殊级别(或多个级别)来记录诸如“DBLog”之类的内容吗?为什么不在您的配置文件中定义另一个名为“DBLog”的记录器?这样您就可以使用过滤和 Targets 将这些日志发送到特定的 Target 或打开或关闭该记录器。 See this link for some examples of stuff you can do with NLog configuration.
NLog 和 log4net 中最常见的模式之一是每个类都有一个记录器,如下所示:
class MyClass
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public void DoSomething(int x, int y);
{
logger.Info("Doing something. x = {0}, y = {1}", x, y);
//Or
logger.Log(LogLevel.Info, "Doing something. x = {0}, y = {1}", x, y);
}
}
您还可以使用任意记录器名称:
class MyDbClass
{
private static readonly Logger logger = LogManager.GetLogger("DbStuff");
public void DoSomething(int x, int y);
{
logger.Info("Doing something. x = {0}, y = {1}", x, y);
//Or
logger.Log(LogLevel.Info, "Doing something. x = {0}, y = {1}", x, y);
}
}
class MyOtherDbClass
{
private static readonly Logger logger = LogManager.GetLogger("DbStuff");
public void DoSomething(int x, int y);
{
logger.Info("Doing something. x = {0}, y = {1}", x, y);
//Or
logger.Log(LogLevel.Info, "Doing something. x = {0}, y = {1}", x, y);
}
}
在第二个示例中,两个类都使用相同的记录器(“DbStuff”),并且都可以根据该记录器名称进行控制(记录级别、目标等)。
您还可以在同一个类中使用不同的记录器(也许默认情况下您使用“每类”记录器样式,但您也可以定义一些“横切”记录器,以便更容易地记录和控制跨类的类似信息类)。您可能有一个名为“SQL”或“PERFORMANCE”的记录器,您偶尔会使用它来记录您希望在类级别以外的级别控制的特定信息。
使用不同的记录器名称,您当然可以将日志消息路由到不同的目标,而无需定义新的日志级别。
如果这没有帮助,也许您可以在您的问题中详细说明您到底想做什么。您希望自己可以编写什么样的日志记录代码,但您觉得自己现在无法编写?
[更新]
<logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" />
<logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" />
<logger name="Name.Space.*" writeTo="f3,f4" />
<logger name="Name.Space.*" minlevel="Warn" writeTo="f3,f4" />
<logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" />
假设 f1、f2、f3 和 f4 是文件目标。
第 1 行将使 Class1 的记录器写入 f1 目标以获取调试和更高级别的消息(即,将跳过跟踪)。
第 2 行将使 Class1 的记录器仅将调试和错误级别的消息写入 f1 目标(即,将跳过 Trace、Info、Warn 和 Fatal)
第 3 行将导致命名空间 Name.Space 中所有类的记录器写入目标 f3 和 f4,无论级别如何。
第 4 行将导致命名空间 Name.Space 中所有类的记录器仅在日志级别为 Warn 或更高时写入目标 f3 和 f4(即,将跳过 Trace、Debug 和 Info)
第 5 行将导致命名空间 Name.Space 中所有类的记录器拒绝级别介于 Debug 和 Error 之间的任何消息。它们被拒绝,因为没有 writeTo 子句。由于 final=true
这些示例展示了如何在记录器级别进行过滤。您可以使用 FilteringTargetWrapper 在目标级别进行进一步过滤。我没有使用过它,但是这里有一个配置 FilteringTargetWrapper 的例子:
Most useful NLog configurations
我从 NLog 1.0 刷新安装附带的帮助文件中获取了这些示例。我还没有安装 NLog 2.0,因为我正处于一个项目的中间,我更愿意等到 NLog 2.0 结束测试版后再转向它。如果您使用的是 NLog 2.0,并且帮助文件没有比 NLog 网站上更好的示例,您可以考虑至少安装 NLog 1.0 帮助。您可以在此处获得 NLog 1.0 帮助:http://nlog.codeplex.com/releases/view/32601
关于c# - Nlog 和自定义级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057061/
我想更改 nlog 布局,以便显示两个条目之间的时间。这样的布局可能吗? 这是我现在的输出,如果在时间旁边有自之前进入以来经过的秒数,那就太好了。 2012-05-20 19:18:41.09
使用 NLog v4.4.12,我的 App.config 中有这个 这是我的 Variables.xml 文件内容 但是我在启动我的应
我有一个名为 的自定义布局渲染器工作 .它提供了几个项目,它们在我们的 app.config 中是这样使用的: 当
NLog 是否可以发出多行消息,以便每行都根据当前布局进行格式化?例如。 2015-12-17 11:37:38.0845 | 64 | INFO | ------------------------
我刚开始玩 nlog,注意到 nlog.xml 文件与 nlog.dll 一起被带到了应用程序的输出文件夹中。我不太清楚该文件的用途以及我是否应该将它作为我的应用程序安装的一部分或可以安全地删除它。有
是否可以/容易使用 Rhino Mocks 或类似方法模拟 NLog 日志方法? 最佳答案 使用 Nuget:install-package NLog.Interface 然后:ILogger log
目标: 当我打电话时Logger.Error("some message", e) ,其中 e是一些异常对象,它只记录消息,不记录异常信息。我需要它来输出异常消息和堆栈跟踪。任何想法我做
在生产环境中更改 nLog 日志记录级别的最佳做法是什么。我可以更改它的唯一方法是修改 NLog.config 文件,然后回收应用程序池。应该这样吗? 谢谢, 克里斯 最佳答案 如果你想改变日志配置而
我已经创建了一个通用实现 ILogger 并在这个包装器中实现了 NLog 实现方法。我的问题是我在我的解决方案中为整个 namspace 启用了错误严重性,但我还希望对“Employee”命名空间下
我在 NLog.config 中配置了两条规则: 我正在尝试使用以下代码写入第一个: LogEventInfo eventInfo = new LogEventInfo(); eventInfo.
我正在尝试将一堆应用程序使用的现有日志记录库转换为使用 NLog。现有的日志记录代码没有间接性,日志记录调用直接从调用者到 Web 服务调用。现有的日志记录代码是作为静态单例实现的。我需要以这样一种方
我有一个泛型类: public class GenericClass { private static readonly Logger Logger = LogManager.GetCurre
在我看来,NLog 中的内置日期格式没有正确包含时区。我们需要用尾随 Z 记录 UTC 时间,以便 Splunk 知道本地时间是什么,例如: {日期:universalTime=true:format
我们提供了一个用于日志记录的框架程序集,它在内部使用 nlog。我们还提供了一个嵌入式 nlog 配置作为我们程序集中的资源,并在启动时读取它(包装器中的静态构造函数,它使用 XmlLoggingCo
我这样编码: private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); public MyClass()
现在我这样做 LogManager.DisableLogging(); 但这需要再次部署我的代码,如何从 nlog 配置文件中禁用登录。 最佳答案 关于nlog - 从 Nlog.config 发
我想弄清楚如何阻止 NLog 替换我正在记录的字符串中的换行符。我希望输出包含所有换行符,而不是将整个输出放在一行中。 有人可以帮忙吗? 配置: 代码
作为从 NLog 切换到 Serilog 的一个步骤,我想重定向 NLog 的 LogManager.GetLogger(name) 的标准调用的标准接线,以桥接任何记录到 NLog 的代码,以便立即
为此,我需要一份详细/分步指南。我已经阅读了简要指南 ( example here ) 并下载了示例代码,但我仍然无法弄清楚如何使用 Nlog 登录到 CloudWatch。 当我在 NLog.con
我将 NLog 错误电子邮件文本的内容放入一个文件中,并使用 FileContents 渲染器进行渲染。如果布局渲染器产生空字符串,我想做的是隐藏 html 输出的某些部分 Request ticke
我是一名优秀的程序员,十分优秀!