Cách tiêu chuẩn để đăng nhập từ chương trình C là syslog
.
Bắt đầu bằng cách bao gồm tệp tiêu đề:
#include <syslog.h>
Sau đó, trong chương trình của bạn, bạn nên cấu hình nhật ký hệ thống bằng cách gọi openlog
:
openlog("programname", 0, LOG_USER);
Đối số đầu tiên là nhận dạng hoặc thẻ, được tự động thêm vào đầu mỗi tin nhắn. Đặt tên chương trình của bạn ở đây.
Đối số thứ hai là các tùy chọn bạn muốn sử dụng hoặc 0
cho hành vi bình thường. Danh sách đầy đủ các tùy chọn là trong man 3 syslog
. Một thứ bạn có thể thấy hữu ích là LOG_PID
, nó làm cho syslog cũng ghi lại id quá trình trong thông điệp tường trình.
Sau đó, mỗi lần bạn muốn viết một thông điệp tường trình, bạn gọi syslog
:
syslog(LOG_INFO, "%s", "Message");
Đối số đầu tiên là ưu tiên. Phạm vi ưu tiên từ DEBUG
(ít nhất là quan trọng) đến EMERG
(chỉ dành cho trường hợp khẩn cấp) với DEBUG
, INFO
và ERR
được sử dụng phổ biến nhất. Xem man 3 syslog
cho các lựa chọn của bạn.
Đối số thứ hai và thứ ba là một định dạng và thông báo, giống như printf.
Tệp nhật ký này xuất hiện trong tùy thuộc vào cài đặt nhật ký hệ thống của bạn.
Với một thiết lập mặc định, nó có thể đi vào /var/log/messages
.
Bạn có thể thiết lập một log file tùy chỉnh bằng cách sử dụng một trong những cơ sở vật chất trong phạm vi LOG_LOCAL0
đến LOG_LOCAL7
.
Bạn sử dụng chúng bằng cách thay đổi:
openlog("programname", 0, LOG_USER);
đến
openlog("programname", 0, LOG_LOCAL0);
hoặc là
openlog("programname", 0, LOG_LOCAL1);
v.v.
và thêm một mục tương ứng vào /etc/syslog.conf
, vd
local1.info /var/log/programname.log
và khởi động lại máy chủ syslog, vd
pkill -HUP syslogd
Các .info
phần của local1.info
phương tiện trên tất cả các tin nhắn được INFO
hoặc quan trọng hơn sẽ được đăng nhập, bao gồm INFO
, NOTICE
, ERR
(lỗi), CRIT
(quan trọng), vv, nhưng không DEBUG
.
Hoặc, nếu bạn có rsyslog
, bạn có thể thử bộ lọc dựa trên thuộc tính , ví dụ:
:syslogtag, isequal, "programname:" /var/log/programname.log
Syslogtag phải chứa ":".
Hoặc, nếu bạn dự định phân phối phần mềm của mình cho người khác, có lẽ không nên dựa vào việc sử dụng LOG_LOCAL
hoặc rsyslog
bộ lọc.
Trong trường hợp đó, bạn nên sử dụng LOG_USER
(nếu đó là một chương trình bình thường) hoặc LOG_DAEMON
(nếu đó là máy chủ), viết thông báo khởi động và thông báo lỗi bằng cách sử dụng syslog
, nhưng viết tất cả các thông điệp tường trình của bạn vào một tệp bên ngoài syslog
. Ví dụ, Apache HTTPd ghi nhật ký đến /var/log/apache2/*
hoặc /var/log/httpd/*
, tôi giả sử sử dụng các cuộc gọi / và open
/ thường xuyên .fopen
write
printf