使用Nlog发现比log4net简单好多,先Nuget安装 : NLog.Web.AspNetCore,一般我是在基础类库中添加这个引用,为了避免以后我们更换另外的日志组件,比如ExceptionLess,我们新建一个接口ILogger,我们只先定义两个方法:
public interface ILogger { /// <summary> /// 写入debug信息 /// </summary> /// <param name="message"></param> void Debug(string message); /// <summary> /// 写入错误信息 /// </summary> /// <param name="message"></param> void Error(string message); }
新建Nlog.cs实现该接口:
public class NLogger:ILogger { private static NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); /// <summary> ///加入DEBUG用的信息 /// </summary> /// <param name="message"></param> public void Debug(string message) { log.Debug(message); } //加入错误信息 public void Error(string message) { //加入队列 log.Error(message); } }
在Startup.cs中的Configure参考如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); loggerFactory.AddNLog(); //引入Nlog配置文件 env.ConfigureNLog("Config/nlog.config"); }
其中nlog.config是nlog的配置,配置如下:
<?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" internalLogLevel="Warn" internalLogFile="internal-nlog.txt"> <!-- define various log targets --> <targets> <!-- write logs to file --> <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" /> <target xsi:type="File" name="ownFile-web" fileName="logs/nlog-own-${shortdate}.log" layout="${longdate}|${logger}|${uppercase:${level}}| ${message} ${exception}" /> <target xsi:type="Null" name="blackhole" /> </targets> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Trace" writeTo="ownFile-web" /> </rules> </nlog>
别忘了,在ConfigureServices(IServiceCollection services)注入:
services.AddSingleton<MyCore.Infrastructure.Logger.ILogger, MyCore.Infrastructure.Logger.NLogger>();
使用:
在service层,写一个基类,比如ApplicationBase,所有的service层类继承自ApplicationBase,那么ApplicationBase代码:
public class ApplicationBase: IDependency { protected static ILogger Log = Ioc.GetService<ILogger>(); }
那么service层的实现类代码:
public class ArticleService:ApplicationBase,IArticleService { private readonly IBasArticleRepository _basArticleRepository; public ArticleService(IBasArticleRepository basArticleRepository) { _basArticleRepository = basArticleRepository; } #region Add(添加文章) public void Add(ArticleAct act,string username) { Log.Debug("测试INFO信息,哈哈"); } #endregion }