Custom Search
by  chalitbur   04 Nov 2014

หลายคนที่พัฒนา website / web application ด้วย ASP.NET / C# อาจจะเจอปัญหาเหมือนผมในเรื่อง loging วันนี้ผมมี Component ที่ชื่อ log4net มาแนะนำให้ทุกคนได้ลองใช้กันนะครับ

ปัญหาที่เจอคืออะไร ?

ในการ debug ระหว่างพัฒนา มักจะใช้วีธี Response.Write ค่าต่างๆออกมาดู พอนำ Code ขึ้น Production ก็มักจะมีปัญหาต้องมานั่น comment กันให้วุ่นวาย

ใน Try Catch Block มักจะแสดง Exception โดยวิธี Response.Write เมื่อนำขึ้น Production ก็ไม่ได้ comment ออก เพราะ ไม่ได้เกิด Exception ในกรณีปกติ เมื่อเกิด Exception ขึ้น ก็จะต้องรีบมา comment ด้วยเหตุผลด้านความปลอดภัย(เช่น ใน Exception อาจจะมีชื่อ Table หรือ Column ของ Database อาจจะเสี่ยงต่อการถูกโจมตีด้วย SQL Injection ได้) พอ comment Response.Write วันหลังเกิด Exception อีกคราวนี้ก็ไม่รู้แล้วว่ามี Exception เกิดขึ้น วนเวียนอยู่อย่างนี้

การตัดสินใจเขียน Loging System ดูจะเป็นทางออกที่ดี เนื่องจากเราเขียนเอง ไม่ต้องซับซ้อนมาก ปรากฏว่ามีปัญหาเรื่อง Thread Safe พอสมควร (ตอนแรกใช้วิธีการ Locking / Mutex อย่างเดียว ตอนหลังเท่าที่ค้นหาในเน็ตดู ได้ข้อมูลว่าต้องใช้ System.IO.TextWriter.Synchronized ร่วมด้วย)

ข้อดีของ log4net คืออะไร ?
       •ความจริงถ้าใครเคยทำ Java มา น่าจะเคยใช้หรืออย่างน้อยก็น่าจะได้เคยเห็น Apache log4j มาบ้างนะครับ ซึ่งจริงๆ log4net ก็มีพื้นฐานมาจาก log4j นั่นเอง (ก็ C# กับ java มันคล้ายกันจริงๆ ฮ่าๆ ) log4net ก็เป็นส่วนหนึ่งของ Apache Loging Services Project ดังนั้นเรื่อง Licences หรือ Open Source นั้นหายห่วงแน่นอนครับ
      พูดถึงเรื่อง Open Source ก็ขอนอกเรื่องสักนิดนะครับ เคยมีคนบอกว่า ที่วงการ Software Devloper บ้านเราไม่พัฒนาเพราะมัวแต่หวง Source Code กัน แล้วก็มีคนมาตอบว่าไม่จริงหรอกครับ Linux open source มาเป็นสิบปีแล้ว มีซักกี่คนที่เปิด Source ของ linux ดูมั่ง(ฮาอีกแล้ว) แต่สำหรับผมนะ ผมชอบอะไรที่ Open Source มากเลย ผมจะพยามเข้าไปดู Code ว่ามันทำงานยังไง ที่สำคัญเวลามีปัญหานี่เรายังพอมีทางออกอยู่บ้าง ไม่ใช่มืดแปดด้านเพราะเราไม่รู้อะไรเลย สรุป ยังไงถ้ามีเวลาก็ลองเข้าไปอ่านดูบ้างนะครับ มีประโยชน์กับงานของเราๆท่านๆมากเลย
       • แก้ปัญหาเรื่องของ Thread Safe ได้
       • เรื่องของความเร็ว อันนี้เป็นเรื่องสำคัญสำหรับ Web site ที่เน้นความรวดเร็วเป็นสำคัญ ซึ่ง log4net ก็เน้น Performance มาก่อน Flexible
       • แก้ไข Config แบบ On The Fly ได้เลย แก้ไขแล้วมีผลทันที (ขึ้นอยู่กับ Config ของเราว่าเราต้องการแบบไหน ) รวมถึงแก้ Config แล้วไม่ส่งผลให้ Session หลุด (ไม่ต้อง Restart WebApp)
       •มี Appender (ง่ายๆ ก็คือ output) ให้เราเลือก Config ได้มากมาย เช่น Console , File ,Database,Memory ฯลฯ แถม Appender ที่เป็น Database ก็ support ผ่าน ADO Object ดังนั้นสบายใจหายห่วงได้ กับ DB ทั่วๆไปอยู่แล้ว
       •สามารถ Remote ไป Log ที่ log4net Server ได้ด้วยในกรณีที่ Policy กำหนดให้ห้าม write log ในเครื่องที่โปรแกรม run อยู่ / Log ผ่าน email ก็ได้ด้วยนะครับ
       •ทำ Rotate Log File ได้ / กำหนด Format Output ได้ / Set Level Output ได้ เช่น DEBUG Mode , Error Mode รายละเอียดจะกล่าวถึงตอนหลังนะครับ
เริ่มต้นใช้งาน
       •ก่อนอื่นเรา download log4net หลังจากที่ได้ไฟล์ zip แล้ว ให้ทำการแตกไฟล์ออกให้เราไปยัง directory [bin/net/version xx/release] จากนั้นก็นำ log4net.dll ไปวางไว้ใน /bin ใน project ของเรา
       •สร้างไฟล์ config ซึ่งในที่นี้ ผมใช้ชื่อ log4net.xml วางใว้ใน root ของ project ซึ่งไฟล์ config มีหน้าตาประมาณนี้ (รายละเอียดของแต่ละ config สามารถดูได้ในส่วน manual ใน Log4net Home นะครับ)
      

       •จากนั้นก็เขียน code เพิ่มใน Global.asax method Application_Start นะครับ โดยเลือกว่าจะโหลดจาก physical path หรือ URL (ส่วนสีเหลืองกับแดง)
      
        //Load Physical Path
        log4net.Config.DOMConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"[your physical path]\log4net.xml"));
        log4net.ILog WebLog = log4net.LogManager.GetLogger("RollingFile");

        //Load from URL
        //WebRequest myWebRequest = WebRequest.Create("");
        //WebResponse myWebResponse = myWebRequest.GetResponse();
        //log4net.Config.DOMConfigurator.Configure(myWebResponse.GetResponseStream());

        
       •เวลาใช้ก็เรียกใช้ ก็ประกาศตัวแปร static readonly ILog WebLog = LogManager.GetLogger("RollingFile");        จากก็เรียกใช้ WebLog.Debug("your message"); หรือ WebLog.Error("your error",ex); แล้วแต่ความหมายของการ Log นะครับ
       •เราสามารถเปลี่ยนแปลงค่า Config ใน log4net.xml โดยที่ Web Application ของเราจะไม่ restart นะครับ
