日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(求助)即时发送异常给开发人员

發(fā)布時(shí)間:2024/6/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (求助)即时发送异常给开发人员 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在項(xiàng)目完成初期,用戶使用不可避免的會(huì)發(fā)生錯(cuò)誤或者異常,
如何使開(kāi)發(fā)人員更及時(shí)更準(zhǔn)確地獲得用戶使用的情況,
會(huì)對(duì)項(xiàng)目質(zhì)量,進(jìn)度,客戶滿意程度產(chǎn)生不小的影響。

所以,我想實(shí)現(xiàn)這樣一個(gè)功能,當(dāng)程序執(zhí)行中,捕獲異常,
將異常信息和發(fā)生異常的位置,通過(guò)Email即時(shí)發(fā)送給開(kāi)發(fā)人員。
目前實(shí)現(xiàn)了基本的功能,但是,存在一點(diǎn)問(wèn)題,用戶使用中,
沒(méi)有理由把發(fā)送email的時(shí)間也由用戶來(lái)負(fù)擔(dān)。
那么通過(guò)哪種處理方式可以更合理呢?

下面是現(xiàn)在完成的部分,只有記錄日志和發(fā)送郵件的部分..(發(fā)送郵件只做完了不需要驗(yàn)證的smtp部分.).

1.記錄日志?? 如果發(fā)送郵件失敗,記錄未發(fā)送的異常信息.

?1
?2/**////?<summary>
?3///?Record?info?to?path
?4///?</summary>

?5internal?class?LogWriter
?6{
?7????structure#region?structure
?8????private?LogWriter(string?path)
?9????{
10????????m_path?=?path;
11????}

12
13????static?public?LogWriter?m_Writer?=?null;
14????static?public?LogWriter?CreateInstance(string?path)
15????{
16????????if?(m_Writer?==?null)
17????????{
18????????????m_Writer?=?new?LogWriter(path);
19????????}

20????????return?m_Writer;
21????}

22????#endregion

23
24????private?string?m_path?=?"";
25
26????/**////?<summary>
27????///?Record?normal?info
28????///?</summary>
29????///?<param?name="message"></param>

30????internal?void?WriteInfo(string?message)
31????{
32????????StreamWriter?msgWriter?=?new?StreamWriter(m_path,?true,?System.Text.Encoding.Default);
33
34????????msgWriter.WriteLine(DateTime.Now?+?":"?+?message?+?"\r\n");
35
36????????msgWriter.Flush();
37????????msgWriter.Close();
38????????msgWriter.Dispose();
39????}

40????
41????/**////?<summary>
42????///?Record?exception?info?
43????///?</summary>
44????///?<param?name="ex"></param>

45????internal?void?WriteInfo(Exception?ex)
46????{
47????????string?eString?=?ex.ToString();
48????????WriteInfo(eString);
49????}

50????
51????/**////?<summary>
52????///?Validate?the?filePath?available..
53????///?</summary>
54????///?<param?name="path"></param>

55????internal?void?ValidatePath(string?path)
56????{
57????????if?(!File.Exists(path))
58????????{
59????????????FileStream?fs?=?new?FileStream(path,?FileMode.Create,?FileAccess.ReadWrite,?FileShare.ReadWrite);
60
61????????????fs.Flush();
62????????????fs.Close();
63????????????fs.Dispose();
64????????}

65????}

66}

67


2.通過(guò)email發(fā)送異常信息.先檢查記錄位置是否有未發(fā)送信息,如果有,發(fā)送.

??1
??2/**////?<summary>
??3///?Class?for?email?Exception?info?to?developer..
??4///?</summary>

