.net core 3.0 NLog 日志的使用
创始人
2024-03-07 11:34:37
0

1、先项目中包管理 安装

2、在.net core 项目中Program.cs文件增加

  Host.CreateDefaultBuilder(args)
                    .ConfigureLogging((context, logging) => {
                        logging.ClearProviders();
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                            {
                                webBuilder.UseStartup();
                            }).UseNLog()
                    .UseWindowsService();

3、全局的使用

private static Logger logger = LogManager.GetCurrentClassLogger();

4、多租户

        private static NLog.ILogger CreateNLogInstance(string basePath, string TenancyFID, string repositoryName)
        {
            NLog.ILogger logTemp;
            var path = SystemParas.AppBasePath + "\\MrNlog.config";
            NLog.LogFactory logFactory = new NLog.LogFactory();
            //动态构建NLog配置文件
            //logFactory.Configuration = CreateLoggingConfiguration(basePath, repositoryName);
            //从配置文件读取NLog配置文件 修改其保存得路径和归档文件
            logFactory.Configuration = new NLog.Config.XmlLoggingConfiguration(path, true, logFactory);
            var fTagert = logFactory.Configuration.FindTargetByName(TargetName);
            fTagert.FileName = basePath + "/Log/Mes-Server-Log ${date:format=yyyy-MM-dd-HH}.log";//${shortdate}/${level}
            if (fTagert.ArchiveFileName != null)
            {
                fTagert.ArchiveFileName = basePath + "/Log/archives/log.{#####}.txt";//归档文件名
                fTagert.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
            }
            //NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel);
            var rule = logFactory.Configuration.LoggingRules.Where(x => x.Targets.Any(s => s.Name == TargetName)).FirstOrDefault();
            logTemp = logFactory.GetCurrentClassLogger();
            return logTemp;
        }

5、动态修改日志等级

 static private void SetNLogFactoryParams(LogFactory logFactory, int LogFileMaxSize)
        {
            var fileNotTarget = logFactory.Configuration.FindTargetByName(TargetName);
            if (fileNotTarget == null)
            {
                return;
            }
            //fileNotTarget.MaxArchiveDays = baseLogFileMaxNumber;
            //fileNotTarget.MaxArchiveFiles = LogFileMaxSize;
            var ruleNot = logFactory.Configuration.LoggingRules.Where(x => x.Targets.Any(s => s.Name == TargetName)).FirstOrDefault();
            if (ruleNot == null)
            {
                return;
            }
            if (logLevelEnm == LogLevelEnum.ALL)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Debug);
                ruleNot.EnableLoggingForLevel(LogLevel.Trace);
                ruleNot.EnableLoggingForLevel(LogLevel.Info);
                ruleNot.EnableLoggingForLevel(LogLevel.Warn);
                ruleNot.EnableLoggingForLevel(LogLevel.Error);
                ruleNot.EnableLoggingForLevel(LogLevel.Fatal);
            }
            else if (logLevelEnm == LogLevelEnum.INFO)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Warn);
                ruleNot.DisableLoggingForLevel(LogLevel.Error);
                ruleNot.DisableLoggingForLevel(LogLevel.Fatal);
            }
            else if (logLevelEnm == LogLevelEnum.WARN)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Warn);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Error);
                ruleNot.DisableLoggingForLevel(LogLevel.Fatal);
            }
            else if (logLevelEnm == LogLevelEnum.DEBUG)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Error);
                ruleNot.DisableLoggingForLevel(LogLevel.Fatal);
            }
            else if (logLevelEnm == LogLevelEnum.ERROR)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Error);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Fatal);
            }
            else if (logLevelEnm == LogLevelEnum.FATAL)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Fatal);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Error);
            }
            else if (logLevelEnm == LogLevelEnum.OFF)
            {
                ruleNot.EnableLoggingForLevel(LogLevel.Off);
                ruleNot.DisableLoggingForLevel(LogLevel.Fatal);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Trace);
                ruleNot.DisableLoggingForLevel(LogLevel.Info);
                ruleNot.DisableLoggingForLevel(LogLevel.Debug);
                ruleNot.DisableLoggingForLevel(LogLevel.Error);
            }

          // 只有加这个才会起效果

            logger.nLogger.Factory.ReconfigExistingLoggers();
        }

6、配置文件 MrNlog.config


      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Trace" internalLogFile="D:\temp\nlog-internal.log">
    
                         layout="${newline} ${longdate} ${uppercase:${level}} ${threadid} ${newline} Message: ${message} ${newline}}" encoding="utf-8"
                archiveEvery="Hour" archiveAboveSize="2097152"
                maxArchiveDays="1"
                maxArchiveFiles="2"/>
      

    
            
        
        
        
        
        
    

相关内容

热门资讯

上证观察家 | “多速并行”:... 主要发达经济体的货币政策已从“同向宽松”转向“多速并行”:美联储在连续降息后趋于谨慎,英国央行在通胀...
委内瑞拉议会通过法律 应对美海... 新华社加拉加斯12月23日电(记者缪培源 田睿)委内瑞拉全国代表大会23日一致通过《保护航行和贸易自...
银河证券:券商行情稳中有进,政... 银河证券指出,国家“稳增长、稳股市”、“提振资本市场”的政策目标将持续定调板块未来走向,流动性适度宽...
三部门开展“法援志愿行”活动 本报北京12月23日电 (记者张璁)司法部、教育部、共青团中央近日印发通知,在全国组织开展并持续推进...
榆林市第二期工信领域争资争项暨... 阳光讯(记者 张壮壮)为进一步助力榆林市工信系统及重点企业精准把握惠企政策导向,帮助企业争取更多项目...
个人征信修复政策出台 警惕“收... 山西晚报·山河+讯(记者 辛戈)个人信用可获官方“免申即享”式修复,但“收费洗白”的新骗局也随之冒头...
代表人诉讼步入常态化 年内投资... 证券时报记者 孙宪超 科创信息12月23日晚公告,当日公司和相关责任人收到中国证监会湖南监管局下发的...
金鸿控股集团股份有限公司 关于... 本公司及董事会全体成员保证信息披露的内容真实、准确、完整,没有虚假记载、误导性陈述或重大遗漏。 特别...
用好“政策+改革”,海南自贸港... 12月18日,海南自由贸易港正式启动全岛封关,步入建设新阶段。 回望来时路,一组亮眼数据勾勒出海南对...
公布《行政执法监督条例》 新华社北京12月23日电 国务院总理李强日前签署国务院令,公布《行政执法监督条例》(以下简称《条例》...