方法一 配置文件实现
一 导入LOG4NET
打开VS2012 工具》》库程序包管理器》》管理解决方案的NuGet程序包,搜索LOG4NET,如下图
二 添加配置文件log4net.config
在配置文件中添加一下代码
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> </system.web> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <log4net> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogError\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="100" /> <param name="MaxFileSize" value="10240" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".txt"" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%n异常时间:%d %n异常级别:%-5p%n异常内容:%m%n" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\" /> <param name="AppendToFile" value="true" /> <param name="MaxFileSize" value="10240" /> <param name="MaxSizeRollBackups" value="100" /> <param name="StaticLogFileName" value="false" /> <param name="DatePattern" value="yyyyMMdd".txt"" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n日志内容:%m%n%n" /> </layout> </appender> </log4net> </configuration>
三 添加Log4netHelper类
插入代码
1 using log4net; 2 3 // 4 /// 5 6 public class Log4netHelper 7 { 8 private static readonly ILog loginfo = LogManager.GetLogger("loginfo"); 9 10 private static readonly ILog logerror = LogManager.GetLogger("logerror"); 11 /// <summary> 12 /// 记录错误日志 13 /// </summary> 14 /// <param name="info"></param> 15 /// <param name="ex"></param> 16 public static void WriteErrorLog(string info, Exception ex) 17 { 18 if (logerror.IsErrorEnabled) 19 { 20 logerror.Error(info, ex); 21 } 22 } 23 /// <summary> 24 /// 记录一般信息 25 /// </summary> 26 /// <param name="info"></param> 27 public static void WriteInfoLog(string info) 28 { 29 if (loginfo.IsInfoEnabled) 30 { 31 loginfo.Info(info); 32 } 33 } 34 35 }
四 调用Log4netHelper 的函数
........ ....... try{ } catch (Exception ex) { Log4netHelper.WriteErrorLog("测试", ex); }
最后一点要添加以下代码
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
可以在AssemblyInfo.cs类中添加或在初始化程序中添加
方法二 纯代码实现
using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Log { public class Log4netHelper { private static ILog loginfo;//= LogManager.GetLogger("loginfo"); private static ILog logerror;// = LogManager.GetLogger("logerror"); private static ILog logwarning;// = LogManager.GetLogger("logwarning"); /// <summary> /// 记录错误日志 /// </summary> /// <param name="info"></param> /// <param name="ex"></param> public static void WriteErrorLog(string info, Exception ex) { logerror = GetLoggerByName("error"); if (logerror.IsErrorEnabled) { logerror.Error(info, ex); } } /// <summary> /// 记录一般信息 /// </summary> /// <param name="info"></param> public static void WriteInfoLog(string info) { loginfo = GetLoggerByName("info"); if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } /// <summary> /// 警告信息 /// </summary> /// <param name="info"></param> public static void WriteWarning(string info) { logwarning = GetLoggerByName("warn"); if (logwarning.IsWarnEnabled) { logwarning.Warn(info); } } /// <summary> /// 删除日志 /// </summary> public static void DeleteLogFile() { DeleteLog(logerror); DeleteLog(loginfo); DeleteLog(logwarning); } private static void DeleteLog(ILog log) { Task.Run(() => { var apps = log.Logger.Repository.GetAppenders(); if (apps.Length <= 0) return; var now = DateTime.UtcNow.AddDays(-10);//删除10之前日志 foreach (var item in apps) { if (item is log4net.Appender.RollingFileAppender) { log4net.Appender.RollingFileAppender roll = item as log4net.Appender.RollingFileAppender; var dir = System.IO.Path.GetDirectoryName(roll.File); var files = System.IO.Directory.GetFiles(dir, "*.log"); foreach (var filepath in files) { var file = new System.IO.FileInfo(filepath); if (file.CreationTimeUtc < now) { try { file.Delete(); } catch { } } } } } }); } static ILog GetLoggerByName(string name) { if (LogManager.Exists(name) == null) { log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender(); appender.File = @"Log\\" + name + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; appender.AppendToFile = true; appender.MaxSizeRollBackups = 10; appender.MaximumFileSize = "10MB"; appender.StaticLogFileName = false;//是否采用静态文件名。 appender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size; appender.Layout = new log4net.Layout.PatternLayout("%n异常时间:%d %n异常级别:%-5p%n异常内容:%m%n"); appender.ActivateOptions();// 这个要调用一下呢 log4net.Repository.Hierarchy.Hierarchy hierarchy = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); log4net.Repository.Hierarchy.Logger loger = hierarchy.GetLogger(name, hierarchy.LoggerFactory); //!!! 此处写法是重点,不容更改 //log4net.Repository.Hierarchy.Logger loger = hierarchy.LoggerFactory.CreateLogger((log4net.Repository.ILoggerRepository)hierarchy, name); loger.Hierarchy = hierarchy; //loger.Parent = hierarchy.Root; //loger.AddAppender((log4net.Appender.IAppender)appender); loger.AddAppender(appender); loger.Level = GetLoggerLevel(name); loger.Repository.Configured = true; //log4net.Config.BasicConfigurator.Configure(appender); } return LogManager.GetLogger(name); } static log4net.Core.Level GetLoggerLevel(string level) { if (!string.IsNullOrEmpty(level)) { switch (level.ToLower().Trim()) { case "debug": return log4net.Core.Level.Debug; case "info": return log4net.Core.Level.Info; case "warn": return log4net.Core.Level.Warn; case "error": return log4net.Core.Level.Error; case "fatal": return log4net.Core.Level.Fatal; } } return log4net.Core.Level.Info; } } }