วันพุธที่ 18 มิถุนายน พ.ศ. 2557

การ Read Log ชาวบ้าน มายำ

จริงๆอันนี้จะ Note ไว้ อ่านไม่ได้ใจความยังไง หลังไมค์ได้ครับ

โจทย์คือ มี Server Run App ขั้นเทพอยู่อันนึง(App ราคาหลายแสน) แต่ฟีเจอร์นึงไม่มีคือเมื่อมีการ Login แล้วไม่ส่งเมลแจ้งคน Login ประมาณว่า App นี้ถ้าคนอื่น Login ใช้งานแล้วซวยครับ ก็เลยเป็นที่มา มาดูกัน

ไล่เรียงก่อนนะ
1. mount log file มาให้ tomcat read/write ได้
2. เขียน App เป็น Web App นะ ส่งเมลง่ายกว่า Run on Server Application Online และปู้ยี่ปู้ยำได้ง่าย(เผื่อเอาไปทำอย่างอื่นต่อ)
3. สร้างไฟล์ Listener ขึ้นมา สร้าง Class นั่นแหละ แล้ว implements ServletContextListener เข้าไป เดียวมันให้ Method มาสองอัน
4. ไปสร้าง Listener ที่ WEB-INF/web.xml แล้วใส่นี่เข้าไป เป็น Class ที่เราสร้างมาในข้อ3.

    packagename.ClassName

5. Listener คืออะไร คิดว่ามันเป็นคอนเทนเนอร์ละกัน ยัดๆอะไรใส่ๆเข้าไปแล้วก็ปิดไว้ ทำงานตอน Start App และ Stop App (Initrial and Detroy)
6. Codding ละนะ สร้าง Class ขึ้นมาทำ Thread  ให้มัน Run ตลอด (ทำงานกับ Log ต้องอ่านตลอด)
7. Concept ไม่อธิบายโค้ดนะ เอา Concept ไปเขียนเอาเอง
    7.1  ไปอ่าน Log มาเขียน Log ใหม่ใน Server เรา(ให้เป็น Local Log File จะจัดการง่ายกว่าอยู่ Server ชาวบ้าน) และ write แบบต่อไฟล์ rewrite ตลอด
    7.2  สมมุติตั้งชือ log file ที่นำมาเขียนใหม่ว่า info.log ก็เขียนโค้ดอ่านมันเลย ใช้ BufferedReader ในการวนอ่าน วนอยู่นั่นแหละ แต่เราดัก null ไว้ ความหมายคือ อ่านค้างไว้ จนถึงบรรทัดสุดท้าย หากตัวอ่าน log ในข้อ 7.1 ได้ข้อมูลมาใหม่ก็จะ write ลงไฟล์ ที่ดัก null ก็เพื่อการนี้แหละ ถ้า 7.1 ไม่ได้อะไรใหม่มาเขียนพอเราวนมามันก็จะเป็น null แต่ตอนวนอย่าลืม  sleep มันด้วยนะ
8. เอาข้อมูลใน 7.2 มาปู้ยี่ปู้ยำได้เลย และอย่าลืมทำตัว clear log หรือ backup log ฝั่งเราด้วย

Ploblem

  • log ชาวบ้านถ้าเขา write เป็น Stream ไว้ อย่าเขียนคำสั่งไป edit มันจะเป็นตัวขอม
  • permission ของไฟล์สำคัญ ต้องเปิดให้กันอ่านหรือเขียนได้ด้วย
  • อย่าลืมดักในการสร้างไฟล์ใหม่ ถ้าไฟล์ไม่มีให้สร้างเสมอ
  • Thread ถ้า error หรือ interrupt ให้เขียนคำสั่งรองรับด้วยเช่น ให้  Run อีกรอบ หรือไปลบ Process อะไรก็ว่าไป ถ้ามันตายมันไม่ฟื้นนะจะบอกให้

ไม่มีความคิดเห็น: