Log4Net从Mvc转到.Net Core

原项目用的Log4Net,不过版本比较旧,在Core里新版也进行了支持,本文用的是现在最新版本2.0.8

1、LogHelper帮助类放另一个类库中 Log/LogHelper.cs

2、单独建的配置文件放在主项目下,LogConfig/Log4Net.config

具体位置如下图:


LogHelper.cs内容
升级版本后本来的LogManager.GetLogger()方法要指定Repository 看文章都是要
CreateRepository一个.
  private static readonly ILoggerRepository Repository = LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(Hierarchy))
不过我这样写就是不行,没有报错日志也不会写入.后面研究半天用GetRepository解决.
  private static readonly ILoggerRepository Repository = LogManager.GetRepository(Assembly.GetCallingAssembly());
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Concurrent;
using System.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using log4net.Repository;
using log4net.Repository.Hierarchy;

//指定log4net使用的config文件来读取配置信息
[assembly: XmlConfigurator(ConfigFile = @"LogConfig\Log4Net.config", Watch = true)]
namespace C.Until
{
    /// <summary>
    /// 日志帮助类
    /// </summary>
    public class LogHelper
    {
        #region 旧版本
        //private static readonly ILog Loginfo = LogManager.GetLogger("loginfo");
        //private static readonly ILog LogError = LogManager.GetLogger("logerror");
        #endregion


        private static readonly ILoggerRepository Repository = LogManager.GetRepository(Assembly.GetCallingAssembly());
        private static readonly ILog Loginfo = LogManager.GetLogger(Repository.Name, "loginfo");
        private static readonly ILog LogError = LogManager.GetLogger(Repository.Name, "logerror");

        public static void Error(string errorMsg, Exception ex = null)
        {
            if (ex != null)
            {
                LogError.Error(errorMsg, ex);
            }
            else
            {
                LogError.Error(errorMsg);
            }
        }

        public static void Info(string msg)
        {
            Loginfo.Info(msg);
        }
    }
}

Log4Net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!--添加自定义节点:log4net  type:解析类名,程序集名(log4net.dll)-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <appender name="Log4Net_INFO" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <file value="Log\\LogInfo\\" />
      <encoding value="utf-8" />
      <!--是否追加到文件,默认为true,通常无需设置-->
      <appendToFile value="true"/>
      <RollingStyle value="Date"/>
      <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
      <DatePattern value="&quot;log&quot;yyyyMM&quot;.log&quot;" />
      <!--日志文件名是否为静态-->
      <StaticLogFileName value="false"/>
      <!--多线程时采用最小锁定-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--布局(向用户显示最后经过格式化的输出信息)-->
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="记录时间:%date %n错误描述:%message%newline %n"  />
      </layout>
    </appender>

    <appender name="Log4Net_ERROR" type="log4net.Appender.RollingFileAppender">
      <!--定义文件存放位置-->
      <file value="Log\\LogError\\" />
      <encoding value="utf-8" />
      <!--是否追加到文件,默认为true,通常无需设置-->
      <appendToFile value="true"/>
      <RollingStyle value="Date"/>
      <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
      <DatePattern value="&quot;log&quot;yyyyMM&quot;.log&quot;" />
      <!--日志文件名是否为静态-->
      <StaticLogFileName value="false"/>
      <!--多线程时采用最小锁定-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <!--布局(向用户显示最后经过格式化的输出信息)-->
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="记录时间:%date %n错误描述:%message%newline %n"  />
      </layout>
    </appender>
    
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="Log4Net_ERROR" />
    </logger>
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="Log4Net_INFO" />
    </logger>

  </log4net>
</configuration>

这里因为不同消息放在不同文件 分类处理用的“ogger name="logerror" 此种属性.

ps:在LogHelper.cs文件中用[assembly: XmlConfigurator(ConfigFile = @"LogConfig\Log4Net.config", Watch = true)]来读取配置文件,也可以在Startup.cs中注册文件路径.不过为了独立性 方便移植到别的项目中就没用此方法.

 

posted @ 2018-04-12 16:25  ♀影☆响  阅读(657)  评论(1编辑  收藏  举报