日志Nlog

article/2025/10/11 14:28:05

       在性能代码性能优化的时候,马丹妹给予指导时,用了日志测试时间这个技术,很是吸引人,而且她也写了系列博客,看了师姐的博客后实践,然后写一篇简单的博客。

师姐系列博客地址:http://blog.csdn.net/u010176014/article/category/5834015

        NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。NLog完全实现了我们上面的期望目标,并且还远远不止这些……

NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则(rules)。记录跟踪信息的目标(target)可以为如下几种形式:

      1.文件

      2.文本控制台

      3.Email

      4.数据库

      5.网络中的其它计算机(通过TCP或UDP)

      6.基于MSMQ的消息队列

      7.Windows系统日志

除此之外,每一条跟踪消息都可以自动带有上下文信息(contextual information),并将其发送给记录跟踪信息的目标。这些上下文信息可以包含如下内容:

      1.当前的日期和时间(多种格式)

      2.记录等级

      3.来源名称

      4.输出跟踪消息的方法的堆栈信息

      5.环境变量的值

      6.异常的详细信息

      7.计算机、进程和线程名称

      8.其他

 

每条跟踪信息都包含一个记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:

      Trace - 最常见的记录信息,一般用于普通输出

      Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序

      Info - 信息类型的消息

      Warn - 警告信息,一般用于比较重要的场合

      Error - 错误信息

      Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

现在用实例来说明:

 一、输出到控制台

第一步:添加对NLog的引用

共添加两个文件,下图所示

方法1、Nuget:

 

 

 

方法2:、菜单中工具-库程序包管理器-程序包管理器控制台,输入Install-Package NLog和Install-Package NLog.config即可

引用成功后结果:

 

 

第二步:配置NLog.config文件

NLog.config中共包含两个节点,targets和rules。我们需要配置的也是这两个节点

 代码如下:


<span style="font-size:18px;"><?xml version="1.0"encoding="utf-8" ?> 
<nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsdNLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off"internalLogFile="c:\temp\nlog-internal.log" > <!-- optional, add some variabeles https://github.com/nlog/NLog/wiki/Configuration-file#variables --> <variable name="myvar" value="myvalue"/> <targets> <!--添加一个新条目让日志输出到控制台中,并添加必要的输出布局(layout)--> <target name="console" xsi:type="Console"layout="${longdate}|${level}|${message}"/> <!--说明 xsi:type="Console"指定输出到控制台;layout指定输出文件内容的样式${longdate}是日期(具体到毫秒),${level}是日志的等级;${message}是具体要输出的内容。--> </targets> <rules> <!--添加必要的规则--> <logger name="*" writeTo="console"/> <!--我个人设置的规则是,将所有记录的信息输出至控制台--> </rules> 
</nlog></span>


