什么是LOGGING
.NET里面的日志分为六个级别
具体代码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace _210915_Demon01_Logging
{
class Program
{
static void Main(string[] args)
{
var service = new ServiceCollection();
service.AddLogging(e=> {
e.AddConsole();
//设置日志最低的输出级别,Critical>Error>Warning>Information>Debug>Trace
e.SetMinimumLevel(LogLevel.Trace);
});
service.AddScoped<EmailLog>();
using (var sp = service.BuildServiceProvider())
{
sp.GetRequiredService<EmailLog>().InitData();
sp.GetRequiredService<EmailLog>().OperateDataError();
}
}
}
}
using Microsoft.Extensions.Logging;
using System;
using System.IO;
namespace _210915_Demon01_Logging
{
class EmailLog
{
//这里面绑定的是什么类,输出的日志就会绑定到什么类上。
private readonly ILogger<EmailLog> logger;
public EmailLog(ILogger<EmailLog> logger)
{
this.logger = logger;
}
public void InitData()
{
logger.LogInformation("Start to execute the database.");
}
public void OperateDataError()
{
logger.LogError("Operate database failed.");
logger.LogTrace("Tracking error.");
logger.LogError("Operate database failed.");
//可以将异常信息写入
try
{
File.ReadAllText("x");
}
catch (Exception ex)
{
logger.LogError(ex, "Exception");
}
}
}
}
通过EventLog记录到Windows平台下EventView下
只需要在service.AddLogging(e=>{e.AddEventlog();});即可
NLOG-文本日志
日志记录注意事项:
- 文本日志一般按照日期区分,xxx-Data
- 限制日志总个数或者总大小,防止将磁盘撑爆炸
- 限制单个日志文件的大小
NLog.Extension.Logging的使用
- 到Nuget.org下去官方网站查看说明
- 在项目中新建nlog.config(最好小写,约定大于配置,便于在linux下运行,linux大小写敏感)
- nlog.config中路径,将C盘删掉默认在程序根目录下保存,设置如果较新则复制。
参数解读
最多只会有四个文件:结构化日志和集成日志服务
结构化日志
集中化日志
Serilog
Exceptionless
Exceptionless.com
writeto.exceptionless需要安装Nuget```csharp using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using Serilog; using Serilog.Formatting.Json; using SystemService; using Exceptionless;
namespace _210915_Demon01_Logging { class Program { static void Main(string[] args) { ExceptionlessClient.Default.Startup(“up5uzK6h92iGTN6ZAXNkiVecefPRWFLuwp45Chfd”); var service = new ServiceCollection(); service.AddLogging(e=> { //e.AddConsole();//Console Provider 保存日志到控制台下,这边执行的操作就是ConfigurationBuilder.Addxxx()。 //e.AddEventLog();//EventLog Provider 保存日志到Windows平台下的EventViewer下。 //e.AddNLog();//NLog Provider,保存日志到文件中,日志文件保存路径在配置文件中设置。 //设置日志最低的输出级别,Critical>Error>Warning>Information>Debug>Trace。 //e.SetMinimumLevel(LogLevel.Trace); //Serilog使用 Log.Logger = new LoggerConfiguration().MinimumLevel.Debug() .Enrich.FromLogContext() .WriteTo.Console(new JsonFormatter()) .WriteTo.Exceptionless() .CreateLogger(); e.AddSerilog(); }); service.AddAlbertLog();//扩展方法
using (var sp = service.BuildServiceProvider())
{
sp.GetRequiredService<IAlbertLog>().InitData();
sp.GetRequiredService<IAlbertLog>().OperateDataError();
}
}
}
总结
最好用Serilog(结构化日志)