.NET CORE LOG
.NET CORE LOG
合格的应用程序不仅要求运行的高效和计算的准确,稳定及可靠性也要得到满足,同事,系统的可维护性也相当重要。谈及到可维护性,就必须涉及到系统运行状态的监控和异常的快速定位与跟踪。系统日志的实现主要就是为了这两个方面。良好的日志记录可以提供我们足够多的数据以及信息来支持系统的稳定性运行。
Serlog
.NET Core 提供了内置的日志模块,用来支撑日志系统的建立。当然也可以使用自己喜爱日志框架来进行记录日志,常见的第三方日志库有Serilog,elmah.io,NLog等,这里使用Serlog来记录日志。Serilog 是一种非常简便记录log 的处理方式,能够方便的生成本地文件,同事Serlog支持异步的输出日志,引入以下对应的三个类库
Serilog.Extensions.Logging
Serilog.Sinks.RollingFile
Serilog.Sinks.Async
格式定义
日志信息的记录要适当精简,既能够快速及简单的定位系统问题,而又不产生过多的无用信息,过多的无用信息不但对系统分析起不到什么作用,反而会增加系统的运行压力、消耗系统的运行资源。因此,支持日志信息的格式的定义就显得十分的重要。Serlog通过使用outputTemplate参数来定制化日志格式,例如
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate:
"{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}")
.CreateLogger();
主要的内置参数如下:
- Exception - The full exception message and stack trace
- Level - The log event level, formatted as the full level name
- Message - The log event's message, rendered as plain text.
- NewLine - A property with the value of System.Environment.NewLine.
- TimeStamp - The event's timestamp, as a DateTimeOffset.
等级输出
日志等级通常分为:DEBUG、INFO、WARN、ERROR
- DEBUG:系统调试信息,通常用于开发过程中对系统运行情况的监控,在实际运行环境中不进行输出。
- INFO: 系统运行的关键性信息,通常用于对系统运行情况的监控。
- WARN:告警信息,系统存在潜在的问题,有可能引起运行异常,但此时并未产生异常。
- ERROR:系统错误信息,需要进行及时处理和优化。
不同的等级对应不同的系统运行状态,通常而言,不同的状态信息输出到对应的文件中,对系统进行分析,能达到事半功倍的效果。Serilog中使用Filter.ByIncludingOnly方法来实现输出日志到不同的文件中,例如:
var baselogger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Logger(fileLogger => fileLogger
.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Debug))
.WriteTo.RollingFile(@"logs/log-{Date}-Debug.txt"));
示例
首先在创建的MVC站点的Stratup方法中配置对应Serilog
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.MinimumLevel.Override("System", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug).WriteTo.Async(
a => a.RollingFile("logs/log-{Date}-Debug.txt")
))
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Information).WriteTo.Async(
a => a.RollingFile("logs/log-{Date}-Information.txt")
))
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Warning).WriteTo.Async(
a => a.RollingFile("logs/log-{Date}-Warning.txt")
))
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Error).WriteTo.Async(
a => a.RollingFile("logs/log-{Date}-Error.txt")
))
.WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Fatal).WriteTo.Async(
a => a.RollingFile("logs/log-{Date}-Fatal.txt")
))
.CreateLogger();
其次,在Configure方法中注册Serilog
loggerFactory.AddSerilog();
接着在HomeController的Index方法中手工调用记录错误日志
public ActionResult Index()
{
Log.Logger.Error("This is index -- error.");
return View();
}
运行代码,在本地logs文件夹下出现log-20170710-Error.txt文件,内容如下:
2017-07-13 20:47:44.143 +08:00 [Error] .......
.NET CORE LOG的更多相关文章
- ThinkPHP报Class 'Core\Log' not found竟然是由这个原因导致的
项目在开发阶段运行的好好的(Debug=true),上线后(Debug=false)其中有一个页面报“对不起,您的页面暂进无法找到!”错误.摸不清头脑,看看了这个页面也没有什么两样,可就是提示这句话, ...
- log的简单说明
log的简单说明 @(NS3相关)[core][log] NS3中的日志功能是非常完善与灵活,大家有需要显示一些调试或者警告信息时最好使用log,不再使用标准输入来输出中间信息. 头文件:ns3/lo ...
- TP框架如何开启log日志
1. 日志的处理工作是由系统自动进行的,在开启日志记录的情况下,会记录下允许的日志级别的所有日志信息. 其中,为了性能考虑,SQL日志级别必须在调试模式开启下有效,否则就不会记录. 系统的日志记录由核 ...
- Linux显示以log结尾的日志文件
Linux显示以log结尾的日志文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ find -name "*.log" find: `. ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- android adb命令 抓取系统各种 log
getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > C:\log.txt 在Android中不同的 ...
- EF Core中Join可以进行子查询
我们来看看下面的代码,这个代码是一个INNER JOIN的EF Core查询,其中用SubCategory表INNER JOIN了SubCategoryLanguage表,但是我们需要在SubCate ...
- EF Core 中DbContext不会跟踪聚合方法和Join方法返回的结果,及FromSql方法使用讲解
EF Core中: 如果调用Queryable.Count等聚合方法,不会导致DbContext跟踪(track)任何实体. 此外调用Queryable.Join方法返回的匿名类型也不会被DbCont ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
随机推荐
- traceroute工具
traceroute是类Unix的命令工具,用于测试到网络上某台主机host的跳数以及延时情况.其运行原理是,通过发送指定TTL的UDP包给目的主机host,通过将TTL逐渐增大,就能收到一些ICMP ...
- makefile 编译指定目录
makefile 编译指定目录 sub1=test1 sub2=test2 subs = sub1 sub2 SUBDIRS =$(foreach i, $(subs), $($(i))) .PHON ...
- Fiori里花瓣的动画效果实现原理
Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的花瓣组成.另一种是下图的3/4个圆环不断旋转的效果. 关于前者的效果,可以看我制作的这个视频.这个视频是手动 ...
- note03-计算机网络
3. 网络层 网络层的主要协议有IP.ICMP.IGMP.ARP等: IP地址分类:ABCDE ,根据32比特位的IP中网络号所占位数进行决定IP的类型 A:0 0000000 网络号| 000000 ...
- Fiddler拦截并动态修改网页内容简易教程
Fiddler默认可以拦截全局http请求,再加上它具备的脚本功能,可以很简单的达到动态修改网页内容的目的. 1.启动Fiddler 2.打开Rules->Customize Rules..., ...
- 【洛谷P1367】蚂蚁
蚂蚁 [题目描述] 在一根无限长的木棍上,用n只蚂蚁,每只蚂蚁有一个初始位置和初始朝向,蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计).现给出每只蚂蚁的初始位置和 ...
- hive中使用rcfile
(1)建student & student1 表:(hive 托管)create table student(id INT, age INT, name STRING)partitioned ...
- LeetCode10.正则表达式匹配 JavaScript
给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ,而不 ...
- linux保留旧版本python,安装python3
1.备份老版本 mv /usr/bin/python /usr/bin/python.bak 2. 下载python3 wget https://www.python.org/ftp/python/3 ...
- Java的技术体系结构
作为程序开发者,我们都想写出完美的代码,但世界上好像从来都没有过完美的代码,因为代码牵涉的内容很复杂,有程序设计语言.运行环境.数据结构以及算法等等,而开发者往往很难全面精通,再者写代码本来也就是一个 ...