อ่านเพิ่มเติมได้ที่ Log4Net Project Home
                      http://www.codeproject.com/KB/dotnet/ConfigureLog4Net.aspx

หวังว่าทุกคนจะได้ประโยชน์จาก ระบบ Log มาตรฐานระดับโลกตัวนี้นะครับ โชคดีทุกคนครับ
 
Post Your Comment
Please Login
Android Developer - ติดตั้ง Android Studio ใน Windows
by  chalitbur   02 Feb 2015
 android studio  ติดตั้ง  setup 

ก่อนที่เราจะเริ่มเขียนโปรแกรมบน Android สิ่งแรกที่ต้องทำก็คือการติดตั้ง IDE ซึ่งในอดีตเราจะต้องทำการเขียนโปรแกรมผ่าน Eclipse IDE ซึ่งจะ Download มาพร้อมกับ ADT แต่ปัจจุบัน Google ได้พัฒนา IDE Tools ตัวใหม่สำหรับให้นักพัฒนาได้ Download กับไปใช้สำหรับพัฒนาโปรแกรมชื่อ Android Studio วันนี้เราลองมาเริ่มติตตั้งเพื่อเตรียมความพร้อมสำหรับการสร้างสรรค์โปรแกรมในโลกของ Android กัน

ทำความรู้จักกับ Microsoft .NET Native
by  chalitbur   21 Nov 2014
 .NET  .NET Native 

.NET Native คือเทคโนโลยีในการ precompilation สำหรับสร้างและนำ application ส่งขึ้นไปยัง Windows Store. โดยจะเป็นการคอมไพล์โค๊ดที่เขียนด้วย Managed Code ( C# ) และทำการคอมไพล์เป็น Code แบบ Native (ภาษาเครื่อง) โดยปกติแล้ว application ที่เราเขียนด้วย .NET Framework จะถูกคอมไพล์เป็น Intermediate Language ( IL ) ขณะที่โปรแกรมเริ่มทำงาน Just-In-Time (JIT) Compiler จะแปลง IL ไปเป็น Native Code.   ซึ่่ง.NET Native ตัวนี้จะแปลง Windows Store application ที่เรา ทำขึ้นไปเป็น Native Code เลยทันที นั่นหมายความว่า