กฎและคำแนะนำสำหรับการเข้าสู่ระบบ?


13

ในองค์กรของฉันเราได้รวบรวมกฎ / guildelines เกี่ยวกับการบันทึกที่ฉันต้องการทราบว่าคุณสามารถเพิ่มหรือแสดงความคิดเห็นได้หรือไม่

เราใช้ Java แต่คุณสามารถแสดงความคิดเห็นโดยทั่วไปเกี่ยวกับ loggin - กฎและคำแนะนำ

  1. ใช้ระดับการบันทึกที่ถูกต้อง

    • ข้อผิดพลาด: มีบางอย่างผิดปกติและต้องแก้ไขโดยทันที
    • คำเตือน: กระบวนการสามารถดำเนินการต่อโดยไม่ต้องแก้ไข แอปพลิเคชันควรยอมรับระดับนี้ แต่คำเตือนควรได้รับการตรวจสอบเสมอ
    • ข้อมูล: ข้อมูลว่ากระบวนการสำคัญเสร็จสิ้นแล้ว
    • DEBUG ใช้ระหว่างการพัฒนาเท่านั้น
  2. ตรวจสอบให้แน่ใจว่าคุณรู้ว่าคุณกำลังบันทึกอะไรอยู่

  3. หลีกเลี่ยงการบันทึกมีผลต่อพฤติกรรมของแอปพลิเคชัน

ฟังก์ชั่นของการบันทึกควรจะเขียนข้อความในบันทึก

  1. ข้อความบันทึกควรเป็นข้อความอธิบายสั้นกระชับและรัดกุม

ไม่มีการใช้ข้อความไร้สาระมากเมื่อทำการแก้ไขปัญหา

  1. ใส่คุณสมบัติที่เหมาะสมใน log4j

ใส่ในที่ถูกวิธีและชั้นเรียนจะถูกเขียนโดยอัตโนมัติ

ตัวอย่าง:

Datedfile -web

log4j.rootLogger=ERROR, DATEDFILE
log4j.logger.org.springframework=INFO
log4j.logger.waffle=ERROR
log4j.logger.se.prv=INFO
log4j.logger.se.prv.common.mvc=INFO
log4j.logger.se.prv.omklassning=DEBUG

log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender
log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n

log4j.appender.DATEDFILE.Prefix=omklassning.
log4j.appender.DATEDFILE.Suffix=.log
log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/
  1. ค่าบันทึก

โปรดบันทึกค่าจากแอปพลิเคชัน

  1. บันทึกคำนำหน้า

ระบุว่าส่วนใดของแอปพลิเคชันคือการบันทึกถูกเขียนโดยเฉพาะอย่างยิ่งกับบางสิ่งสำหรับคำนำหน้าโครงการที่ตกลงกันไว้เช่น PANDORA_DB

  1. ปริมาณข้อความ

ระวังเพื่อไม่ให้มีการบันทึกข้อความมากเกินไป มันมีผลต่อประสิทธิภาพของแอพ

  1. รูปแบบการบันทึก:

- มีหลายตัวแปรและวิธีการใช้กับ log4j แต่เราต้องการใช้รูปแบบต่อไปนี้อย่างสม่ำเสมอเมื่อเราเข้าสู่ระบบที่ข้อยกเว้น:

logger.error("PANDORA_DB2: Fel vid hämtning av frist i TP210_RAPPORTFRIST", e);

ในตัวอย่างข้างต้นจะถือว่าเราได้ตั้งค่าคุณสมบัติ log4j เพื่อให้มันเขียนคลาสและวิธีการโดยอัตโนมัติ

ใช้ตัวบันทึกเสมอไม่ใช่ดังต่อไปนี้:

System.out.println(), System.err.println(), e.printStackTrace()

หากแอปพลิเคชันเว็บใช้เฟรมเวิร์กของเราคุณจะได้รับข้อมูลข้อผิดพลาดโดยละเอียดจาก EJB หากใช้การลองจับในตัวจัดการและการบันทึกตามรุ่นด้านบน:

