日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

dotnet中的出錯處理

dotnet中的出錯處理

更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

近日給老美做外包項目,被老美逼出來了一套關于錯誤處理的方法,在此不敢藏拙,奉獻出來給大家批判。

首先,屏蔽程序中所有的自動錯誤處理,千萬不要出來:“
System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: 服務器無法處理請求。”等錯誤頁面,而應該是一些簡單易懂的東西,俺在此使用的是Duwamish 7.0里的錯誤處理頁面:
<body >
<H2>An error has occurred</H2>
<P>We were unable to complete your request. This failure has been logged with our
system administrators, who are currently working to resolve the problem. We
apologize for any inconvenience caused by this temporary service outage, and we
appreciate your patience as we work to improve our web site.</P>
</body>
當然,要做到這一點也很簡單,可以在web.config里這樣配置(假如你的錯誤頁面叫Error.aspx):
<customErrors
defaultRedirect = "Error.aspx"
mode="On"
/>
這個配置你可以給據你的需要修改(比如mode的值)。


其次,要把錯誤信息寫到日志中去。
我們定義錯誤日志信息的結構如下
public struct ErrorLogItem
{
public string User ;//當前登錄人
public string AppName ;//應用程序名稱
public string ClassName ;//錯誤發生的類名稱
public string FunctionName ;//錯誤發生的方法(事件)名稱
public string Position ;//錯誤的位置(或其它信息)
public string ErrorInfo ;//錯誤信息
public DateTime OccurTime ;//錯誤發生的時間
}

錯誤日志類如下所示:
public class ErrorLog
{
private static ErrorLog _Instance = null ;
private static string strRootName ;
private static XmlElement xmlRoot ;
private static XmlDocument xmlDoc ;
private ErrorLog()
{
Load() ;
}
private bool Load()
{
if (!File.Exists(AppGlobal.ErrorLogFile))
CreateErrorLogFile(AppGlobal.ErrorLogFile);

if (xmlDoc == null)
xmlDoc = new XmlDocument() ;
try
{
xmlDoc.Load(AppGlobal.ErrorLogFile) ;
}
catch
{
return false ;
}
xmlRoot = xmlDoc.DocumentElement ;
if (xmlRoot != null)
strRootName = "/" + xmlRoot.Name + "/" ;
return true ;
}
private void CreateErrorLogFile(string strFileName)
{
StringBuilder sb = new StringBuilder() ;
sb.Append("<?xml version='1.0\' ?> ") ;
sb.Append("<errorlog>") ;
sb.Append("</errorlog>") ;

XmlDocument xmlDoc = new XmlDocument() ;
xmlDoc.LoadXml(sb.ToString()) ;
xmlDoc.Save(strFileName) ;
}
private void AddXmlAttribute(XmlElement xNode,string strAttr,string strAttrvalue)
{
XmlAttribute xAttr = (XmlAttribute)xmlDoc.CreateNode(XmlNodeType.Attribute,strAttr,null) ;
xAttr.InnerText = strAttrvalue;
xNode.Attributes.Append(xAttr) ;
}
public void SetErrorLog(ErrorLogItem errItem)
{
XmlElement xErrorElement = xmlDoc.CreateElement("error") ;

AddXmlAttribute(xErrorElement,"username",errItem.User);
AddXmlAttribute(xErrorElement,"application",errItem.AppName);
AddXmlAttribute(xErrorElement,"classname",errItem.ClassName);
AddXmlAttribute(xErrorElement,"functionname",errItem.FunctionName);
AddXmlAttribute(xErrorElement,"position",errItem.Position);
AddXmlAttribute(xErrorElement,"occurtime",errItem.OccurTime.ToString("g"));
xErrorElement.InnerText = errItem.ErrorInfo ;

xmlRoot.AppendChild(xErrorElement) ;

if (xmlRoot.ChildNodes.Count > AppGlobal.MaxErrorLogCount)
xmlRoot.RemoveChild(xmlRoot.FirstChild) ;
xmlDoc.Save(AppGlobal.ErrorLogFile) ;
}

public static ErrorLog Instance()
{
if(_Instance == null)
{
_Instance = new ErrorLog() ;
}
return _Instance ;
}
}//end class

我們可以通過調用SetErrorLog方法來把信息寫到日志中去。
當然,日志的位置以及日志記錄錯誤信息的數量也是可以配置的
<appSettings>
<add key="errlogfile" value="c:\ddmsLog.xml" />
<add key="maxerrlogcount" value="1000" />
</appSettings>
我們可以通過下面的方法得到他們的值:
public static string ErrorLogFile
{
get
{
return ConfigurationSettings.AppSettings["errlogfile"].Trim() ;
}
}
public static int MaxErrorLogCount
{
get
{
return int.Parse(ConfigurationSettings.AppSettings["maxerrlogcount"].Trim()) ;
}
}

