asp.net core 有内置的log组件,遗憾的是看了微软官方文档,貌似无法直接将日志存于文件或数据库,只能由自己实现或引用第三方日志组件。

以下为nlog和log4net的使用记录

nlog使用

搜索添加nuget包

nlog
nlog.web.aspnetcore

新建一个xml文件,并改名为nlog.config

xml内容如下(可配置日志目录名称、输出格式):

<?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="logs/service-${shortdate}.log"
     layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />

 </targets>

 <rules>
 <!--all logs, including from microsoft-->
 <logger name="*" minlevel="trace" writeto="allfile" />
 </rules>
</nlog>

 将nlog.config设置输出到目录

在startup类中配置

需要引入命名空间:

using nlog.extensions.logging;

using nlog.web;

public void configure(iapplicationbuilder app, ihostingenvironment env, iloggerfactory loggerfactor)
{
 //使用nlog
 loggerfactor.addnlog();
 //引入配置文件
 env.configurenlog("nlog.config");
 if (env.isdevelopment())
 {
  app.usedeveloperexceptionpage();
 }
 else
 {
  app.useexceptionhandler("/error");
 }
 app.usestaticfiles();
 app.usecookiepolicy();

 app.usemvc();
}

代码中的使用

有两中方式如下:

1、注入形式

public class indexmodel : pagemodel
{
 private ilogger<indexmodel> _logger;
 public indexmodel(ilogger<indexmodel> logger)
 {
  _logger = logger;
 }
 public string customer { get; set; }
 public void onget()
 {
  _logger.logwarning("111111111111111111111");
  customer = "123456";
 }
}

2、获取实例形式

private static logger logger = logmanager.getcurrentclasslogger();
public static void main(string[] args)
{
 logger.error("22222222222222222222222222222");
 logger.info("333333333333333333333333333333");
}

 log4net

 log4net已支持net core,来看下在net core下是如何配置的,与之前的版本还是有一点的区别

使用惯例,引用nuget

log4net

新建配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <!-- this section contains the log4net configuration settings -->
 <log4net>
 <appender name="consoleappender" type="log4net.appender.consoleappender">
  <layout type="log4net.layout.patternlayout" value="%date [%thread] %-5level %logger - %message%newline" />
 </appender>

 <appender name="fileappender" type="log4net.appender.fileappender">
  <file value="log-file.log" />
  <appendtofile value="true" />
  <layout type="log4net.layout.patternlayout">
  <conversionpattern value="%date [%thread] %-5level %logger [%property{ndc}] - %message%newline" />
  </layout>
 </appender>

 <appender name="rollinglogfileappender" type="log4net.appender.rollingfileappender">
  <file value="logs/" /> 
  <appendtofile value="true" />
  <rollingstyle value="date" />
  <staticlogfilename value="false" />
  <datepattern value="yyyy-mm-dd'.log'" />
  <maxsizerollbackups value="7" />
  <maximumfilesize value="1mb" />
  <layout type="log4net.layout.patternlayout">
  <conversionpattern value="%date [%thread] %-5level %logger [%property{ndc}] - %message%newline" />
  </layout>
 </appender>

 <!-- setup the root category, add the appenders and set the default level -->
 <root>
  <level value="all" />
  <appender-ref ref="consoleappender" />
  <appender-ref ref="fileappender" />
  <appender-ref ref="rollinglogfileappender" />
 </root>

 </log4net>
</configuration>

配置文件的相关说明,可以查看另一篇文章

在startup.cs中配置log4net

public static iloggerrepository repository { get; set; }

public startup(iconfiguration configuration)
{
 configuration = configuration;
 //log4net
 repository = logmanager.createrepository("netcorerepository");
 //指定配置文件
 xmlconfigurator.configure(repository, new fileinfo("log4net.config"));
}

 controller中的使用

private ilog log = logmanager.getlogger(startup.repository.name, typeof(valuescontroller));

[httpget]
public actionresult<ienumerable<string>> get()
{
 log.info(1111111111111111111);
 return new string[] { "value1", "value2" };
}

控制台中的使用

iloggerrepository repository = logmanager.createrepository("netcorerepository");

xmlconfigurator.configure(repository, new fileinfo("log4net.config"));

ilog log = logmanager.getlogger(repository.name,"netcorelog4net");
 
log.info("test log");

以上所述是www.887551.com给大家介绍的.net core日记记录详解整合,希望对大家有所帮助