Bagaimana cara menulis log ke file menggunakan Log4j dan Storm Framework?

Saya mengalami sedikit masalah saat masuk ke file menggunakan log4j di storm.

Sebelum mengirimkan topologi saya, yaitu dalam metode utama saya, saya menulis beberapa pernyataan log dan mengkonfigurasi logger menggunakan:

PropertyConfigurator.configure(myLog4jProperties)
  • Sekarang ketika saya menjalankan topologi saya menggunakan jar yang dapat dieksekusi di Eclipse - itu berfungsi dengan baik dan file log dibuat sebagaimana mestinya.
    ATAU
    Ketika saya menjalankan jar yang dapat dieksekusi menggunakan "java -jar MyJarFile someOtherOptions", saya dapat melihat log4j sedang dikonfigurasi dan file dibentuk dengan benar dan pencatatan dilakukan pada file dan konsol (seperti yang didefinisikan dalam properti log4j.saya)

  • TAPI ketika saya menjalankan jar yang sama menggunakan "storm jar MyJarFile MyMainClass someOtherOptions" ia tidak dapat membuat dan masuk ke file mana pun kecuali di konsol.

Saya berbicara tentang log yang saya cetak SEBELUM mengirimkan topologi saya.

Apakah ada cara untuk mencatat pernyataan saya dalam file saat menggunakan storm? Saya tidak terikat untuk menggunakan org.apache.log4j.


person holmes840    schedule 05.09.2014    source sumber
comment
Anda menggunakan cluster lokal sebagai jar exec? Saat Anda menggunakan storm jar ... Anda menggunakan mode cluster. Jadi apakah Anda memeriksa file storm.log.properties di storm install dir / log4j di server Anda? Saat Anda mengirimkan topologi dalam mode cluster, storm sudah berjalan dan menulis log, mungkin Anda tidak dapat menimpa log4j saat runtime, jadi memodifikasi file storm log4j sebelumnya akan berfungsi di semua kasus.   -  person zenbeni    schedule 05.09.2014
comment
@zenbeni Saya sebenarnya menjalankan dalam mode_lokal. Saya tidak dapat menemukan properti terkait log4j di direktori instalasi storm. Saya menggunakan inkubasi Apache-storm-0.9.2.   -  person holmes840    schedule 05.09.2014


Jawaban (2)


Kerangka kerja badai menggunakan pencatatannya sendiri. Log Anda kemungkinan besar akan berakhir di direktori log tempat storm diinstal ({Storm DIR}/logs). Anda dapat menemukan properti log badai di {Storm DIR}/logback/cluster.xml. Ini menggunakan logback bukan log4j

person Naresh    schedule 05.09.2014
comment
File ini mendefinisikan properti untuk file di Apache-storm-incubating-0.9.2.jar. Tentu saya bisa mengubah properti untuk itu. Tapi saya ingin mengubah properti logging untuk MyJarFile.jar. cluster.xml tidak akan memengaruhi pencatatannya. Dan saya juga dapat menentukan properti untuk log yang dicetak SETELAH mengirimkan topologi saya, yaitu pada node supervisor. Saya tidak bisa mendapatkan log (yang ada di MyJarFile.jar) untuk dicetak dalam file SEBELUM mengirimkan topologi saya. - person holmes840; 08.09.2014
comment
bagaimana saya bisa menggunakan log4j melalui toples slf4j? - person Mani; 17.06.2015

Saya akan merekomendasikan menggunakan SLF4J untuk logging Anda dalam badai. Anda mungkin dapat membuat LOG4J berfungsi tetapi Anda akan memiliki pengaturan tambahan yang harus dilakukan pada setiap node di cluster. Karena storm sudah melakukan ini untuk Anda, saya tidak mengerti maksudnya.

Dalam proyek Anda, sertakan dependensi maven berikut (slf4j-simple untuk pengujian unit Anda!):

<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>

Kemudian, di dalam topologi/cerat/baut Anda, Anda baru saja mendapatkan Logger:

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

Di lingkungan saya, INFO apa pun dan di atasnya dicatat ke dalam file dan, yang lebih penting, terlihat di UI Storm. Anda hanya perlu mengklik cerat/baut Anda lalu klik nomor port untuk menuju ke halaman penampil log.

Jika Anda ingin mendapatkan file sebenarnya maka Anda dapat mengumpulkannya dari setiap node (milik saya ada di /var/log/storm/).

person Kit Menke    schedule 07.09.2014
comment
Jadi ketika Anda mengatakan dapatkan file sebenarnya, maksud Anda tentang file pekerja-‹port›.log yang secara default masuk ke direktori $STORM_HOME/logs. atau maksud Anda, Anda mengonfigurasi file log4j Anda dengan jalur sebagai /var/log/storm? Selain itu, apakah ada cara bagi Storm untuk tidak menggunakan Cluster.xml dan menggunakan file log Anda yang Anda kirimkan dalam toples yang Anda terapkan ke cluster. - person Ankur Garg; 28.10.2015
comment
@AnkurGarg Yang saya maksud adalah file pekerja-port.log. Kapan pun Anda memanggil LOG.info atau lebih tinggi di dalam topologi Anda, itu akan dicatat ke log pekerja tersebut dan terlihat di UI Storm. - person Kit Menke; 28.10.2015
comment
Oke. Terima kasih telah membalas Kit :) - person Ankur Garg; 28.10.2015
comment
masalah saya adalah saya memiliki sekitar 10 aplikasi yang berjalan di master. Setiap kali saya ingin mengambil file log untuk suatu aplikasi, saya harus pergi ke setiap node, mencari port untuk mendapatkan pekerja-xxx.log. Apakah ada cara untuk mengkonfigurasi nama log untuk setiap aplikasi? - person hoangpx; 26.07.2017