欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net core 杂记:日记记录

程序员文章站 2022-07-11 08:05:53
ASP.NET Core 有内置的log组件,遗憾的是看了微软官方文档,貌似无法直接将日志存于文件或数据库,只能由自己实现或引用第三方日志组件。 以下为Nlog和log4net的使用记录 Nlog使用 搜索添加Nuget包 搜索添加Nuget包 新建一个xml文件,并改名为nlog.config 新 ......

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");