日志介绍
Logging 的使用
1. appsettings.JSON 中 Logging 的介绍
Logging 的配置信息是保存在 appsettings.JSON 配置文件中的. 因为之前介绍配置文件的时候我们使用的是 appsettings.Development.JSON 这个文件, 所以在介绍 Logging 的时候我们也用它吧.
通过上图可以看到 Logging 节点, 下面有两个子节点 IncludeScopes 和 LogLevel.
IncludeScopes 表示是否要使用日志作用域. 在同一个作用域下的日志都会打上相同的标记, 告诉我们这些日志是一组的, 属于同一个作用域. 在 using 块中使用, 就像我们使用数据库事物操作一样.
LogLevel 表示日志的级别, 默认 Warning. 如果我们在代码中输出 Info 级别的日志, 是不会有任何输出的. 因为设置的级别是 Warning, 只会输出高于和等于 Warning 级别的日志.
日志的级别: Trace ->Debug-> Information ->Warning-> Error-> Critical, 从左往右由低到高.
另外我们还可以指定命名空间和命名空间的日志级别. 如下图中的 System 和 Microsoft. 当遇到 System.* 或者 Microsoft.* 开头的命名空间, 日志级别采用 Error 的级别. 我在这里设为 Error 级别, 因为如果级别设置太低的话, 每次运行程序都会有一大堆的追踪日志. 不便于我们查找想要的日志信息.
废话不多说了, 接下来通过实例一一介绍.
2. 注入 Logger
因为 Logger 是. net core 自带的日志输出组件, 而且默认已经存在于 DI 容器中, 所以我们仅需通过构造方法注入 Logger 即可.
3. 演示普通日志
F5 运行程序, 通过多次刷新页面, 控制台窗口输出结果:
4. 演示日志级别
控制台输出结果:
可以看到 trace 级别的日志没有输出. 因为 appsettings.JSON 中设置的 Default 级别为 debug, 高于 trace 级别.
5. 演示日志作用域
首先创建一个使用控制台作为输出媒介的 Logger 工厂, 同时第一个参数表示日志的默认级别为 debug, 第二个参数表示使用作用域记录日志.
然后就是创建一个指定全名 (SongLou.web.Controllers.HomeController) 的 Logger 实例.
最后使用 using 括起来, 指定作用域.
输出见下图:
Nlog 的使用
1. 简单介绍
NLog 是一个基于. NET 平台编写的类库, 我们可以使用 NLog 在程序中添加完善的调试追踪代码. 根据喜好配置其表现样式之后发送到一个或多个输出目标 (target) 中. 配置简单灵活.
NLog 遵从 BSD license, 即允许商业应用且完全开放源代码. 任何人都可以免费使用并对其进行测试, 然后通过邮件列表反馈问题以及建议.
NLog 日志输出目标: 控制台, 文本文件, 数据库, Email, 消息队列等. 虽然有这么多输出目标, 但是我只会介绍控制台和文本文件, 有精力的同学可以研究其它的输出目标.
2.targets 和 rules
NLog 包含最基本的两大元素: targets 和 rules.target 用来配置日志的输出类型 (type), 输出目标(fileName), 输出格式(layout) 等. rules 用来配置日志的输出规则, 比如: info 级别的日志输出到哪个 target, 设置日志的最低级别. 由 writeTo 来指定输出到哪个 target, 具体的值为 target 的 name. 下面会详细介绍.
3. 安装 Nlog 包
通过 NuGet 安装下面两个包, 同时注意版本.
NLog.Extensions.Logging 版本是: 1.0.0-rtm-rc7
NLog.Web.AspNetCore 版本是: 4.5.0-rc3
4. 添加 nlog.config
如果要使用 NLog, 仅仅安装它的包是不行的, 还需要我们进行相关配置.
先在根目录下添加一个空的 nlog.config 配置文件, 如下图:
5. 修改 Startup.cs
引入两个命名空间:
- using NLog.Extensions.Logging;
- using NLog.Web;
修改 Configure 方法. 添加对 IloggerFactory 的引用, 并加入代码:
- loggerFactory.AddNLog();
- env.ConfigureNLog("nlog.config");
具体看下图:
6.NLog 输出到控制台
Nlog 的配置非常灵活, 功能也很强大, 所以注定配置会有很多. 但是我们目前只关注在控制台输出日志, 其它的先不要考虑. 下面给出最简单的配置, 如下图:
配置文件完成之后, 添加测试代码, 如下图:
直接 F5 运行, 结果如下:
日志按照我们配置的输出格式输出到控制台了. 因为这个演示没有写文件, 只是将日志输出到控制台, 所以它的 fileName 我们没有配置, 接下来的写入到文件的演示将会用到 fileName.
7.NLog 输出到文件
具体配置如下图:
对配置做下简单介绍. target 节点中的 name 表示 target 的名字, rules 节点里面的 writeTo 属性会用到. type 为 file, 表示日志的输出类型是文件. fileName 表示日志输出到哪个目录的哪个文件, 没有会自动创建. layout 表示日志内容的格式:"日期 | 大写的日志级别 | 具体日志信息 | 异常信息".
再来看看 rules.logger 节点的 name 属性表示程序中的具体类型. 打个比方, 我只想在 NLogController 这个类里面做日志, 我就可以设置 name="SongLou.Web.Controllers. NLogController", 我这里设置的是 * 号, 表示在任何一个地方都可以将日志写入到文件. writeTo 指定具体的 target, 我这里设置的是 name 为 logfile 的 target.
可以添加多个 target, 也可以添加多个 logger. 多个 logger 可以指定同一个 target.
修改代码, 如下图:
配好之后, 直接按 F5 运行, 这个时候, 我们在相应的目录就可以看到 NLog 成功写入文件:
8.NLog 滚动日志介绍
什么是滚动日志?
在生产环境中, 日志不可能保存在一个文件里面. 随着文件内容越来越多, 单个文件也会越来越大, 不仅在打开时不方便, 对我们查找具体的日志也不方便. 如果保存在很多小的文件里面, 随着程序运行的时间越来越久也会产生很多个文件, 这样做也不好. 特别是现在有很多日志搜集工具, 只要能保证日志搜集工具能够搜集到所有的日志即可. 然后再同步到我们的数据库(Elasticsearch), 比如用 logstash 就可以做日志搜集.
为了更好的理解, 我画了一张图. 假如日志文件最多保存 5 个, 每个大小 1K. 当 5 个文件都满的时候, NLog 会把最后一个文件删除, 前面 4 个文件往后移动并对文件名做 + 1 操作重新命名. 而新产生的日志就会放在 file1 文件里.
关于滚动日志有几个属性做下简单介绍.
archiveFileName: 滚动文件名称, 可以设置按规则命名
archiveAboveSize: 滚动文件的大小, 以字节为单位
archiveNumbering:Rolling, 轮转; Sequence, 升序
concurrentWrites: 同一个主机是否允许多个线程并发写日志
maxArchiveFiles: 保留文件个数
keepFileOpen: 有一种特殊的方法保持文件打开状态, 设为 true 有助于提高性能, 因为设置为 true 之后 concurrentWrites 就不起作用了.
具体配置如下:
代码无需做任何改动, 按 F5 运行. 多刷新几次页面, 当文件的大小达到 1K 时, 会自动创建一个新的文件. 如下图:
来源: http://www.bubuko.com/infodetail-3035142.html