.NetCore 中使用Log4Net

2023-02-16 18:45:34 浏览数 (2)

Log4Net 使用

  1. 安装2个包
  • Microsoft.Extensions.Logging
  • Microsoft.Extensions.Logging.Log4Net.AspNetCore

在Program中配置日志,请自行添加相关using

代码语言:javascript复制
internal static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
    			//配置log4net
                .ConfigureLogging(p =>
                {
                    p.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
                    p.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
                    var path = Directory.GetCurrentDirectory()   "\log4net.config";
                    //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径
                    p.AddLog4Net(path);
                })                
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }) ;

新建log4net.config 日志配置文件,加入如下代码

代码语言:javascript复制
<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout" value="�te [%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="�te [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logfile/" />
        <appendToFile value="true" />
        <rollingStyle value="Composite" />
        <staticLogFileName value="false" />
        <datePattern value="yyyyMMdd'.log'" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="�te [%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>
  1. 使用log4net 添加日志

NLog 使用

安装包:NLog.Web.AspNetCore

新建配置文件:nlog.config

代码语言:javascript复制
<?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">

    <targets>
        <!--此部分中的所有目标将自动异步-->
        <target name="asyncFile" xsi:type="AsyncWrapper">
            <!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"-->
            <target name="log_file" xsi:type="File"
                    fileName="${basedir}/ProjectLogs/${shortdate}/${logger}-${level}-${shortdate}.txt"
                    layout="${longdate} | ${message} ${onexception:${exception:format=message} ${newline} ${stacktrace} ${newline}"
                    archiveFileName="${basedir}/archives/${logger}-${level}-${shortdate}-{#####}.txt"
                    archiveAboveSize="102400"
                    archiveNumbering="Sequence"
                    concurrentWrites="true"
                    keepFileOpen="false" />
        </target>
        <!--使用可自定义的着色将日志消息写入控制台-->
        <target name="colorConsole" xsi:type="ColoredConsole" layout="[${date:format=HH:mm:ss}]:${message} ${exception:format=message}" />
    </targets>

    <!--规则配置,final - 最终规则匹配后不处理任何规则-->
    <rules>
        <logger name="Microsoft.*" minlevel="Info" writeTo="" final="true" />
        <logger name="*" minlevel="Info" writeTo="asyncFile" />
        <logger name="*" minlevel="Warn" writeTo="colorConsole" />
    </rules>
</nlog>

修改Program.s,声明使用nlog

代码语言:javascript复制
public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .UseNLog() //使用nlog
    .ConfigureWebHostDefaults(webBuilder =>
                              {
                                  webBuilder.UseStartup<Startup>();
                              });

至此,准备工作已经结束

使用nlog 记录日志

代码语言:javascript复制
public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("进入Home-Index页面啦");
        _logger.LogError("页面发生错误的时候记录");
        _logger.LogWarning("页面发生警告");
        return View();
    }
}

NLog配置文件信息简单概述:

rules【规则】说明:

规则是logger具有以下属性的元素: name - 记录器名称过滤器 - 可能包含通配符(*和?) minlevel - 记录的最低级别 maxlevel - 记录的最高级别 level - 单级记录 levels - 逗号分隔的记录级别列表 writeTo - 逗号分隔的要写入的目标列表 final - 最终规则匹配后不处理任何规则 enabled- 设置为false禁用规则而不删除它 ruleName- 规则标识符,允许使用Configuration.FindRuleByName和进行规则查找Configuration.RemoveRuleByName。在NLog 4.6.4中引入 注意:虽然命名了规则logger,但它没有定义记录器。它引用一个或多个记录器。 通过将规则name模式与记录器名称匹配,将规则映射到记录器。规则name属性可以包括通配符(*和?),以通过通配符匹配来匹配记录器名称。 * - 匹配0个或更多字符 ? - 恰好匹配1个字符

targets【目标】:

每个目标由一个target元素表示。每个目标需要两个属性: name - 目标名称 type - 目标类型 - 例如“文件”,“数据库”,“邮件”。使用名称空间时,此属性已命名xsi:type。 除了这些属性之外,目标通常还接受其他参数,这些参数会影响诊断跟踪的写入方式。每个目标都有一组不同的参数,它们在项目主页上有详细描述,并且它们是上下文相关的。Intellisense也可以在Visual Studio中使用。 例如,File目标接受fileName定义输出文件名的参数,Console目标具有error参数,该参数确定诊断跟踪是否写入标准错误(stderr)而不是进程的标准输出(stdout)。 此示例演示了一个targets定义多个目标的部分:两个文件,一个网络目标和OutputDebugString目标:

代码语言:javascript复制
< targets >
< target name = “ f1 ” xsi :type = “ File ” fileName = “ file1.txt ” />
< target name = “ f2 ” xsi :type = “ File ” fileName = “ file2.txt ” /> 
< target name = “ n1 ” xsi :type = “ Network ” address = “ tcp:// localhost:4001 ” />
< target name = “ ds ” xsi :type = “ OutputDebugString ” />
</ targets >

NLog提供了许多预定义的目标。

0 人点赞