log4net

        [STAThread]
        static void Main(string[] args)
        {
            string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
            string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
            //string configFilePath = Path.Combine(assemblyDirPath, "HelperToolslog4net.config");
            string configFilePath = Path.Combine(assemblyDirPath, "log4net.config");
            //DOMConfigurator.Configure(new FileInfo(configFilePath));
            log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath));
}
         public static ILog GetLoggerByName(string name)
         {
             if (LogManager.Exists(name) == null)
             {

                 // Pattern Layout defined
                 PatternLayout patternLayout = new PatternLayout();
                 patternLayout.ConversionPattern = "%date %thread %level %logger - %message%newline";
                 patternLayout.ActivateOptions();

                 // configurating the RollingFileAppender object
                 RollingFileAppender appender = new RollingFileAppender();
                 appender.Name = name;
                 appender.AppendToFile = true;
                 appender.File = $"Logs\{name}.log";
                 appender.StaticLogFileName = true;
                 appender.PreserveLogFileNameExtension = true;
                 appender.LockingModel = new FileAppender.MinimalLock();
                 appender.Layout = patternLayout;
                 appender.MaxSizeRollBackups = 512;
                 appender.MaximumFileSize = "150MB";
                 appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
                 appender.ActivateOptions();

                 Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

                 var loger = hierarchy.GetLogger(name, hierarchy.LoggerFactory); //!!! 此处写法是重点,不容更改
                 loger.Hierarchy = hierarchy;
                 loger.AddAppender(appender);
                 loger.Level = Level.All;

                 BasicConfigurator.Configure();//!!! 此处写法是重点,不容更改

                 var appname = Assembly.GetEntryAssembly().GetName().Name;
                 var version = Assembly.GetEntryAssembly().GetName().Version;
                 loger.Log(Level.Info, $"Log name {name} created for Application: {appname} Version: {version}", null);
             }
             var log = LogManager.GetLogger(name);
             return log;
         }
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"  type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <logger name="LogInfo">
      <level value="ALL" />
      <appender-ref ref="LogInfoAppender" />
    </logger>
    <appender  name="LogInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
        <param name="File" value="Log.txt" />
        <param name="Encoding" value="utf-8" />
        <param name="AppendToFile" value="true" />
        <param name="RollingStyle" value="Composite" />
        <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
        <param name="StaticLogFileName" value="false" />
        <param name="MaxSizeRollBackups" value="100" />
        <param name="MaximumFileSize" value="10MB" />
        <param name="PreserveLogFileNameExtension" value="true"/>
        <param name="CountDirection" value="1" />
        <datePattern value="yyyy-MM-dd" />

        <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d:%-5level [%t](%C:%M:%L) - %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ALL" />
        <param name="LevelMax" value="OFF" />
      </filter>
    </appender>
    
  </log4net>

</configuration>
原文地址:https://www.cnblogs.com/xytmj/p/15237129.html