再次,我們還要把錯誤信息自動發到我們的信箱中(這一點很重要--至少對我這個項目來說,我不能跑到美國去調試,也不能老是讓老外告訴我發生了什么錯誤)
發送郵件的方法如下:
public static bool SendErrorLogMail(string StrTo,ErrorLogItem errItem)
{
MailLink.Load(AppGlobal.MAIL_CFG_FILE_PATH) ;

string StrName = MailLink.GetNodeText(MAILLINKITEM.USERNAME) ;
string StrCode = MailLink.GetNodeText(MAILLINKITEM.PASSWORD) ;

string strFrom = MailLink.GetNodeText(MAILLINKITEM.MAILFROM) ;
string strSubject = "Error Log" ;
string strSmtpServer = MailLink.GetNodeText(MAILLINKITEM.MAILSMTPSERVER) ;

string strMailBody = "<div>An error occur </div>" ;
strMailBody += "<div>Login User:" + errItem.User + "</div>" ;
strMailBody += "<div>Applicatin Name:" + errItem.AppName + "</div>" ;
strMailBody += "<div>ClassName:" + errItem.ClassName + "</div>" ;
strMailBody += "<div>Function Name:" + errItem.FunctionName + "</div>" ;
strMailBody += "<div>Error Position:" + errItem.Position + "</div>" ;
strMailBody += "<div>Error Information:" + errItem.ErrorInfo + "</div>" ;
strMailBody += "<DIV> </DIV>" ;
strMailBody += "<DIV> </DIV>" ;
strMailBody += "<DIV>" + errItem.OccurTime + "</DIV>" ;

bool blResult = MailLink.SendMail(StrTo,strMailBody,strSubject,strFrom,StrName,StrCode,strSmtpServer) ;

return blResult ;
}
意思大家應該明白,里面具體的一些方法調用大家可以寫自己的代碼來代替。
當然,郵箱地址也是可以配置的:
<appSettings>
<add key="errorlogemail" value="zl3624@china.com" />
</appSettings>
取出方法:
public static string ErrorLogEmail
{
get
{
return ConfigurationSettings.AppSettings["errorlogemail"].Trim() ;
}
}
最后,是用一個方法來調用寫日志和發郵件的方法:
public static void LogAppError(Exception thisErr,string strClass,string strFunc,string strPos,string strUser)
{
ErrorLogItem errItem = new ErrorLogItem() ;

errItem.AppName = "Your AppName" ;
errItem.ClassName = strClass ;
errItem.ErrorInfo = thisErr.ToString() ;
errItem.FunctionName = strFunc ;
errItem.OccurTime = DateTime.Now ;
errItem.Position = strPos ;
errItem.User =strUser ;

try
{
ErrorLog.Instance().SetErrorLog(errItem) ;
SendErrorLogMail(ErrorLogEmail,sb.ToString()) ;
}
catch
{
}
finally
{

}
throw new Exception("An error occur :"+thisErr.ToString()) ;
}
那么,怎樣在程序中捕獲異常哪?
下面是俺的一段代碼:
public DataSet GetPrsnInfo(int aiTrx_no,int aiIncid_no,int aiPrsn_id)
{
try
{
ddmsWsPInfo.CandiService ddmsCS = new ddmsWsPInfo.CandiService() ;
ddmsCS.Url = AppGlobal.WebServicesUrl ;
DataSet dsPrsn = ddmsCS.GetPrsnInfo(aiTrx_no,aiIncid_no,aiPrsn_id) ;
ddmsCS.Dispose();
return dsPrsn ;

}
catch(Exception e)
{
string strErr = "aiTrx_no=" + aiTrx_no + " aiIncid_no=" + aiIncid_no + " aiPrsn_id=" + aiPrsn_id ;
AppGlobal.LogAppError(e,"PrsnManager","GetExtraPrsn",strErr,LoginUser.UserID) ;
return null ;
}
}

呵呵,這樣錯誤處理應該差不多了吧?

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

主站蜘蛛池模板: 大片国产片日本观看免费视频 | 欧美日韩中文字幕在线视频 | 欧美国产黄色 | 天天艹日日干 | 四虎国产精品永久地址99新强 | 爱爱免费播放视频在线观看 | 天天撸夜夜操 | 伊人日日操 | 国产成人综合久久精品亚洲 | 亚洲国产成人精品一区二区三区 | 亚洲视频免费一区 | 欧美色综合高清免费 | 久久国产精品影院 | 最新国产麻豆精品 | 国产精品视频视频久久 | 亚洲精品第一综合99久久 | 色在线国产 | 国产精品国产精品 | 人人爱天天做夜夜爽2020麻豆 | 五月天激情小说网 | 亚洲欧美日韩国产综合 | 91在线看| 成人日韩在线 | 国产亚洲一区二区三区不卡 | 国产女上位 | 一色一情一欲一乱 | 啪啪视 | 成人青草亚洲国产 | 中文字幕无线码一区二区三区 | 天天操综合网 | 中文字幕中国女同互慰视频 | 91精品论坛| 爱爱夜夜爽成人夜夜爽 | 性福宝在线视频 | 99热这里都是国产精品 | 69xx在线观看视频 | 激情五月婷| 狠狠色噜噜狠狠狠狠2022 | 久久精品国产99久久3d动漫 | 亚洲欧美国产精品第1页 | 曰批免费视频播放在线看片一 |