重新整理 .net core 实践篇—————日志系统之服务与日志之间[十六] 1044
2021-06-10 04:12
996 查看
前言
前文介绍了一些基本思路,那么这里介绍一下,服务如何与配置文件配合。
正文
服务:
public interface ISelfService { void ShowLog(); } public class SelfService : ISelfService { public ILogger<SelfService> _Logger; public SelfService(ILogger<SelfService> logger) { _Logger = logger; } public void ShowLog() { _Logger.LogInformation("I am a log."); } }
配置:
{ "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" }, "Console": { "LogLevel": { "Default": "Information", "Program": "Trace", "loggerObj": "Debug" } } } }
测试代码:
static void Main(string[] args) { IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile("appsettings.json",optional:false,reloadOnChange:true); var config = configurationBuilder.Build(); IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddSingleton<IConfiguration>(p=>config); serviceCollection.AddSingleton<ISelfService,SelfService>(); serviceCollection.AddLogging(builder => { builder.AddConfiguration(config.GetSection("Logging")); builder.AddConsole(); }); IServiceProvider service = serviceCollection.BuildServiceProvider(); var selfService = service.GetService<ISelfService>(); selfService.ShowLog(); Console.ReadKey(); }
结果:
那么如何要配置单个服务的Logger级别呢?
{ "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" }, "Console": { "LogLevel": { "Default": "Information", "Program": "Trace", "loggerObj": "Debug", "ConfigureDemo.SelfService": "Error" } } } }
设置这个ConfigureDemo.SelfService的值就可以。为什么这样呢?
看ILogger 的实现类Logger:
public Logger(ILoggerFactory factory) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } _logger = factory.CreateLogger(TypeNameHelper.GetTypeDisplayName(typeof(T), includeGenericParameters: false, nestedTypeDelimiter: '.')); }
这里会创建一个默认的TypeNameHelper.GetTypeDisplayName(typeof(T))的logger实例名字。
这个会获取到全名,故而设置好全名,那么会去使用这个配置。
我们一般打印log的时候,要去输出时间,建议这样写:
public class SelfService : ISelfService { public ILogger<SelfService> _Logger; public SelfService(ILogger<SelfService> logger) { _Logger = logger; } public void ShowLog() { _Logger.LogInformation("I am a log.",DateTime.Now); } }
效果如下:
_Logger.LogInformation("I am a log.",DateTime.Now);
这样写的好处因为我们的log有过滤机制,如果我们过滤不输出,那么"I am a log."和DateTime.Now就不会去做拼接执行。
这也是一种延迟思想的表现。
结
以上只是个人整理,如有错误,望请指点。
下一节日志作用域
相关文章推荐
- 重新整理 .net core 实践篇————配置系统——军令(命令行)[六]
- 12.6 rsync通过服务同步 linux系统日志 screen工具
- Linux 基础学习篇10(系统日志服务)
- linux学习入门 基础部分(9)[1.系统日志默认分类2.日志管理服务rsyslog3.日志分析工具journa4.时间同步5.timedatectl命令]
- 智能dns-dns日志系统-dns压力测试整理
- 重新整理 .net core 实践篇————依赖注入应用之生命法则[三]
- 整理Linux查看系统日志的一些常用命令
- 在系统启动时至少有一个服务或驱动程序产生错误。详细信息,请使用事件查看器查看事件日志
- Nginx服务整理 日志分析(shell+python)
- 在系统日志记录服务事件
- 10.32-10.33 rsync服务同步;10.34 Linux系统日志10.35screen工具
- 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 scre
- rsync通过服务同步、 linux系统日志 、screen工具
- 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 scre
- 微服务日志之.NET Core使用NLog通过Kafka实现日志收集
- rsyslog服务的系统日志切割设置
- 如题,右键点击文件夹或盘符后出来的菜单里没有“共享”这一项,在服务里面的server service没有启动,应该是自动启动的,手动也不能启动,报错。在系统日志里看到这个错误id 7023。workstation 服务可以手动启动
- Linux学习第三十四篇:rsync通过服务同步,Linux系统日志,screen工具
- Delphi编写系统服务五:在系统服务和桌面程序之间共享内存
- 启动一个服务监控android系统的打印日志--实现卸载软件提示