??5public?class?ExceptionMail
??6{
??7????structure#region?structure
??8????private?ExceptionMail(){}
??9?
?10????static?public?ExceptionMail?CreateInstance()
?11????{
?12????????return?new?ExceptionMail();
?13????}

?14???#endregion

?15
?16????//?Get?file?path?from?configuration
?17????static?readonly?private?string?logPath?=?ConfigurationManager.AppSettings["logPath"];
?18
?19????//?SmtpClient?object?to?send?email
?20????private?SmtpClient?mailSender?=?new?SmtpClient("smtp.?????.com",?25);
?21????
?22????/**////?<summary>
?23????///?Send?message?by?email
?24????///?</summary>
?25????///?<param?name="subject">subject?of?email</param>
?26????///?<param?name="message">content?of?email</param>
?27????///?<returns></returns>

?28????public?bool?SendMail(string?subject,?string?message)
?29????{
?30????????SendUnsettled();
?31
?32????????AuthorizeSmtp(mailSender);
?33
?34????????try
?35????????{
?36????????????mailSender.Send("XXXXX@XXXXX.com",?"XXXXX@XXXXX.com",?subject?+?DateTime.Now.ToString(),?message);
?37
?38????????????return?true;
?39????????}

?40????????catch
?41????????{
?42????????????LogWriter.CreateInstance(logPath).WriteInfo(message);
?43
?44????????????return?false;
?45????????}

?46????}

?47????
?48????/**////?<summary>
?49????///?Send?exception?by?email?
?50????///?</summary>
?51????///?<param?name="exception">Exception?that?would?be?sent</param>
?52????///?<returns></returns>

?53????public?bool?SendException(Exception?exception)
?54????{
?55????????SendUnsettled();
?56
?57????????AuthorizeSmtp(mailSender);
?58
?59????string?errorInfo?=?"Message:"?+?exception.Message?+?"\r\n"?+?"Detail:"?+?exception.ToString();
?60
?61????????try
?62????????{????????????
?63????????????mailSender.Send("XXXXX@XXXXX.com",?"XXXXX@XXXXX.com",?"Exception:"?+?DateTime.Now.ToString(),
?64
?65????????????????errorInfo);
?66
?67????????????return?true;
?68????????}

?69????????catch
?70????????{
?71????????????LogWriter.CreateInstance(logPath).WriteInfo(errorInfo);????????????
?72????????????return?false;
?73????????}

?74????}

?75????
?76????/**////?<summary>
?77????///?Add?credential?to?make?sender?authorized??
?78????///?</summary>
?79????///?<param?name="smtp">sender</param>

?80????private?void?AuthorizeSmtp(SmtpClient?smtp)
?81????{
?82????????smtp.Credentials?=?new?NetworkCredential("?????",?"?????");
?83
?84????????smtp.UseDefaultCredentials?=?true;
?85
?86????????smtp.Timeout?=?10000;
?87
?88????????smtp.DeliveryMethod?=?SmtpDeliveryMethod.Network;
?89????}

?90????
?91????/**////?<summary>
?92????///?Deal?with?message?unsettled?
?93????///?</summary>

?94????private?void?SendUnsettled()
?95????{
?96????????if?(File.Exists(logPath))
?97????????{
?98????????????StreamReader?logReader?=?new?StreamReader(logPath,?System.Text.Encoding.Default);
?99
100????????????string?message?=?"";
101
102????????????if?(logReader.Peek()?>=?0)
103????????????{
104????????????????message?+=?logReader.ReadLine()?+?"\r\n";
105????????????}

106
107????????????SendMail("Unsettled?Log",?message);
108
109????????????logReader.Close();
110????????????logReader.Dispose();
111????????????logReader?=?null;
112????????????File.Delete(logPath);
113????????}

114????}

115}
??
116
3.暫存未發(fā)送emal的日志文件保存路徑,在config文件里加入一個(gè)logPath配置項(xiàng)保存.

仔細(xì)想了想,可以把發(fā)送異常的方法作為獨(dú)立的進(jìn)程運(yùn)行,這樣就不會(huì)在發(fā)生異常

的時(shí)候阻塞下面的操作.

轉(zhuǎn)載于:https://www.cnblogs.com/snowlove67/archive/2006/02/09/327523.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的(求助)即时发送异常给开发人员的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。