Saeed_m_Farid
پنج شنبه 11 خرداد 1391, 22:43 عصر
بنام خدا
سلام
تقدیم به ... :بامزه:
مقدمات:
این مطالب کلاً حوزه هایی رو پوشش میده در مورد: روند ثبت وقایع، خطاها، اطلاعات و کلاً تمام مواردی که جهت پیگیری فعالیت های پروژه یا پروژه ها و سیستم های وابسته یا مرتبط با اونها هست و منجر به درک و تشخیص مشکلات در بررسی های آتی میشوند؛ پس اگه فکر می کنید ربطی به کار شما نداره، همینجا بای بای، چون یه سری مزخرفات هم داخلشون هست که محتملاً وقت گرانبهای شما رو بیخودی تلف میکنه ...
اگه منصرف نشدین، اذعان میکنم که فردی سخت پی جو و باحوصله هستید، در ادامه خواهیم دید چقدر دوام می آوردید ...
خزعبلات:
* پیشنهاد میکنم اگه فقط جهت کسب اطلاعات فنی هستید و یا انسانی قانون مدار، منطقی، دارای پیشینه تشنج، دارای مشکل قلبی هستید بیخیال این قسمت شده و Skip and goto : اصل قضیات (از ما گفتن بود)...
==============
قبلش بگم که اسمش رو گذاشتم آموزش که مردم جمع بشن و ببینن چه خبره! ولی بیشتر برای اینه که نقاط ضعف کلاسی که نوشتم رو بشناسم و همیشه برای من اینطوری بوده که وقتی در مورد یه چیزی به کسی اطلاعات دادم، بیشتر خودم یاد گرفتم تا طرف! و هروقت این سنت حسن-ه:لبخند: رو کنار گذاشتم، بیسوادیم سیلی ای بس محکم بر گونه هایم نواخته است؛ از طرف دیگه میخوام لینک این تاپیک رو یه جای دیگه بدم تا اون هم خیلی طولانی نشه و یکی هم خدای نکرده حوصله کرد بازش کرد با دیدنش فرار نکنه ...
خوب، قضیه اینه که من مدتها با زبانهای native و managed مجزا، برنامه هایی نوشته بودم که مجبور بودن با هم ارتباط داشته باشن، نه سرور-کلاینت بلکه مثل شبکه بهم وصل میشدن و برای مقاصدی با هم گفتگو میکردن و خودم هم یکی از اون برنامه ها شده بودم و اصولاً تعامل با آدمیزادها به ورطهء فراموشی سپرده شده بود، قابل ذکر هست که تو خود هر node هم بازم تو چندین سطح همین داستان بود! بگذریم، میخوام بگم کاملاً میدونم که گزارش خطا، اطلاعات هر برنامه و نخهای مجزایی که توش کار میکنن، مشکلات ارتباطی، سخت افزار و خلاصه هزاران مورد مرتبط با سیستم تشخیص و ردیابی اطلاعاتی برای پروژه های بزرگ حیاتی هستن؛ بنابراین در چنین سیستم هایی Logging نقش حیاتی داره و کوچکترین موارد اطلاعاتی در پروژه های بزرگ (با قید صحیح زمان وقوع، درجه اهمیت، نوع log، کلاس، تابع و ...) میتونه کسی رو که رفته سر چوبه دار، نجات بده یا محکوم کنه و باگ های سیستم مشخص بشه و ...
همونطورکه گفته شد، روند ثبت وقایع و خطاها برای درک فعالیت های سیستم های پیچیده، به ویژه در مورد برنامه های کاربردی گسترده که یا با کاربران تعامل ندارن یا ارتباط بسیار کمی با کاربر دارن و معمولاً واشون میکنن به امان خدا و ماه به ماه سر نمیزنن مگه اینکه یه خامی سر سیستم ریخته بشه؛ شاید به اندازه هدف اصلی برنامه ضروری باشه.
راستش من اصلاً دات نتی نبودم و دقیقاً مثل پیرمردها که میگن شما چه میدونین زمان ما نون از زیر کوه قاف که اژدها ازش محافظت میکرد، در میومد! منم همچین دیدی داشتم و هروقت دات نت میشنیدم یاد شومپت میافتادم!(فحش نیست (http://www.sibpress.com/home/2674.html?comment_id=1)!) فقط از وب سرویس هاش (SOAP) استفاده مرده بودم، بعداً که یواش یواش جوانی از کف رفت و قدر ندانستیم و علم هم مانند الاغ رم کرده زنجیر برید و اصلاً نام پروتکل ها هم چه مخابراتی، چه شبکه و ... نامونسمان شد، تف کردهء مان را لیس زده و به جمع دوستان دهه هفتاد، هشتادی پیوستیم! ولی در این وادی هم کم کم متوجه شدم که اونطوری که فکر میکردم هم نیست و هرنوع تعصب احمقانه ای اشتباه اِ .
برگردیم سر logging؛ درسته من اولها با ™log4net (http://logging.apache.org/log4net/) (+ (http://logging.apache.org/log4net/release/manual/configuration.html)) و ™ (http://logging.apache.org/log4net/release/manual/configuration.html)Log4j (http://logging.apache.org/log4j/1.2/) استفاده کرده بودم، و فکر میکردم آخر قابلیت ها تو اونهاست ولی با دیدن کلاس TraceSource (http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx) از System.Diagnostics (http://msdn.microsoft.com/en-us/library/system.diagnostics.aspx) بازم دچار کف کردگی شدم و امکانات زیاد و راحتی استفاده اش (قدرت اصلی MS ای ها!) غافلگیرم کرد؛ واقعاً همه چی رو مثل آب خوردن کرده درحالیکه امکاناتی که داره فوق العاده زیاد هستن و معمولاً جمع ایندو در یکجا کاری بسیار مشکل هست، بهرصورت فکر کنم خزعبلات کافیه و بریم سر اصل قضیه ...
=============
اصل قضیات:
قابلیت هایی که این Framework داره خیلی زیادن و من سعی کنم در قالب یه Q&A اونها رو معرفی کنم :
سوال: میشه یه معرفی ابتدایی از System.Diagnostics.TraceSource بکنید؟
جواب: چرا نمیشه عزیزم؟ این فریم ورک یک سیستم بسیار قدرتمند، انعطاف پذیر، باثبات و با کارایی بالا جهت روند ثبت وقایع، خطاها، اطلاعات و کلاً تمام مواردی که برای پیگیری زیر به زیر فعالیت های پروژه ها و برنامه های کاربردی لازمه رو فراهم می کنه، دلیل اینهمه اغراق رو هم به زودی میگم!
سوال: آره راست میگی مهندز! بنظر من هم اغراق میاد تعاریف بالا؛ من که به کلاس نگاه میکنم چیز خاصی نمیبینم، حتا درحد یه ساب کلاس ™log4net (http://logging.apache.org/log4net/) هم نیست، تازه اون مال آپاچی هست و هزار تا امکانات و ...
جواب: اولاً مهندز خودتون هستید، درثانی فلفل نبین چه ریزه، بلکه خوب داکیومنت نشده! از MS بعیده (چون فکر کنم بیشتر از 73.265% همه قدرت و محبوبیت اِش بابت همین MSDN اَش هست!)؛ بگذریم، بیشتر دِوِلوپِر (توسعه دهنده ها) و بهمین علت از قابلیت ها و امکانات سهل الوصولش آگاهی ندارن و استفاده نمی کنن ولی خوان نعمتی که گسترده شده، ما پیر پاتال ها که نونمون از زیر سنگ در میومد، قدرش رو میدونیم (خوب بینیم بابا تو هم!)
سوال: از شما میخوام این امکانات رو برای ما بشمارین بیزحمت، ممنون از لطفتون
جواب: خواهش می کنم، اصلاً واسه همین این تاپیک رو زدم. ولی از فردا 4 روز تعطیله و همسر من هم منتظر هست بریم مسافرت؛ الان ساعت 21:33:33.235 هست و من نشستم آسمون ریسمون میبافم، اونم با لنگه کفش منتظره؛ فعلاً علی الحساب دو تا کلاس (منظور فایل حاوی class نه کلاس درسی یا کلاس باکلاسی!) با کمی تعییرات -که نام شرکت و پروژه هام و ... لو نرن!- میذارم که یکی مربوط میشه به همین TraceSource و اونیکی هم اشانتیون واسه اینکه اونقدر حوصله داشتی تا اینجا چرندیات پلاس پرندیات منو تحمل کردی؛ اونیکی هم یه کلاس کامل برای نگهداری Configuration Settings از نوع XML هست که تمام پروژه ها میتونن بصورت share ازش استفاده کنن و ...
جواب که سوال کننده میده: دیدی باید زد تو سرت! یه بار مثل آدم و با احترام سوال پرسیدم! خِرِفت :افسرده: واقعاً خوددرگیری داری تو نه؟
جواب جواب کننده به سوال کننده که خودسر حواب داده: تو اگه یه دونه خط بدون کامنت یا تست نشده پیدا کردی تو کلاس هام، 10 تا تشکر میکنم ازت! آدم حسابی هم کذی به این استانداردی دارم واست میدارم هم حرف میشنوم! نمیگم باگ نداره یا بهیچ وجه کد بهینه نمیشه ولی از خیلی کدهای دیگه که دیدم کاملتر و جامع تر و تست شده تر هست، عجب ها ...
در پایان قبل از شروع، شما هم اگه سوال یا نظری در مورد کلاس ها و ایده ها و .. داشتید بیزحمت دریع نکنین، ایمیل هم نکنین بذارین همینجا که تا می تونه شلوع بشه و بهم بریزه، یکمی حال کنیم ...
سلام
تقدیم به ... :بامزه:
مقدمات:
این مطالب کلاً حوزه هایی رو پوشش میده در مورد: روند ثبت وقایع، خطاها، اطلاعات و کلاً تمام مواردی که جهت پیگیری فعالیت های پروژه یا پروژه ها و سیستم های وابسته یا مرتبط با اونها هست و منجر به درک و تشخیص مشکلات در بررسی های آتی میشوند؛ پس اگه فکر می کنید ربطی به کار شما نداره، همینجا بای بای، چون یه سری مزخرفات هم داخلشون هست که محتملاً وقت گرانبهای شما رو بیخودی تلف میکنه ...
اگه منصرف نشدین، اذعان میکنم که فردی سخت پی جو و باحوصله هستید، در ادامه خواهیم دید چقدر دوام می آوردید ...
خزعبلات:
* پیشنهاد میکنم اگه فقط جهت کسب اطلاعات فنی هستید و یا انسانی قانون مدار، منطقی، دارای پیشینه تشنج، دارای مشکل قلبی هستید بیخیال این قسمت شده و Skip and goto : اصل قضیات (از ما گفتن بود)...
==============
قبلش بگم که اسمش رو گذاشتم آموزش که مردم جمع بشن و ببینن چه خبره! ولی بیشتر برای اینه که نقاط ضعف کلاسی که نوشتم رو بشناسم و همیشه برای من اینطوری بوده که وقتی در مورد یه چیزی به کسی اطلاعات دادم، بیشتر خودم یاد گرفتم تا طرف! و هروقت این سنت حسن-ه:لبخند: رو کنار گذاشتم، بیسوادیم سیلی ای بس محکم بر گونه هایم نواخته است؛ از طرف دیگه میخوام لینک این تاپیک رو یه جای دیگه بدم تا اون هم خیلی طولانی نشه و یکی هم خدای نکرده حوصله کرد بازش کرد با دیدنش فرار نکنه ...
خوب، قضیه اینه که من مدتها با زبانهای native و managed مجزا، برنامه هایی نوشته بودم که مجبور بودن با هم ارتباط داشته باشن، نه سرور-کلاینت بلکه مثل شبکه بهم وصل میشدن و برای مقاصدی با هم گفتگو میکردن و خودم هم یکی از اون برنامه ها شده بودم و اصولاً تعامل با آدمیزادها به ورطهء فراموشی سپرده شده بود، قابل ذکر هست که تو خود هر node هم بازم تو چندین سطح همین داستان بود! بگذریم، میخوام بگم کاملاً میدونم که گزارش خطا، اطلاعات هر برنامه و نخهای مجزایی که توش کار میکنن، مشکلات ارتباطی، سخت افزار و خلاصه هزاران مورد مرتبط با سیستم تشخیص و ردیابی اطلاعاتی برای پروژه های بزرگ حیاتی هستن؛ بنابراین در چنین سیستم هایی Logging نقش حیاتی داره و کوچکترین موارد اطلاعاتی در پروژه های بزرگ (با قید صحیح زمان وقوع، درجه اهمیت، نوع log، کلاس، تابع و ...) میتونه کسی رو که رفته سر چوبه دار، نجات بده یا محکوم کنه و باگ های سیستم مشخص بشه و ...
همونطورکه گفته شد، روند ثبت وقایع و خطاها برای درک فعالیت های سیستم های پیچیده، به ویژه در مورد برنامه های کاربردی گسترده که یا با کاربران تعامل ندارن یا ارتباط بسیار کمی با کاربر دارن و معمولاً واشون میکنن به امان خدا و ماه به ماه سر نمیزنن مگه اینکه یه خامی سر سیستم ریخته بشه؛ شاید به اندازه هدف اصلی برنامه ضروری باشه.
راستش من اصلاً دات نتی نبودم و دقیقاً مثل پیرمردها که میگن شما چه میدونین زمان ما نون از زیر کوه قاف که اژدها ازش محافظت میکرد، در میومد! منم همچین دیدی داشتم و هروقت دات نت میشنیدم یاد شومپت میافتادم!(فحش نیست (http://www.sibpress.com/home/2674.html?comment_id=1)!) فقط از وب سرویس هاش (SOAP) استفاده مرده بودم، بعداً که یواش یواش جوانی از کف رفت و قدر ندانستیم و علم هم مانند الاغ رم کرده زنجیر برید و اصلاً نام پروتکل ها هم چه مخابراتی، چه شبکه و ... نامونسمان شد، تف کردهء مان را لیس زده و به جمع دوستان دهه هفتاد، هشتادی پیوستیم! ولی در این وادی هم کم کم متوجه شدم که اونطوری که فکر میکردم هم نیست و هرنوع تعصب احمقانه ای اشتباه اِ .
برگردیم سر logging؛ درسته من اولها با ™log4net (http://logging.apache.org/log4net/) (+ (http://logging.apache.org/log4net/release/manual/configuration.html)) و ™ (http://logging.apache.org/log4net/release/manual/configuration.html)Log4j (http://logging.apache.org/log4j/1.2/) استفاده کرده بودم، و فکر میکردم آخر قابلیت ها تو اونهاست ولی با دیدن کلاس TraceSource (http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx) از System.Diagnostics (http://msdn.microsoft.com/en-us/library/system.diagnostics.aspx) بازم دچار کف کردگی شدم و امکانات زیاد و راحتی استفاده اش (قدرت اصلی MS ای ها!) غافلگیرم کرد؛ واقعاً همه چی رو مثل آب خوردن کرده درحالیکه امکاناتی که داره فوق العاده زیاد هستن و معمولاً جمع ایندو در یکجا کاری بسیار مشکل هست، بهرصورت فکر کنم خزعبلات کافیه و بریم سر اصل قضیه ...
=============
اصل قضیات:
قابلیت هایی که این Framework داره خیلی زیادن و من سعی کنم در قالب یه Q&A اونها رو معرفی کنم :
سوال: میشه یه معرفی ابتدایی از System.Diagnostics.TraceSource بکنید؟
جواب: چرا نمیشه عزیزم؟ این فریم ورک یک سیستم بسیار قدرتمند، انعطاف پذیر، باثبات و با کارایی بالا جهت روند ثبت وقایع، خطاها، اطلاعات و کلاً تمام مواردی که برای پیگیری زیر به زیر فعالیت های پروژه ها و برنامه های کاربردی لازمه رو فراهم می کنه، دلیل اینهمه اغراق رو هم به زودی میگم!
سوال: آره راست میگی مهندز! بنظر من هم اغراق میاد تعاریف بالا؛ من که به کلاس نگاه میکنم چیز خاصی نمیبینم، حتا درحد یه ساب کلاس ™log4net (http://logging.apache.org/log4net/) هم نیست، تازه اون مال آپاچی هست و هزار تا امکانات و ...
جواب: اولاً مهندز خودتون هستید، درثانی فلفل نبین چه ریزه، بلکه خوب داکیومنت نشده! از MS بعیده (چون فکر کنم بیشتر از 73.265% همه قدرت و محبوبیت اِش بابت همین MSDN اَش هست!)؛ بگذریم، بیشتر دِوِلوپِر (توسعه دهنده ها) و بهمین علت از قابلیت ها و امکانات سهل الوصولش آگاهی ندارن و استفاده نمی کنن ولی خوان نعمتی که گسترده شده، ما پیر پاتال ها که نونمون از زیر سنگ در میومد، قدرش رو میدونیم (خوب بینیم بابا تو هم!)
سوال: از شما میخوام این امکانات رو برای ما بشمارین بیزحمت، ممنون از لطفتون
جواب: خواهش می کنم، اصلاً واسه همین این تاپیک رو زدم. ولی از فردا 4 روز تعطیله و همسر من هم منتظر هست بریم مسافرت؛ الان ساعت 21:33:33.235 هست و من نشستم آسمون ریسمون میبافم، اونم با لنگه کفش منتظره؛ فعلاً علی الحساب دو تا کلاس (منظور فایل حاوی class نه کلاس درسی یا کلاس باکلاسی!) با کمی تعییرات -که نام شرکت و پروژه هام و ... لو نرن!- میذارم که یکی مربوط میشه به همین TraceSource و اونیکی هم اشانتیون واسه اینکه اونقدر حوصله داشتی تا اینجا چرندیات پلاس پرندیات منو تحمل کردی؛ اونیکی هم یه کلاس کامل برای نگهداری Configuration Settings از نوع XML هست که تمام پروژه ها میتونن بصورت share ازش استفاده کنن و ...
جواب که سوال کننده میده: دیدی باید زد تو سرت! یه بار مثل آدم و با احترام سوال پرسیدم! خِرِفت :افسرده: واقعاً خوددرگیری داری تو نه؟
جواب جواب کننده به سوال کننده که خودسر حواب داده: تو اگه یه دونه خط بدون کامنت یا تست نشده پیدا کردی تو کلاس هام، 10 تا تشکر میکنم ازت! آدم حسابی هم کذی به این استانداردی دارم واست میدارم هم حرف میشنوم! نمیگم باگ نداره یا بهیچ وجه کد بهینه نمیشه ولی از خیلی کدهای دیگه که دیدم کاملتر و جامع تر و تست شده تر هست، عجب ها ...
در پایان قبل از شروع، شما هم اگه سوال یا نظری در مورد کلاس ها و ایده ها و .. داشتید بیزحمت دریع نکنین، ایمیل هم نکنین بذارین همینجا که تا می تونه شلوع بشه و بهم بریزه، یکمی حال کنیم ...