syslog tutorial
Table of Contents
1 hello world
ubuntu中确定syslogd进程运行着, ubuntu 16.04
中是叫 rsyslog
:
#include <syslog.h> #include <unistd.h> #include <sys/types.h> int main() { setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); syslog (LOG_NOTICE | LOG_FTP, "[pengtest] Program started by User %d, with facility ftp.", getuid ()); syslog (LOG_NOTICE, "Program started by User %d, with default facility.", getuid ()); syslog (LOG_INFO, "A tree falls in a forest"); closelog (); return 0; }
执行后可以到 /var/log/syslog
文件中找到对应的打印。
2 自己根据syslog封装一个日志接口
#include <syslog.h> #include <unistd.h> #include <stdarg.h> int my_log(int level, const char *format, ...) { va_list args; va_start(args, format); vsyslog(level | LOG_LOCAL0, format, args); va_end(args); return 0; } int main() { openlog ("my_log", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); my_log(LOG_NOTICE, "This is test,%d%s\n", 5, "nihao"); closelog (); return 0; }
3 配置远程日志服务器
假设当前有两台ubuntu机器,在日志server上需要开启rsyslog接收远程日志
的功能,具体做法是修改 /etc/rsyslog.conf
文件,保证有下面两行:
# provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514")
然后重启一下rsyslog服务 sudo service rsyslog restart
。
在日志的client上,直接指定rsyslog的远程server的ip和端口就可以了,比 如这样:
*.* @@10.0.0.50:514
4 配置syslog的格式
可以定义多种格式,然后使用即可,参考的 这里 :
# 这种是新的方式来定义template的 template(name="ForwardFormat" type="list") { constant(value="<") property(name="pri") constant(value=">") property(name="timestamp" dateFormat="rfc3339") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag" position.from="1" position.to="32") property(name="msg" spifno1stsp="on" ) property(name="msg") } # 旧的方式来定义template $template myTraditionalFormatWithPRI,"%pri-text%: %timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n" # 设置为对应的template的名字就可以修改了 $ActionFileDefaultTemplate myTraditionalFormatWithPRI
这里 有 syslog
的所有property,可能参考来写template。