ในโครงการของเราเราใช้รูปแบบการแปลงด้วยวิธีการและชื่อชั้นเรียนที่ถูกเขียนออกมาโดยอัตโนมัติ ที่นี่เราใช้ pattents ที่แตกต่างกันสองแบบสำหรับคอนโซลและสำหรับ datefileappender:

log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.DATEDFILE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

ในทั้งตัวอย่างข้างต้นวิธีการและคลาส wioll จะถูกเขียนออกมา ในหมายเลขแถวคอนโซลก็จะถูกเขียนของเรา

  1. toString()

กรุณามีtoString()สำหรับทุกวัตถุ EX:

@Override
public String toString() {
  StringBuilder sb = new StringBuilder();
  sb.append(" DwfInformation [ ");
  sb.append("cc: ").append(cc);
  sb.append("pn: ").append(pn);
  sb.append("kc: ").append(kc);
  sb.append("numberOfPages: ").append(numberOfPages);
  sb.append("publicationDate: ").append(publicationDate);
  sb.append("version: ").append(version);
  sb.append(" ]");
  return sb.toString();
}

แทนที่จะใช้วิธีพิเศษซึ่งสร้างผลลัพธ์เหล่านี้

public void printAll()
{
    logger.info("inbet: " + getInbetInput());
    logger.info("betdat: " + betdat);
    logger.info("betid: " + betid);
    logger.info("send: " + send);
    logger.info("appr: " + appr);
    logger.info("rereg: " + rereg);   
    logger.info("NY: " + ny);   
    logger.info("CNT: " + cnt);   
}

ดังนั้นมีอะไรที่คุณสามารถเพิ่มแสดงความคิดเห็นหรือค้นหาที่น่าสงสัยด้วยวิธีการเหล่านี้ในการใช้การบันทึกหรือไม่ รู้สึกอิสระที่จะตอบหรือแสดงความคิดเห็นแม้ว่าจะไม่เกี่ยวข้องกับ Java, Java และ log4j เป็นเพียงการดำเนินการตามเหตุผลนี้



1
@gnat - ฉันคิดว่าคุณถูกต้องมีการทับซ้อนกันระหว่างสองคำถาม ฉันพยายามที่จะเรียกมันว่าซ้ำ

คำตอบ:


4

ในฐานะที่เป็นส่วนขยายของกฎการบันทึกของคุณซึ่งในแอปพลิเคชันที่คำสั่งบันทึกมาจากคุณอาจต้องการเพิ่มต่อการตั้งค่าสถานะการบันทึกระดับโมดูล แทนที่จะบันทึกทุกอย่างตลอดเวลาสิ่งนี้จะช่วยให้คุณสามารถเลือกเป้าหมายส่วนของแอปพลิเคชันของคุณแทน มีค่าโสหุ้ยในนี้และคุณต้องสร้างสิ่งอำนวยความสะดวกที่ช่วยให้คุณสามารถเปิด / ปิดการใช้งานการบันทึกที่ เป็นการดีที่คุณจะสามารถเปิด / ปิดการใช้งานได้ทันทีขณะที่แอปพลิเคชันทำงานอยู่

ฉันเคยเห็นเลเยอร์ด้านล่างแก้ปัญหาซึ่งฉันเรียกว่า "ติดตาม" แต่นั่นไม่จำเป็นต้องเป็นคำสากล แทร็กการบันทึกระดับ "ติดตาม" ให้มากที่สุดที่คุณสามารถทำได้รวมถึงโมดูลการเข้า / ออกการประทับเวลาด้วยการเข้า / ออกและคะแนนโบนัสสำหรับการบันทึกค่าที่ส่งผ่าน เห็นได้ชัดว่ามันสร้างข้อมูลจำนวนมากและไม่ใช่สิ่งที่คุณเปิดใช้โดยจำใจ แต่มันมีข้อดีเมื่อเทียบกับการดีบั๊กเมื่อคุณไม่สามารถแนบกับกระบวนการหรือคุณไม่มีการถ่ายโอนข้อมูลหลักของแอปพลิเคชันที่หลงทาง

