Log memutar log dari standar keluar

2

Saya memiliki program yang membutuhkan argumen untuk memungkinkan debug tambahan dari perangkat keras yang kami gunakan.

Log hanya ditulis ke standar di luar jadi biasanya kita hanya pipa standar ke file yaitu ./myprog -AddDebug> myfile.txt, namun kita sekarang diharuskan untuk menjaga pencatatan ini diaktifkan untuk menemukan kesalahan yang biasanya tidak kita lakukan melakukannya mencari cara untuk memutar log untuk memastikan ruang disk server tidak terbiasa.

Saya telah menggunakan fungsi logrotate bawaan di linux dengan menambahkan file config ke /etc/logrotate.d/mytrace yang berisi yang berikut:

/home/myprog/mytrace.txt
{
    rotate 5
    size 2M
    copytruncate
    olddir trace_archive
}

Ketika saya menjalankan / usr / sbin / logrotate /etc/logrotate.conf file jejak dipindahkan ke archvie Namun, yang asli dibuat ulang tapi kemudian jelas pipa itu hilang sehingga file tidak lagi ditulis. Saya kemudian mencoba mengganti createdengan copytruncateyang masih menempatkan file dalam arsip tetapi file asli terus bertambah.

Masalah kedua, file hanya diarsipkan ketika saya secara manual menjalankan fungsi logrotate itu tidak otomatis menyala ketika ukuran file tercapai.

Bantuan apa pun yang Anda berikan pada kedua masalah akan sangat dihargai.

MEMPERBARUI

Saya sudah berhasil membuatnya sebagian berfungsi, untuk mendapatkan copytruncate untuk bekerja file harus dibuka dalam mode append jadi alih-alih ./myprog -AddDebug > myfile.txtini harus diubah menjadi ./myprog -AddDebug >> myfile.txt.

Satu-satunya masalah saya sekarang adalah, itu hanya akan melakukan rotasi jika saya menjalankan logrotate -v /etc/logrotate.confjadi bagaimana saya bisa melakukan ini secara otomatis?

Sepertinya saya harus membuat cronjob secara manual yang berjalan setiap beberapa menit untuk memastikan log diputar, tidak ditangani secara otomatis.

Terima kasih

Boardy
sumber

Jawaban:

3

Entah hanya pipa | loggerdengan bendera yang sesuai dan gunakan syslog untuk mengelola file log Anda.

Alternatif program pembantu yang bagus rotatelogstermasuk dalam distribusi apache httpd, yang mengambil stdin dan akan menulis dan memutar file log untuk Anda, misal, pipa output Anda ke | /usr/sbin/rotatelogs /home/myprog/myproglog.%Y-%m-%d-%H_%M_%S 2M dan membuat file log 2 megabyte dengan nama file berurutan yang unik.

HBruijn
sumber
Terima kasih atas sarannya, saya sudah hampir berfungsi, saya hanya punya masalah dengan itu secara otomatis berjalan ketika file log telah melebihi batas ukuran
Boardy
loggeradalah solusi terbaik, dan saya ingin menyebutkan newsyslogbahwa sebenarnya memutar file syslog.
Kondybas
@ Papan ketika saya membaca halaman manual logrotate itu dirancang untuk dijalankan dari cron, biasanya sebagai cron-job harian. Seharusnya aman untuk dijalankan beberapa kali sehari, dalam hal ini hanya akan memutar file log di mana kriteria rotasi didasarkan pada ukuran dan ukuran itu telah terlampaui. Itu tidak secara aktif memonitor file log dan tidak memicu tepat pada saat 2M Anda telah terlampaui.
HBruijn
0

Terima kasih semuanya atas bantuan Anda.

Saya telah menggunakan rotate log standar yang dibangun ke dalam OS dan mengatur cronjob untuk dijalankan setiap 5 menit, dan ini tampaknya bekerja dengan cara yang saya inginkan.

Terima kasih

Boardy
sumber