第一步,配置web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net debug="false">
<appender name="ErrorLogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="App_Data/ErrorLog/YoyoMobileWeb_ErrorLog.log" />
<param name="datePattern" value="yyyy-MM-dd HH:mm" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="-----------------------------Error-----------------------------%newline%d %-5p%n %c%n %m%n" />
</layout>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<appender name="WarnLogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="App_Data/ErrorLog/YoyoMobileWeb_WarnLog.log" />
<param name="datePattern" value="yyyy-MM-dd HH:mm" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="-----------------------------%p-----------------------------%newline%d %-5p%n %c%n %m%n" />
</layout>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="InfoLogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="App_Data/ErrorLog/YoyoMobileWeb_InfoLog.log" />
<param name="datePattern" value="yyyy-MM-dd HH:mm" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="-----------------------------%p-----------------------------%newline%d %-5p%n %c%n %m%n" />
</layout>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ErrorLogFileAppender" />
<appender-ref ref="WarnLogFileAppender" />
<appender-ref ref="InfoLogFileAppender" />
</root>
</log4net>
第二步 Global.aspx.cs配置
private static readonly ILog _logger = LogManager.GetLogger(typeof(MvcApplication));
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
}
protected void Application_Error(object sender, EventArgs e) {
bool enableErrorLog;
string form = string.Empty;
enableErrorLog = true;
try {
NameValueCollection coll = Request.Form;
foreach (string key in coll.AllKeys) {
if (key == "__VIEWSTATE"
|| key == "__EVENTVALIDATION"
|| key == "__EVENTTARGET"
|| key == "__EVENTARGUMENT"
|| string.IsNullOrEmpty(coll[key])) {
continue;
}
form += "\r\n" + key + ":" + coll[key] + ";";
}
} catch {
// ignored
}
if (enableErrorLog) {
string msg;
string time = Server.UrlEncode(DateTime.Now.ToString(CultureInfo.InvariantCulture));
Exception ex = Server.GetLastError();
if (ex != null) {
if (ex is HttpException) {
switch ((ex as HttpException).GetHttpCode()) {
case 403:
case 404:
return;
}
}
Server.ClearError();
msg = Server.UrlEncode(ex.Message);
//if (ex is HttpUnhandledException) {
//只要是sql的错误,都用“数据连接错误”来显示给用户
if (ex.InnerException is System.Data.SqlClient.SqlException) {
msg = "数据连接错误!";
}
//}
StringBuilder sb = new StringBuilder();
sb.Append("发生错误的页面为: ");
sb.Append(Request.Url.PathAndQuery);
sb.Append("\r\n");
sb.Append(" 上一个页面为:");
sb.Append(Request.UrlReferrer);
sb.Append("\r\n");
sb.Append(" 提交的Form数据:");
sb.Append(form);
sb.Append("\r\n");
sb.Append(string.Format(" 客户端信息:IP为{0},UserAgent信息为{1},浏览器信息为:{2}", new object[] { Request.UserHostAddress, Request.UserAgent, Request.Browser.Browser }));
sb.Append("\r");
string errorMessage = sb.ToString();
_logger.Error(errorMessage, ex);
if (ex is HttpRequestValidationException) {
Context.Response.Write("您的输入不合法!");
} else {
if (Context.Request.Url.AbsoluteUri.Contains("ashx") || Context.Request.Url.AbsoluteUri.Contains("ajax.aspx")) {
Context.Response.Clear();
Context.Response.StatusCode = 500;
Context.Response.Status = "500 Server Internal Error.";
Context.Response.Write("Ajax请求错误!");
Context.Response.End();
} else {
//Context.Response.Redirect(@"~/error.aspx");
}
}
}
}
}