asp.net错误日志写入
当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,因为里面有一个Application_Error函数,我觉得这个就是管理错误的。其实,asp.net里还有一个方法,就是在 page 里指定出错的页面,由这个页面专门管理,我觉得这个方法也好,但是每次都要到相应的page里指定参数,不过,我觉得应该可以在web.config里配置吧。但是我还是喜欢下面的方法。下面我们就开始吧。
Global.asax代码:
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
Exception objErr = Server.GetLastError().GetBaseException();
string error = string.Empty;
string errortime = string.Empty;
string erroraddr = string.Empty;
string errorinfo = string.Empty;
string errorsource = string.Empty;
string errortrace = string.Empty;
error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";
errortime = "发生时间:" + System.DateTime.Now.ToString();
error += "发生异常页: " + Request.Url.ToString() + "<br>";
erroraddr = "发生异常页: " + Request.Url.ToString();
error += "异常信息: " + objErr.Message + "<br>";
errorinfo = "异常信息: " + objErr.Message;
//error +="错误源:"+objErr.Source+"<br>";
//error += "堆栈信息:" + objErr.StackTrace + "<br>";
errorsource = "错误源:" + objErr.Source;
errortrace = "堆栈信息:" + objErr.StackTrace;
error += "--------------------------------------<br>";
Server.ClearError();
Application["error"] = error;
//独占方式,因为文件只能由一个进程写入.
System.IO.StreamWriter writer=null;
try
{
lock (this)
{
// 写入日志
string year = DateTime.Now.Year.ToString();
string month = DateTime.Now.Month.ToString();
string path = string.Empty;
string filename = DateTime.Now.Day.ToString() + ".txt";
path = Server.MapPath("~/Error/") + year + "/" + month;
//如果目录不存在则创建
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);
//if (!file.Exists)
// file.Create();
//file.Open(System.IO.FileMode.Append);
writer = new System.IO.StreamWriter(file.FullName, true);//文件不存在就创建,true表示追加
writer.WriteLine("用户IP:" + Request.UserHostAddress);
//if (Session["UserName"] != null)
//{
// writer.WriteLine("用户名" + System.Web.HttpContext.Current.Session["UserName"].ToString());
//}
writer.WriteLine(errortime);
writer.WriteLine(erroraddr);
writer.WriteLine(errorinfo);
writer.WriteLine(errorsource);
writer.WriteLine(errortrace);
writer.WriteLine("--------------------------------------------------------------------------------------");
//writer.Close();
}
}
finally
{
if (writer != null)
writer.Close();
}
Response.Redirect("~/Error/ErrorPage.aspx");
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Session.Timeout = 60;
if (Session.IsNewSession)
{
lock (this)
{
if (Application["Counts"] != null)
{
Application["Counts"] = Int32.Parse(Application["Counts"].ToString()) + 1;
}
else
{
Application["Counts"] = 1;
}
}
}
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
if (Application["Counts"] != null)
{
Application["Counts"] = Int32.Parse(Application["Counts"].ToString())-1;
}
}
</script>
显示出错信息的页面
ErrorPage.aspx代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ErrorPage.aspx.cs" Inherits="Error_ErrorPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>出错信息</title>
<link href="css/SITE.CSS" type="text/css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Width="568px"></asp:Label>
</form>
</body>
</html>
ErrorPage.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
this.Label1.Text = Application["Error"].ToString();
}
这篇源于网络,网址已经忘记,敬请谅解!
asp.net错误日志写入的更多相关文章
- 手把手教你,C#.Net如何用Log4net把错误日志写入到SQLite数据库中
在项目中,我们往往会有把错误日志记录下来的习惯,这样有利于当网站发布后,能第一时间找到错误的所在地,以及错误的原因,以便于我们第一时间纠错.往往我们会把错误日志直接写到txt文本中,虽然操作简单,但是 ...
- 错误日志写入到本地磁盘(lock 队列)
今天照常在b站上看看编程:看到有讲错误日志处理的,自己没写过日志,就看看了看: 主要是在讲的时候牵扯到了队列和lock的知识点:这方面知识自己了解的更少,那就记录一下.
- ASP.NET Application_Error错误日志写入
一个web项目开发已完成,测试也通过,但是,bug是测不完的,特别是在一个大的网络环境下.那么,我们就应该记录这些错误,然后改正.这里,我的出错管理页面是在global.asax里面的,利用里面的Ap ...
- MySQL8.0错误日志Error log
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 理论知识 错误日志内容 错误日志包含mysqld启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行 ...
- asp.net 添加错误日志
在开发程序中,错误日志很有必要.今天就把使用到的添加错误日志,记录下来,方便以后查看 利用的asp.net错误处理机制 Application_Error 贴出代码 protected void Ap ...
- ASP.NET Log4Net日志的配置及使用,文件写入
Log4net是Apache log4j框架在Microsort.NET平台实现的框架. 帮助程序员将日志信息输出到各种目标(控制台,数据库,文件等) 1.新建一个ASP.NET项目 2.新建一个 l ...
- Asp.Net MVC中记录错误日志保存到本地txt文件
为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...
- ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- ASP.NET - 记录错误日志
不需要像log4net/Nlog/Common Logging配置,简单好用. 不用增加声明logger对象,可记录当前执行状况. 可以定义 维护功能模板的开发人员,以便用功能模块对于开发人员. 出处 ...
随机推荐
- oracle常见sql积累
select lower('HELLO') from dual;select lpad(100, 5, '*') from dual;select sysdate + 1 / 24 from dual ...
- IOS QuartzCore核心动画框架
IOS QuartzCore核心动画框架 核心动画框架 使用核心动画需要引入的框架:#import CALayer: CoreAnimation CALayer就是UIView上的图层,很多的CALa ...
- Java 内部类种类及使用解析
package com.learnjava.innerclass; class MemberInner { private int d = 1; private int a = 2; // 定义一个成 ...
- JS拖动div的原理
要实现移动窗体,首先要捕获三个参数:1.a = 鼠标点击时的坐标.2.b = 被移动窗体的左顶点坐标.3.c = 鼠标移动时的坐标.然后还要算出你鼠标无论点击窗体哪个位置,移动改变的都是 (d = 窗 ...
- Js Framework
http://www.mhtml5.com/2012/06/5119.html http://www.mhtml5.com/2012/06/5118.html http://cubiq.org/isc ...
- Borg Maze
poj3026:http://poj.org/problem?id=3026 题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- Spring boot Mybatis
最近刚接触Spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybatis呢,下面几个配置类来搞定. 在我的代码 ...
- [置顶] 技术人血泪史:七种IT失误让你直接走人
IT人士的真实故事:搞出大麻烦,旋即遭解雇 如今想找一份理想的IT工作并不容易,但丢掉一份工作却非常简单. 导致自己被炒鱿鱼的原因很多,无论是没能尽到保护雇主数字资产的义务.或者是滥用手中的权限以达到 ...
- code_analyzer(代码分析助手)
软件名: code_analyzer 使用c语言 pcre正则库分析源码文件,包括文件中的头文件.宏定义.函数. 用途: 无聊时,可以用来打发下时间. 演示: 对于本源程序的分析结果如下: ##### ...
- 图论(网络流):[SCOI2015]小凸玩矩阵
Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最 ...