1. 首页>
  2. 技术文章>
  3. .net core使用nlog

.net core使用nlog

7/21/18 10:25:38 AM 浏览 1632 评论 0

.net core nlog

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


网友讨论