ฉันต้องการดูการอ้างอิงไฟล์ / โมดูลและการประทับเวลาด้วยข้อมูลบันทึกของฉัน มันจะมีประโยชน์เมื่อพยายามตามล่าเงื่อนไขการแข่งขันระหว่างเธรดรวมถึงการประสานงานกิจกรรมต่าง ๆ ของแอพพลิเคชั่น เพื่อความเป็นธรรมฉันรู้ว่าชาวบ้านบางคนที่คิดว่ารายละเอียดเหล่านี้ถ่วงไฟล์บันทึกการทำงาน การเพิ่มการประทับเวลาเป็นสิ่งที่ต้องหารือกับทีม (ขออภัยหาก log4j ทำเช่นนั้นแล้ว)

หากการบันทึกไม่ได้รับการดูแลโดยเธรด / กระบวนการของตนเองนั่นเป็นสิ่งที่ต้องพิจารณาเช่นกัน แทนที่จะทำให้เธรดแอปพลิเคชันรอให้การบันทึกประมวลผลข้อความบันทึกจะถูกส่งผ่านไปยังตัวจัดการบันทึกและเธรดแอปพลิเคชันจะดำเนินต่อไปอย่างสนุกสนาน อีกวิธีหนึ่งคือการสร้างกลไกบัฟเฟอร์เพื่อจัดการกับข้อความล็อกเป็นอีกวิธีหนึ่งในการเพิ่มความเร็วในการตอบสนองของแอปพลิเคชัน

การมีการควบคุมขนาดและประวัติของไฟล์บันทึกเป็นคุณสมบัติที่ต้องพิจารณาอีกประการหนึ่ง คุณไม่ต้องการให้แอพพลิเคชั่นใช้พื้นที่ดิสก์ทั้งหมดในระบบโฮสต์และคุณไม่จำเป็นต้องเก็บไฟล์บันทึกทั้งหมดไว้ตลอดไป


2

สิ่งหนึ่งที่ควรคำนึงถึงคือการตรวจสอบระดับการบันทึกก่อนที่คุณจะดำเนินการกับสตริงเพื่อการบันทึก นั่นคืออย่าไปที่การตั้งค่าตัวจัดรูปแบบวันที่หรือเชื่อมโยงสตริงจำนวนมากเพื่อสร้างข้อความบันทึกหากคุณไม่ได้เข้าสู่ระบบจริงๆ นั่นเป็นงานที่สูญเปล่าที่ทำให้ใบสมัครของคุณช้าลง

FYI, โครงการ Apache Commons มีToStringBuilder คลาสที่ทำให้toString()วิธีการของคุณง่ายขึ้น


1

ฉันไม่พบสิ่งที่น่าสงสัยในสิ่งที่คุณเพิ่มที่นี่นิค นี่คือวิธีที่ฉันทำมาระยะหนึ่งแล้ว โพสต์ที่คุณให้มีรายละเอียดมากและอาจใช้เป็นบทช่วยสอนสำหรับการบันทึก อย่างไรก็ตามฉันต้องการเพิ่มสิ่งหนึ่งที่นี่ซึ่งก็คือ: ในหลาย ๆ ที่ฉันได้เห็น chaps โดยใช้การบันทึกตามเงื่อนไขสำหรับเช่น:

     if(env_local)
     {
     write_to_local();
     }    
     else if(env_IT)
     {
     write_to_IT();
     } 
     else if(env_PROD)
     {
     write_to_prod();
     } 
     else
     dosomething();

ฉันคิดว่าการติดตามหรือการดีบักแบบมีเงื่อนไขแบบนี้ไม่ใช่วิธีที่ดีที่สุด


