使用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
}