จะเขียนบันทึกไปยังไฟล์โดยใช้ Log4j และ Storm Framework ได้อย่างไร

ฉันมีปัญหาเล็กน้อยในการบันทึกไฟล์โดยใช้ log4j ใน storm

ก่อนที่จะส่งโทโพโลยีของฉัน เช่น ในวิธีการหลักของฉัน ฉันเขียนคำสั่งบันทึกและกำหนดค่าตัวบันทึกโดยใช้:

PropertyConfigurator.configure(myLog4jProperties)
  • ตอนนี้เมื่อฉันรันโทโพโลยีโดยใช้ jar ที่ปฏิบัติการได้ ใน eclipse - มันทำงานได้ดีและไฟล์บันทึกก็ถูกสร้างขึ้นตามที่ควรจะเป็น
    หรือ
    เมื่อฉันรัน jar ที่ปฏิบัติการได้โดยใช้ "java -jar MyJarFile someOtherOptions" ฉันเห็นว่าการกำหนดค่า log4j และไฟล์ถูกสร้างขึ้นอย่างถูกต้องและการบันทึกเสร็จสิ้นทั้งบนไฟล์และคอนโซล (ตามที่กำหนดไว้ใน log4j.properties ของฉัน)

  • แต่ เมื่อฉันเรียกใช้ jar เดียวกันโดยใช้ "storm jar MyJarFile MyMainClass someOtherOptions" จะไม่สามารถสร้างและลงชื่อเข้าใช้ไฟล์ใด ๆ ยกเว้นบนคอนโซล

ฉันกำลังพูดถึงบันทึกที่ฉันกำลังพิมพ์ ก่อน ส่งโทโพโลยีของฉัน

มีวิธีใดบ้างที่จะบันทึกคำสั่งของฉันในไฟล์ขณะใช้งาน storm? ฉัน ไม่ ต้องใช้ org.apache.log4j


person holmes840    schedule 05.09.2014    source แหล่งที่มา
comment
คุณกำลังใช้คลัสเตอร์ท้องถิ่นเป็น jar exec หรือไม่? เมื่อคุณใช้ Storm Jar ... คุณกำลังใช้โหมดคลัสเตอร์ คุณได้ตรวจสอบไฟล์ storm.log.properties บน storm ของคุณ ติดตั้ง dir / log4j ในเซิร์ฟเวอร์ของคุณหรือไม่? เมื่อคุณส่งโทโพโลยีในโหมดคลัสเตอร์ Storm กำลังทำงานและเขียนบันทึกอยู่แล้ว บางทีคุณอาจไม่สามารถเขียนทับ log4j ขณะรันไทม์ได้ ดังนั้นการแก้ไขไฟล์ storm log4j ก่อนหน้านี้จึงควรใช้งานได้ในทุกกรณี   -  person zenbeni    schedule 05.09.2014
comment
@zenbeni จริง ๆ แล้วฉันกำลังทำงานใน local_mode ฉันไม่พบคุณสมบัติที่เกี่ยวข้องกับ log4j ในไดเร็กทอรีการติดตั้ง storm ฉันใช้ apache-storm-0.9.2-incubating   -  person holmes840    schedule 05.09.2014


คำตอบ (2)


เฟรมเวิร์กของ Storm ใช้การบันทึกของตัวเอง บันทึกของคุณมักจะจบลงที่ logs dir ซึ่งมีการติดตั้ง storm ({Storm DIR}/logs) คุณสามารถค้นหาคุณสมบัติบันทึกพายุได้ใน {Storm DIR}/logback/cluster.xml มันใช้ logback ไม่ใช่ log4j

person Naresh    schedule 05.09.2014
comment
ไฟล์นี้กำหนดคุณสมบัติสำหรับไฟล์ใน apache-storm-incubating-0.9.2.jar แน่นอนว่าฉันสามารถเปลี่ยนคุณสมบัติของสิ่งนั้นได้ แต่ฉันต้องการเปลี่ยนคุณสมบัติการบันทึกสำหรับ MyJarFile.jar คลัสเตอร์.xml จะไม่ส่งผลกระทบต่อการบันทึก นอกจากนี้ ฉันยังสามารถกำหนดคุณสมบัติสำหรับบันทึกที่จะพิมพ์หลังจากส่งโทโพโลยีของฉันได้ เช่น บนโหนดหัวหน้างาน ฉันไม่สามารถรับบันทึก (ซึ่งมีอยู่ใน MyJarFile.jar) เพื่อพิมพ์เป็นไฟล์ก่อนที่จะส่งโทโพโลยีของฉัน - person holmes840; 08.09.2014
comment
ฉันจะใช้ log4j บน slf4j jar ได้อย่างไร - person Mani; 17.06.2015

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

ในโปรเจ็กต์ของคุณ ให้รวมการพึ่งพา Maven เหล่านี้ (slf4j-simple สำหรับการทดสอบหน่วยของคุณ!):

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.5</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.5</version>
  <scope>test</scope>
</dependency>

จากนั้น ภายในโทโพโลยี/พวย/โบลต์ของคุณ คุณจะได้รับ Logger:

private static final Logger LOG = LoggerFactory.getLogger(MySpout.class);

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

หากคุณต้องการเข้าถึงไฟล์จริง คุณสามารถรวบรวมมันออกจากแต่ละโหนดได้ (ของฉันอยู่ใน /var/log/storm/)

person Kit Menke    schedule 07.09.2014
comment
ดังนั้นเมื่อคุณบอกว่าไปที่ไฟล์จริง คุณกำลังพูดถึงไฟล์ worker-‹port›.log ซึ่งโดยค่าเริ่มต้นจะไปที่ไดเร็กทอรี $STORM_HOME/logs หรือคุณหมายถึงว่าคุณกำหนดค่าไฟล์ log4j ของคุณด้วยเส้นทางเป็น /var/log/storm ? นอกจากนี้ มีวิธีใดบ้างที่ Storm จะไม่ใช้ Cluster.xml และใช้ไฟล์บันทึกของคุณที่คุณส่งใน jar ที่คุณปรับใช้กับคลัสเตอร์ - person Ankur Garg; 28.10.2015
comment
@AnkurGarg ฉันหมายถึงไฟล์ worker-port.log เมื่อใดก็ตามที่คุณโทรไปที่ LOG.info หรือสูงกว่าภายในโทโพโลยีของคุณ ระบบจะบันทึกลงในบันทึกของผู้ปฏิบัติงานเหล่านั้นและมองเห็นได้ใน Storm UI - person Kit Menke; 28.10.2015
comment
ตกลง. ขอบคุณที่ตอบคิท :) - person Ankur Garg; 28.10.2015
comment
ปัญหาของฉันคือฉันมีแอปพลิเคชั่นประมาณ 10 ตัวที่ทำงานบนมาสเตอร์ ทุกครั้งที่ฉันต้องการคว้าไฟล์บันทึกสำหรับแอปพลิเคชันฉันต้องไปที่แต่ละโหนด ให้ค้นหาพอร์ตเพื่อรับ worker-xxx.log มีวิธีใดในการกำหนดค่าชื่อบันทึกสำหรับแต่ละแอปพลิเคชันหรือไม่? - person hoangpx; 26.07.2017