火影推荐程序连载52
火影推荐程序连载52
上文说到log日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mongodb进行存储日志,那就是完美的结合,MongoDB也是文档式数据库,存储的格式很像JSO,也可以它是一个JSO文件,查询数据库快。不扯远了,还是讲讲Serilog的使用吧!
Serilog 是 ASP.ET Core 的一个插件,可以简化日志记录。Serilog 有各种可用的接收器,例如,有纯文本、SQL 和 ElasticSearch 接收器等等。
Install-Package Serilog.AspetCore
.1Program的配置如下
- Configuration:构建对象,读取appsettings.json的配置文件
- Log.Logger:读取Configuration中的日志配置信息,然后设置输出的级别、内容、位置等。
- UseSerilog(dispose:true):引入Serilog框架,dispose:true=>系统退出时,释放日志对象
public class Program{public static IConfiguration Configuration { get; } = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())//设置基础路径.AddJsonFile(appsettings.json, optional: false, reloadOnChange: true)//添加配置文件.AddEnvironmentVariables()//添加环境变量.Build();public static void Main(string[] args){Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Debug().Enrich.FromLogContext()//使用Serilog.Context.LogContext中的属性丰富日志事件。.WriteTo.Cole(new RenderedCompactJsonFormatter())//输出到控制台.WriteTo.File(formatter:new CompactJsonFormatter(),logs\\,rollingInterval:RollingInterval.Day)//输出到文件.CreateLogger();//清除内置日志框架try{Log.Information(Starting web host);CreateHostBuilder(args).Build().Run();}catch (Exception ex){Log.Fatal(ex,Host terminated unexpectedly);}finally{Log.CloseAndFlush();}}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args)..ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();}).UseSerilog(dispose:true);//引入第三方日志框架
.2 appsettings.json配置
{Logging: {LogLevel: {Default: Information,Microsoft: Warning,Microsoft.Hosting.Lifetime: Information}},AllowedHosts: *,Serilog: {MinimumLevel: {Default: Information,Override: {Microsoft: Warning,System: Information}}}
}
因为是替换了 core中的内部日志框架,所有在使用的时候,和Logging日志框架一样使用,如下图所示
private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger){_logger = logger;}[HttpGet]public void Get(){_logger.LogInformation(LogInformation ().ToString());_logger.LogDebug(LogDebug ().ToString());_logger.LogWarning(LogWarning ().ToString());_logger.LogError(LogError ().ToString());}
控制台显示
文件显示
6.1分级别显示
//存储日志文件的路径string LogFilePath(string LogEvent) => $@{AppContext.BaseDirectory}00_Logs\{LogEvent}\log.log;//存储日志文件的格式string SerilogOutputTemplate = {ewLine}{ewLine}Date:{Timestamp:yyyy-MM-dd HH:mm:ss.fff}{ewLine}LogLevel:{Level}{ewLine}Message:{Message}{ewLine}{Exception} new string( - , 50);Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Debug().Enrich.FromLogContext()//使用Serilog.Context.LogContext中的属性丰富日志事件。.WriteTo.Cole(new RenderedCompactJsonFormatter()).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug).WriteTo.File(LogFilePath(Debug), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Information).WriteTo.File(LogFilePath(Information), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Warning).WriteTo.File(LogFilePath(Warning), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Error).WriteTo.File(LogFilePath(Error), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Fatal).WriteTo.File(LogFilePath(Fatal), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)).CreateLogger();
效果如下:
文件级别分类:
日志格式输出:
6.2存储到数据库
Install-Package Serilog.Sinks.MSSqlServer
修改配置
MSSqlServer(参数一,参数二,参数三,参数四)
- 数据库的地址
- 数据库中记录日志表的名称
- 是否自动创建表(log是没有这个功能的)
- 记录日志最小级别
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Information().MinimumLevel.Override(Microsoft, LogEventLevel.Information).ReadFrom.Configuration(new ConfigurationBuilder().AddJsonFile(appsettings.json).Build()).WriteTo.MSSqlServer(connecting, logs, autoCreateSqlTable: true, restrictedToMinimumLevel: LogEventLevel.Information).CreateLogger();
效果如下:
6.2.1数据库中表字段
新增
第一步:创建列
var opti = new ColumnOpti();opti.AdditionalColumns = new Collection<SqlColumn>{new SqlColumn { DataType = SqlDbType.VarChar, DataLength =-1, Columname = IP },};
第二步:添加列
Enrich.WithProperty:添加属性
columnOpti: opti:配置数据库的列
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Information().Enrich.WithProperty(IP, 2.2.2.2).MinimumLevel.Override(Microsoft, LogEventLevel.Information).ReadFrom.Configuration(new ConfigurationBuilder().AddJsonFile(appsettings.json).Build()).WriteTo.MSSqlServer(connecting, logs, autoCreateSqlTable: true, columnOpti: opti, restrictedToMinimumLevel: LogEventLevel.Information).CreateLogger();
第三步:运行即可
移除
第一步:记录移除列
StandardColumn:是框架默认提供数据库默认表,它的属性就是映射数据库的字段
var opti = new ColumnOpti();opti.Store.Remove(StandardColumn.Properties);opti.Store.Remove(StandardColumn.TimeStamp);
第二步:配置属性
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Information().MinimumLevel.Override(Microsoft, LogEventLevel.Information).ReadFrom.Configuration(new ConfigurationBuilder().AddJsonFile(appsettings.json).Build()).WriteTo.MSSqlServer(connecting, logs, autoCreateSqlTable: true, columnOpti: opti, restrictedToMinimumLevel: LogEventLevel.Information).CreateLogger();
第三步:运行即可
注意事项:
当你创建了数据库的表之后,如果修改添加字段或修改字段,数据库存在的表是不会更新的,只能重新创建
6.发送到邮箱
添加安装包:
Install-Package Serilog.Sinks.Email
配置如下:
Log.Logger = new LoggerConfiguration().MinimumLevel.Information().MinimumLevel.Override(Microsoft, LogEventLevel.Information).ReadFrom.Configuration(new ConfigurationBuilder()www.dongdongrji maven.apache/xsd/maven-4.0.0.xsd><artifactId>dubbo<www.xxinyoupt /artifactId><groupId>nacos</groupId><version>0.0.1-SAPSHOT<www.lanboyulezc /version><priority value=www.lanboylgw/info/ /><appender-ref ref=www.yixingxzcstdoutwww.lanboylgw /><appender-ref ref=fileoutwww.baichuangyule /换掉encoder的实现类或者换掉layout的实现类就可以了<?xml version= www.lanboyulezc www.jiuerylzc1.0www.zhuyngyule encoding=www.bhylzcUTF-8?><configuration debug=www.shicaiyulezcfalsewww.huachenguoj ><property name=www.51huayuzcAPP_AME value=logtest/><property name=www.xinhuihpw LOG_HOME value=./logs www.wanyaylezc//><appender name=STDOUT class=www.yachengylch.qos.ColeAppender><!--替换成AspectLogbackEncoder--><encoder class=www.shengrenyp com.logback.AspectLogbackEncoderwww.51huayuzc><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{www.pinguo2yl} - %msg%n</pattern><appender www.baishenjzc name=FILE www.baihua178 class=ch.qos.rolling.RollingFileAppender><File>${LOG_HOME}/${APP_www.jinliyld AME}.log<www.baihua178 /File><rollingPolicy class=www.jintianxueshach.qos.rolling.SizeAndTimeBasedRollingPolicywww.wanyaylezc/><FileamePattern>www.yachengyl ${LOG_HOME}/${APP_AME}.log.%d{yyyy-MM-dd}.%i.log</FileamePattern><MaxHistory>0<www.51huayuzc /MaxHistory><maxFileSize>1000MB<www.jinliyld /maxFileSize>.WriteTo.Email(new EmailConnectionInfo() { Port= 465,//端口EmailSubject=邮件日志测试,//邮件主题FromEmail= 1882766485@16,//发件箱ToEmail=28284025@qq,//收件箱MailServer= smtp.16,//发件箱的邮箱服务etworkCredentials = new etworkCredential(1882766485@16, zc960810),//发件人的邮箱和密码IsBodyHtml =true,//邮件是否是HTML格式EnableSsl=true//使用启用SSL端口}).CreateLogger();
效果如下
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 18 条评论) |
本站网友 龙岩妇科医院 | 16分钟前 发表 |
rollingInterval | |
本站网友 猪肺汤 | 8分钟前 发表 |
LogEventLevel.Information).ReadFrom.Configuration(new ConfigurationBuilder().AddJsonFile(appsettings.json).Build()).WriteTo.MSSqlServer(connecting | |
本站网友 北京网球中心 | 24分钟前 发表 |
logs | |
本站网友 财商通 | 16分钟前 发表 |
rollingInterval | |
本站网友 华美国际月子会所 | 14分钟前 发表 |
RollingInterval.Day)//输出到文件.CreateLogger();//清除内置日志框架try{Log.Information(Starting web host);CreateHostBuilder(args).Build().Run();}catch (Exception ex){Log.Fatal(ex | |
本站网友 重庆实业 | 17分钟前 发表 |
{Default | |
本站网友 偷脸 | 27分钟前 发表 |
.WriteTo.Cole(new RenderedCompactJsonFormatter()).WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Debug).WriteTo.File(LogFilePath(Debug) | |
本站网友 塔式服务器 | 6分钟前 发表 |
如何安装Serilog? Install-Package Serilog.AspetCore 三 | |
本站网友 vf下载 | 7分钟前 发表 |
RollingInterval.Day | |
本站网友 艺考画室 | 30分钟前 发表 |
RollingInterval.Day | |
本站网友 wds状态 | 12分钟前 发表 |
true);//引入第三方日志框架 .2 appsettings.json配置 {Logging | |
本站网友 shsh123456 | 17分钟前 发表 |
columnOpti | |
本站网友 恐慌发作 | 28分钟前 发表 |
Information}}} } 四 | |
本站网友 禅说 | 28分钟前 发表 |
Information}}} } 四 | |
本站网友 css3按钮 | 7分钟前 发表 |
{LogLevel | |
本站网友 刘亚玲 | 0秒前 发表 |
扩展 6.1分级别显示 //存储日志文件的路径string LogFilePath(string LogEvent) => $@{AppContext.BaseDirectory}00_Logs\{LogEvent}\log.log;//存储日志文件的格式string SerilogOutputTemplate = {ewLine}{ewLine}Date:{Timestamp | |
本站网友 黑金时代 | 6分钟前 发表 |
Serilog |