第三步:输出

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
namespace ConsoleApplication1
{class Program{private static Logger logger = LogManager.GetCurrentClassLogger();//建立一个日志对象static void Main(string[] args){logger.Trace("输出一条记录信息成功!");//最常见的记录信息,一般用于普通输出  logger.Debug("输出一条Debug信息成功!"); //同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序  logger.Info("输出一条消息类型信息成功!");//信息类型的消息  logger.Warn("输出一条警告信息成功");//警告信息,一般用于比较重要的场合  logger.Error("输出一条错误信息成功!");//错误信息 logger.Fatal("输出一条致命信息成功!");//致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。}}
}</span>


执行结果:

 

 

2、输出到文件:

其它不变,只是修改NLog.config配置文件:

<span style="font-size:18px;"><targets> <!--说明 xsi:type="File"指定输出到文件类型;fileName指定输出文件的存放位置和文件名(可自定义),其中 ${basedir}是程序所在的路径; ${shortdate}是日期(具体到日)。  layout指定输出文件内容的样式  ${level}是日志的等级; ${longdate}是日期(具体到毫秒), ${message}是具体要输出的内容。--> <target name="Info" xsi:type="File"fileName="${basedir}/log/test.${shortdate}.log"layout="${longdate} [${level}]: ${message}"/> </targets> <rules> <logger name="*" writeTo="Info"/> </rules></span>

结果是:

 

3、输出到数据库:

配置文件修改为:

 

<span style="font-size:18px;"><?xml version="1.0"encoding="utf-8" ?>
<nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsdNLog.xsd"autoReload="true"throwExceptions="false"internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"><!-- optional, add some variabeleshttps://github.com/nlog/NLog/wiki/Configuration-file#variables--><variable name="myvar" value="myvalue"/><!--Seehttps://github.com/nlog/nlog/wiki/Configuration-fileforinformation on customizing logging rules and outputs.--><targets><!--add your targets hereSee https://github.com/nlog/NLog/wiki/Targets for possible targets.See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possiblelayout renderers.--><!--添加一个新条目让日志输出到控制台中,并添加必要的输出布局(layout)--><!--<target name="console" xsi:type="Console"layout="${longdate}|${level}|${message}"/>--><!--说明 xsi:type="Console"指定输出到控制台;layout指定输出文件内容的样式${longdate}是日期(具体到毫秒),${level}是日志的等级;${message}是具体要输出的内容。--><!--Writing events to the a file with the date in the filename.--><!--<target name="Info" xsi:type="File"fileName="${basedir}/log/test.${shortdate}.log"layout="${longdate} [${level}]:${message}"/>--><target xsi:type="Database" name="database"connectionString=" Data Source=(local);InitialCatalog=NLogtest;Persist Security Info=True; User ID=sa;Password=123456"commandText="insert into NLog_Log([CreateOn],[Origin],[LogLevel],[Message], [Exception],[StackTrace]) values (getdate(), @origin, @logLevel,@message,@exception, @stackTrace)"><!--日志来源--><parameter name="@origin" layout="${callsite}"/><!--日志等级--><parameter name="@logLevel"layout="${level}"/><!--日志消息--><parameter name="@message"layout="${message}"/><!--异常信息--><parameter name="@exception"layout="${exception}" /><!--堆栈信息--><parameter name="@stackTrace"layout="${stacktrace}"/></target></targets><rules><!-- add your logging rules here --><!--<logger name="*" writeTo="Info"/>--><logger name="*" minlevel="Debug"writeTo="database"/><!--Write all events with minimal level of Debug (So Debug, Info, Warn,Error and Fatal, but not Trace)  to"f"<logger name="*" minlevel="Debug"writeTo="f" />--></rules>
</nlog> </span>

结果是:

 

 

 


http://chatgpt.dhexx.cn/article/9EsUtj4I.shtml

相关文章

NLog

一个简单好用的日志框架NLog 之前我介绍过如何使用log4net来记录日志&#xff0c;但最近喜欢上了另一个简单好用的日志框架NLog。 关于NLog和log4net的比较这里就不多讨论了&#xff0c;感兴趣的朋友可以参看.NET日志工具介绍和log4net vs. Nlog这两篇文章。本文主要介绍一下如…

NSLog不输出日志问题

今天突然发现NSLog里面的日志都不能在XCODE控制台输出日志了。 如图所示&#xff0c;去掉OS_ACTIVITY_MODE DIABLE前面的勾&#xff0c;就能正常输出了。

Nlog 的使用

本来是准备用Log4Net&#xff0c;之前都用它。后面发现了Nlog发现更有活力&#xff0c;就想试试&#xff0c;结果一用感觉非常好。 通过包管理器直接安装&#xff1a; 你只要将配置文件 NLog.config 放在和exe同一个文件夹&#xff0c;那么NLog会自动加载&#xff0c;非常省心…

NLOG的使用

目录 Tartget Properties header archiveFileName archiveNumbering maxArchiveFiles keepFileOpen archiveOldFileOnStartup rules 加载配置文件 rules 的使用 最近在学习GRBL-PLOTTER代码&#xff0c;其日志系统用的是NLOG&#xff0c;将一些内容进行总结&#xff1b…

NLog日志的使用

文章目录 1.NuGet安装NLog2.添加Nlog.config文件(新建项 --> 应用程序配置文件)3.数据库建表4.代码使用 1.NuGet安装NLog 2.添加Nlog.config文件(新建项 --> 应用程序配置文件) 注意文件属性 → 复制到输出目录 一定要选择始终复制&#xff0c;否则无法输出日志&#xf…

【ns-3】Logging系统

文章目录 前言1. 概述2. 基本概念2.1 日志组件2.2 日志详细程度&#xff08;严重程度&#xff09;选项2.3 日志前缀选项 3. 控制日志输出参考文献 前言 本篇介绍Logging系统。 1. 概述 许多大型系统都会提供一种基于控制台的消息记录功能&#xff0c;用来向用户即时地反馈程序…

Nlog详解

Nlog详解 零、文章目录 一、Nlog详解 1、概述 NLog是一个基于.NET平台编写的日志记录类库&#xff0c;我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。可以在任何一种.NET语言中输出带有上下文的&#xff08;contextual information&#xff09;调试诊断信息&am…

iOS之深入解析NSLog的调试技巧

一、DEBUG 宏区分调试模式和发布模式进行特殊处理 ① 利用 Configuration 配置不同的编译环境 一个应用往往对应多个域名的情况&#xff0c;测试地址、生产地址、后台接口开发者的个人主机地址&#xff1a; 1.开发人员环境&#xff08;Other&#xff09;连接写服务人的电脑&…

TDD(测试驱动开发)死了吗?

01、前言 很早之前&#xff0c;曾在网络上见到过 TDD 这 3 个大写的英文字母&#xff0c;它是 Test Driven Development 这三个单词的缩写&#xff0c;也就是“测试驱动开发”的意思——听起来很不错的一种理念。 其理念主要是确保两件事&#xff1a; 确保所有的需求都能被照…

unitTest+Ddt数据驱动测试

我们设计测试用例时&#xff0c;会出现测试步骤一样&#xff0c;只是其中的测试数据有变化的情况&#xff0c;比如测试登录时的账号密码。这个时候&#xff0c;如果我们依然使用一条case一个方法的话&#xff0c;会出现大量的代码冗余&#xff0c;而且效率也会大大降低。此时&a…

测试驱动开发(TDD)的理论基础

在开始理论介绍之前&#xff0c;先思考一个问题&#xff1a;软件开发中最重要的是什么&#xff1f; 可能有的小伙伴就会说&#xff1a;良好的数据库设计&#xff0c;一个健壮可扩展的架构&#xff0c;规范的编码风格&#xff0c;设计文档等。没错这些在开发中都很重要&#xf…

什么时候应该编写单元测试?什么是TDD?

一、传统方法与TDD方法 1、有人认为软件编码完成后编写单元测试&#xff08;传统方法&#xff09;&#xff0c;流程如下&#xff1a; 缺点&#xff1a;编写完功能代码再写单元测试会导致单元测试“粒度”比较粗。对同样的功能代码&#xff0c;如果采用TDD方案&#xff0c;结果…

前端做自动化测试 —— 用TDD的思想做组件测试

Test-Driven Development(测试驱动开发,以下简述TDD)是一种设计方法论, 原理是在开发功能代码之前, 先编写单元测试用例代码, 通过测试来推动整个开发的进行. 本文详细描述了在创作 react-stillness-component, 组件的过程中, 是如何学习 TDD 的思想来完成功能开发以及测试的 一…

深度解读 - TDD(测试驱动开发)

本文结构&#xff1a; 什么是 TDD为什么要 TDD怎么 TDDFAQ学习路径延伸阅读 什么是 TDD TDD 有广义和狭义之分&#xff0c;常说的是狭义的 TDD&#xff0c;也就是 UTDD&#xff08;Unit Test Driven Development&#xff09;。广义的 TDD 是 ATDD&#xff08;Acceptance Tes…

【TDD】测试驱动开发

欢迎关注微信公众号“Python小灶&#xff0c;和我一起每天学习Python新知识”&#xff0c;还可添加博主Vx&#xff1a;yf03064131&#xff0c;方便一起交流学习。 或者B站搜索 有只小新 原视频地址链接&#xff1a;点击这里 代码地址&#xff1a;点击这里 本文为大致翻译以及…

测试驱动开发(TDD)的学习使用

测试驱动开发TDD 是一种不同于传统软件开发流程的新型开发方式 特点&#xff1a; 先编写测试代码 – 实现主要逻辑 再写功能代码 – 实现细节 通过测试来推动整个开发的进行。 有助于编写简洁可用和高质量的代码&#xff0c;并加速开发过程呢。 比如写一个Person类&#xff0c;…

从 TDD 到测试策略

“ 前端没法 TDD / 前端不容易做 TDD / 前端 TDD 收益不大 ” 这是进公司后无数人给我判的“死刑”。 事实上好像的确如此&#xff1f; 在这个崇尚敏捷的组织里&#xff0c;我们有毕业生的入职前培训&#xff0c;入职后培训&#xff0c;有 TwU&#xff0c;有无数定期不定期的…

使用ddt执行数据驱动测试

所谓数据驱动测试&#xff0c;简单的理解为数据的改变从而驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。通过使用数据驱动测试的方法&#xff0c;可以在需要验证多组数据测试场景中&#xff0c;使用外部数据源实现对输入输出与期望值的参数化&#xff0c;避免在测…

先测试再开发?TDD测试驱动开发了解一下?

1、什么是TDD 我第一次接触TDD这个概念&#xff0c;是在<<代码整洁之道>>中&#xff0c;作者鲍勃大叔在书中&#xff0c;写了一些关于测试代码的代码规范&#xff0c;其实就提到了有关TDD三定律: - 定律一&#xff1a; 在编写不能通过的单元测试前&#xff0c;不…

测试驱动开发(TDD)前端篇

当你在写生产代码时&#xff0c;你处在高认知的状态&#xff08;obvious&#xff09;&#xff0c;你的研发流程和你的工程实践&#xff0c;有助于你一步一步的提升你的认知能力&#xff0c;把你的问题进行一个降解&#xff08;分解&#xff09;&#xff0c;只要你做到同样的事情…