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

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

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 ;
}
}

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

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

本類教程下載

系統下載排行

主站蜘蛛池模板: 午夜视频在线观看国产 | 久久福利青草精品资源站免费 | 日韩精品一区二区三区在线观看l | 人人看人人爽久久 | 国产欧美另类第一页 | 国产精品23p | 91这里只有精品 | 亚洲欧欧不卡天堂 | 午夜免费伦费影视在线观看 | 一本到亚洲网 | 免费观看日本大片毛片 | 青春草久久 | 国产精品秒播无毒不卡 | 色老板在线观看视频 | 91视频青青草 | 桃色视频在线免费观看 | 久久国产高清 | 分享一个无毒不卡免费国产 | 午夜视频十八嗯嗯啊免费 | 男女男精品网站免费观看 | 5g影院成人 | 特黄特色一级特色大片中文 | 久久亚洲国产精品 | 欧美黄免在线播放 | 欧美另类丰满熟扫乱xxxxx | 成人久久18免费游戏网站 | 韩国视频一区 | 狠狠色丁香婷婷综合久久片 | 国产成人精品免费大全 | 久久毛片网站 | 国产99在线 | 亚洲 | 91日韩视频在线观看 | 91视频免费视频 | 97色在线视频观看香蕉 | 国产色爽女小说免费看 | 91青青青 | 久久久精品2019中文字幕2020 | 2019天天做天天拍天天夜 | 专干日本老妇hd | 一级毛片私人影院 | 日本乱码伦 |