2012-04-29 11 views
9

Tôi có đơn đăng ký myapp chỉ nên gửi các tệp nhật ký chỉ đến /var/log/myapp.log. myapp được viết bằng C++. Mã mẫu sau đây, chỉ gửi nhật ký tới/var/log/syslog. Os của tôi là Linux - Ubuntu 12.04 - phải cụ thể. Tôi cũng thấy rằng máy của tôi có rsyslog hơn syslog được cài đặt.Cách định cấu hình nhật ký hệ thống để nhật ký ứng dụng truy cập vào một tệp cụ thể

#include <stdio.h> 
#include <unistd.h> 
#include <syslog.h> 

int main(void) { 
    openlog("myapp", LOG_PID|LOG_CONS, LOG_USER); 
    syslog(LOG_INFO, "abc 10"); 
    closelog(); 
    return 0; 
} 

Trả lời

4

Theo syslog (3) manpage, tham số đầu tiên cho openlog() đặt tiền tố cho thông điệp tường trình chứ không phải tên tệp. Bạn có thể sử dụng một cơ sở như LOG_LOCAL0 để gắn cờ đầu ra của mình và sau đó configure syslogd using /etc/syslog.conf để gửi các nhật ký đó đến tệp mong muốn của bạn.

+1

Cách cấu hình syslog.conf để các thông điệp tường trình từ ứng dụng của tôi đi đến một tệp cụ thể? Viết lên một tệp đơn giản không phải là giải pháp tốt - hãy đọc liên kết này http://stackoverflow.com/questions/158457/logging-in-linux và câu trả lời được đưa ra bởi http://stackoverflow.com/users/7740/richard – suresh

+0

@suresh Bạn có thể trực tiếp cung cấp liên kết đến câu trả lời bằng cách sao chép vị trí liên kết từ liên kết 'chia sẻ' sau mỗi câu trả lời. Như thế này - http://stackoverflow.com/a/158493/598175 – deppfx