【NLog】.net core 使用NLog将日志存入MongoDB
2019-03-14 18:13
113 查看
1、安装Nuget包:
NLog;
NLog.Web.AspNetCore;
NLog.Mongo;
NLog.WindowsIdentity;
NLog.WindowsIdentity不一定需要,如果运行时报异常(如果配置文件中throwException设置为false,不会报异常):找不到“windows-identity”就需要安装这个包。
2、配置文件:
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <!-- enable mongodb layout renderers --> <extensions> <add assembly="NLog.WindowsIdentity"/> <add assembly="NLog.Mongo"/> </extensions> <targets> <!-- write log to mongodb--> <target xsi:type="Mongo" name="mongo" databaseName="TestLog" collectionName="Logs" connectionString="mongodb://tang:tang@192.168.43.234:27017/TestLog" IncludeDefaults="false" > <Field name="Date" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}" /> <Field name="Level" layout="${level}" /> <Field name="Logger" layout="${logger}"/> <Field name="Message" layout="${message}" /> <Field name="Exception" layout="${exception:format=tostring}" /> <Field name="CallSite" layout="${callsite:filename=true}"/> <Field name="StackTrace" layout="${stacktrace}"/> </target> </targets> <rules> <!-- add your logging rules here --> <logger name="*" minlevel="Trace" writeTo="mongo"/> </rules> </nlog>
这里有几个需要注意的地方:
(1)NLog中默认没有MongoDB的 layout renderers,需要单独引入,即上面的
<extensions>...</extensions>
(2)配置MongoDB时,若不加“IncludeDefaults=false”,不写Field,就会在MongoDB中应用默认集合,包含“ID”,“Date”,“Logger”,“Exception”等。
设置IncludeDefaults=false,然后通过自定义Field,自定义MongoDB集合中显示的内容。更具体的可以查看GitHub上的NLog.Mongo的源码,dalao的代码写得非常清晰:
https://github.com/loresoft/NLog.Mongo
(3)Field Date中,date默认为string类型,可以加
bsonType=DateTime将其设置为DateTime类型。但是这里的DateTime为国际标准时间,与北京时间相差8小时,而且format格式有问题,比如我设置了年月日 时分秒格式,最后输出的时间还是带毫秒的,只不过毫秒位置都是0。如果用默认的string格式,输出的是系统时间,且格式化有效,但是反序列化时,只能反序列化为string类型,反序列为DateTime类型会报错。
(4)其它配置内容可以参考官方配置文档:
https://nlog-project.org/config/
3、调用:
Program.cs
using NLog.Web; public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseNLog();
Startup.cs
using NLog.Extensions.Logging; using NLog.Web; public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //使用NLog作为日志记录工具 loggerFactory.AddNLog(); //引入Nlog配置文件,这里配置文件在项目根目录下 env.ConfigureNLog("NLog.config"); app.UseMvc(); }
在其它类中记录日志:
private readonly Logger nlog = LogManager.GetCurrentClassLogger(); // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { nlog.Log(LogLevel.Debug, "Debug"); nlog.Log(LogLevel.Info, "Info"); try { throw new Exception("异常"); } catch (Exception ex) { nlog.Log(LogLevel.Error, ex, "异常的附加信息"); } return new string[] { "value1", "value2" }; }
相关文章推荐
- ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
- Net Core使用日志 NLog
- 微服务日志之.NET Core使用NLog通过Kafka实现日志收集
- ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
- .net core使用NLog+Elasticsearch记录日志
- Spring Boot 使用AOP将日志存入MongoDB
- 使用Fluentd + MongoDB构建实时日志收集系统
- 在.Net Core中使用MongoDB的入门教程(一)
- NLog日志工具的使用及配置-输出年/月文件夹
- AspNetCore 使用NLog日志,NLog是基于.NET平台开的类库!(又一神器)
- Spring Boot中使用log4j实现http请求日志入mongodb
- [转]使用NLog记录日志到数据库 自定义日志表的数据格式
- 使用NLog记录业务日志到数据库
- [转]asp.net5中使用NLog进行日志记录
- C#中使用Nlog日志工具
- 使用Nlog记录日志到数据库
- 使用MongoDB存储Docker日志
- 使用NLog实现一个简单的日志记录(包含源代码)
- 使用Fluentd + MongoDB构建实时日志收集系统
- c#的日志插件NLog基本使用