1

นอกเหนือจากการบันทึกคลาส / วิธีที่ทำให้เกิดข้อผิดพลาดแล้วจะมีประโยชน์ในการบันทึกพารามิเตอร์ที่ส่งผ่านไปยังวิธีนั้นด้วย การรู้ตำแหน่งที่เกิดข้อผิดพลาดนั้นไม่มีประโยชน์มากหากเกิดขึ้นเพียง 1 ครั้งจาก 1,000 ครั้ง คุณต้องรู้ว่าข้อมูลใดที่ทำให้เกิดข้อผิดพลาดเกิดขึ้น

ฉันยังพบว่ามันมีประโยชน์ที่จะมีตัวแปรที่กำหนดระดับการเริ่มต้นของการบันทึกสำหรับแอปพลิเคชัน วิธีนี้คุณสามารถมีรหัส DEBUG และ INFO ควบคู่กับรหัสคำเตือนและข้อผิดพลาด เมื่อทำงานในโหมดการผลิตคุณจะตั้งค่าเริ่มต้นเป็นไม่ให้ข้อมูล DEBUG แสดงผล แต่เมื่อเกิดข้อผิดพลาดคุณสามารถอัปเดตการตั้งค่าสถานะและเริ่มเขียนข้อความ DEBUG ไปยังบันทึกได้เช่นกัน


1

การบันทึกเป็นส่วนใหญ่ที่เกี่ยวกับการตัดขวาง Java อย่างเดียวนั้นไม่เพียงพอที่จะทำให้คุณสามารถแยกบันทึกจาก logics ธุรกิจจริงของคุณ ซึ่งหมายความว่าคุณไม่สามารถทำได้เพียงแค่ใช้วิธีการหนึ่งและนำไปไว้ในโครงการอื่น แต่คุณต้องลบและปรับการบันทึกทั้งหมดก่อนที่จะทำ และนั่นเป็นเพียงส่วนยอดของภูเขาน้ำแข็ง

เพื่อป้องกันปัญหาดังกล่าวและปัญหาอื่น ๆ เมื่อทำการบันทึกการเข้าระบบและ logics ของธุรกิจ "ของจริง" คุณควรคำนึงถึงการใช้การเขียนโปรแกรมแบบเชิงกว้าง สำหรับ Java เฟรมเวิร์กที่ใช้มากที่สุดคือ AspectJ มีวิดีโอ youtube นี้จากการพูดคุยทางเทคโนโลยีของ Googleที่อธิบายถึง AspectJ และการใช้งานมากกว่าการบันทึกค่อนข้างดี คุณจะพบตัวอย่างมากมายสำหรับการเข้าสู่ระบบด้วยตัวคุณเองแน่นอนที่นี่ใน stackexchange เช่นกัน


0

สิ่งหนึ่งที่ฉันอยากจะแนะนำก็คือคุณมีวิธีที่จะมีบริบทการบันทึกหลายรายการที่เกี่ยวข้องกับไฟล์บันทึกใด ๆ และจัดเรียงเพื่อให้สิ่งที่เขียนไปยังบริบทการบันทึกใด ๆ จะได้รับการบันทึกเว้นแต่ว่ารหัสจะถามอย่างชัดเจน การออกแบบดังกล่าวจะช่วยให้สามารถจับภาพบันทึกที่ค่อนข้างละเอียดในระหว่างการดำเนินการและทิ้งมันหากการดำเนินการประสบความสำเร็จ แต่ให้พวกเขาพร้อมใช้งานหากการดำเนินการล้มเหลว ขาดคุณสมบัติการบันทึกการมีบันทึกที่ดีเมื่อสิ่งที่ล้มเหลวอาจทำให้แอปพลิเคชันเสียเวลาในการบันทึกข้อมูลที่ไร้ประโยชน์ใน 99.99% ของจำนวนครั้งที่ทุกอย่างทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.