(说明:下载log4net相关资料dll地址https://download.csdn.net/download/sinat_34534488/10613853)
一:web.config配置(必要步骤)
<configuration>
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="WindowsFormsAddUsers.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="PTSUpLoadInfoService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<!-- 上面这一段放在 <system.web>、 <appSettings>前面 -->
<!-- 下面这一段放在 <system.web>、 <appSettings>后面 -->
<log4net>
<root>
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG-->
<level value="ALL" />
<appender-ref ref="InfoFileAppender" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
<appender name="InfoFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="LogFile/" />
<appendToFile value="true" />
<param name="DatePattern" value="yyyyMMdd.'txt'" />
<rollingStyle value="Date" />
<maxSizeRollBackups value="100" />
<maximumFileSize value="5MB" />
<staticLogFileName value="false" />
<Encoding value="UTF-8" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log/" /> <!-- 生成的日志文件 -->
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HHmm" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
</log4net>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
</configuration>
二:日志的两种方法使用(第一种适用于只有一个控制器接口中,第二种适用于多个不同控制器及接口:建议使用第二种)
方法1.不封装类:
i)在要记日志的控制器开头声明
private static readonly ILog Log = LogManager.GetLogger(typeof(控制器名称));
ii)在想要及日志的地方写上
Log.Info("记录日志!");
方法2.封装类:
i)封装日志类
public class LogHelper{
public static Dictionary<string, ILoggerRepository> logList = new Dictionary<string, ILoggerRepository>();
public static ILog GetIlog(string name) {
log4net.Repository.ILoggerRepository repository = null;
if (logList.ContainsKey(name)) {
repository = logList[name];
try{
log4net.Appender.IAppender[] listappender = repository.GetAppenders();
foreach (log4net.Appender.FileAppender fileapp in listappender) {
fileapp.File = "Log/" + DateTime.Now.ToString("yyyyMMdd") + "/" + name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_NX.log";
fileapp.ActivateOptions();
}
}
catch (Exception e) {
}
ILog logger = log4net.LogManager.GetLogger(repository.Name, name);
return logger;
}
else {
log4net.Filter.LevelRangeFilter levfilter = new log4net.Filter.LevelRangeFilter();
levfilter.ActivateOptions();
//Appender1
log4net.Appender.FileAppender appender1 = new log4net.Appender.FileAppender();
appender1.AppendToFile = true;
appender1.File = "Log/" + DateTime.Now.ToString("yyyyMMdd") + "/" + name + "_" + DateTime.Now.ToString("yyyyMMdd") + "_NX.log";
appender1.ImmediateFlush = true;
appender1.LockingModel = new log4net.Appender.FileAppender.MinimalLock();
appender1.Name = name;
appender1.AddFilter(levfilter);
log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout("%date [%thread] %-5level - %message%newline");
layout.Header = "------ New session ------" + Environment.NewLine;
layout.Footer = "------ End session ------" + Environment.NewLine;
appender1.Layout = layout;
appender1.ActivateOptions();
repository = log4net.LogManager.CreateRepository(name);
log4net.Config.BasicConfigurator.Configure(repository, appender1);
ILog logger = log4net.LogManager.GetLogger(repository.Name, name);
logList.Add(name, repository);
return logger;
}
}
/// <summary>
/// 写日志
/// </summary>
/// <param name="name">文件名称(已自动按日期分文件夹)</param>
/// <param name="message">消息内容</param>
public static void WriteLog(string name, string message)
{
GetIlog(name).Info(message);
}
}
ii)调用类中的方法
LogHelper.WriteLog("txt的名称", “记录的内容”);
//相同的接口方法‘txt的名称’一样(会生成一个TXT)。例如:
// LogHelper.WriteLog("发布流程", “操作失败”);
//LogHelper.WriteLog("发布流程", “所传数据存在空值”)。