当前位置: 首页 > 工具软件 > log4net > 使用案例 >

.NetCore 中使用Log4Net

禄豪
2023-12-01

Log4Net 使用

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

  • Microsoft.Extensions.Logging.Log4Net.AspNetCore

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

    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>();
                    }) ;
    
  2. 新建log4net.config 日志配置文件,加入如下代码

<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="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="%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>
  1. 使用log4net 添加日志

NLog 使用

  1. 安装包:NLog.Web.AspNetCore

  2. 新建配置文件:nlog.config

    <?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>
    
  3. 修改Program.s,声明使用nlog

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>();
                              });

至此,准备工作已经结束

  1. 使用nlog 记录日志

    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目标:

    < 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提供了许多预定义的目标。

 类似资料: