
.net core 日志框架:聊聊记日志的最佳姿势
必要的依赖包
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Logging
- Microsoft.Extensions.Logging.Console
- Microsoft.Extensions.Logging.Debug
- Microsoft.Extensions.Logging.TraceSource
内容示例
项目架构
内容示例
这里我们对日志程序做配置
appsetting.json
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
},
//下面是针对 Console 的输出提供程序
"Console": {
"LogLevel": {
"Default": "Information",
"Program": "Trace",
"alogger": "Trace",
"LoggingSimpleDemo.OrderService": "None" //None表示关闭日志级别
}
}
}
}
注意
appsetting.json表示对日志的级别定位,具体请参考LogLevel枚举
Program.cs
static void Main(string[] args)
{
//从文件中读取配置
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var config = configBuilder.Build();
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IConfiguration>(p => config); //用工厂模式将配置对象注册到容器管理
serviceCollection.AddLogging(builder =>
{
builder.AddConfiguration(config.GetSection("Logging"));
builder.AddConsole();
});
IServiceProvider service = serviceCollection.BuildServiceProvider();
ILoggerFactory loggerFactory = service.GetService<ILoggerFactory>();
var alogger = loggerFactory.CreateLogger("alogger");
alogger.LogDebug(2001, "aidasi");
var alogger2 = loggerFactory.CreateLogger("alogger");
alogger2.LogDebug("aidasi");
var ex = new Exception("Happen an Error");
alogger.LogError(ex, "Happen an Error");
Console.ReadKey();
}
运行结果
一般我们可以通过注入的方式使用日志
OrderService.cs
public class OrderService
{
ILogger<OrderService> _logger;
public OrderService(ILogger<OrderService> logger)
{
_logger = logger;
}
public void Show()
{
//内部传递参数(可以节省一定的资源)
_logger.LogInformation("Show Time {time}",DateTime.Now);
//拼接字符串(都会去拼接一次)
_logger.LogInformation($"Show Time {DateTime.Now}");
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
//从文件中读取配置
IConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var config = configBuilder.Build();
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IConfiguration>(p => config); //用工厂模式将配置对象注册到容器管理
serviceCollection.AddLogging(builder =>
{
builder.AddConfiguration(config.GetSection("Logging"));
builder.AddConsole();
});
serviceCollection.AddTransient<OrderService>();
IServiceProvider service = serviceCollection.BuildServiceProvider();
var order = service.GetService<OrderService>();
order.Show();
Console.ReadKey();
}
}
运行结果
我们发现这里什么也没有,因为在配置中我们把
"LoggingSimpleDemo.OrderService": "None"
修改appsetting.json为Debug
再次运行
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术