您现在的位置是:首页 > 数码 > 

火影推荐程序连载52

2025-07-27 22:03:34
火影推荐程序连载52 上文说到log日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mongodb进行存储日志,那就是完美的结合,MongoDB

火影推荐程序连载52

上文说到log日志框架,感觉它功能已经很强大,今天给大家介绍一个很不错的日志框架Serilog,根据我的了解,感觉它最大的优势是,结构化日志,它输出的日志是Json的格式,如果你使用的是Mongodb进行存储日志,那就是完美的结合,MongoDB也是文档式数据库,存储的格式很像JSO,也可以它是一个JSO文件,查询数据库快。不扯远了,还是讲讲Serilog的使用吧!

一、什么是Serilog?

Serilog 是 ASP.ET Core 的一个插件,可以简化日志记录。Serilog 有各种可用的接收器,例如,有纯文本、SQL 和 ElasticSearch 接收器等等。

二、如何安装Serilog?
Install-Package Serilog.AspetCore
三、如何配置Serilog?

.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}}}
}
四、如何使用Serilog?

因为是替换了 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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/731240.html

相关标签:无
上传时间: 2023-12-02 18:29:53
留言与评论(共有 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