环境:主机操作系统:ubuntu16.04
功能实现:利用systemd实现应用的日志记录功能,并输出到指定文件夹
环境额外依赖:libsystemd-dev_229-4kord4_amd64.deb (依赖安装时可能还需要一些其它的依赖,按提示进行操作)
rsyslog分为7种信息等级:
0、debug-有调试信息的
1、info-一般信息日志
2、notice-具有重要性的普通条件的信息
3、warning/warn-警告界别
4、err/error-错误级别,阻止某个功能或者模块不能正常工作的信息
5、crit-严重级别,阻止整个系统或者整个软件不能正常工作的信息
6、alert-需要立刻修改的信息
7、emerg/panic-内核崩溃等严重信息
一、先创建一个mytest.c的主函数
三、创建第二个config文件:30-mytest.conf(后缀是conf的文件都可以,注意不要与目录下同名)放到/etc/rsyslog.d/目录下,所属用户和组均为root,权限为644
说明:此配置文件指定日志输入文件/var/log/mytest.log
四、编译mytest.c(gcc mytest.c -o mytest -lsystemd),日志文件如下:/var/log/mytest.log
五、重启Rsyslog服务,日志采集开始工作
环境额外依赖:libsystemd-dev_229-4kord4_amd64.deb (依赖安装时可能还需要一些其它的依赖,按提示进行操作)
rsyslog分为7种信息等级:
0、debug-有调试信息的
1、info-一般信息日志
2、notice-具有重要性的普通条件的信息
3、warning/warn-警告界别
4、err/error-错误级别,阻止某个功能或者模块不能正常工作的信息
5、crit-严重级别,阻止整个系统或者整个软件不能正常工作的信息
6、alert-需要立刻修改的信息
7、emerg/panic-内核崩溃等严重信息
一、先创建一个mytest.c的主函数
#include <stdio.h>
#include <systemd/sd-journal.h>
#define MYTEST_LOG_EMERG LOG_EMERG
#define MYTEST_LOG_ALERT LOG_ALERT
#define MYTEST_LOG_CRIT LOG_CRIT
#define MYTEST_LOG_ERR LOG_ERR
#define MYTEST_LOG_WARNING LOG_WARNING
#define MYTEST_LOG_NOTICE LOG_NOTICE
#define MYTEST_LOG_INFO LOG_INFO
#define MYTEST_LOG_DEBUG LOG_DEBUG
#define MYTEST_LOG_LEVELMASK 7
#ifndef DEFAULT_LOGLEVEL
#define DEFAULT_LOGLEVEL MYTEST_LOG_DEBUG
#endif
#define mytest_log_emerg(...) mytest_log(MYTEST_LOG_EMERG, "[EMERG] " __VA_ARGS__)
#define mytest_log_alert(...) mytest_log(MYTEST_LOG_ALERT, "[ALERT] " __VA_ARGS__)
#define mytest_log_crit(...) mytest_log(MYTEST_LOG_CRIT, "[CIRT] " __VA_ARGS__)
#define mytest_log_err(...) mytest_log(MYTEST_LOG_ERR, "[ERROR] " __VA_ARGS__)
#define mytest_log_warning(...) mytest_log(MYTEST_LOG_WARNING, "[WARNING] " __VA_ARGS__)
#define mytest_log_notice(...) mytest_log(MYTEST_LOG_NOTICE, "[NOTICE] " __VA_ARGS__)
#define mytest_log_info(...) mytest_log(MYTEST_LOG_INFO, "[INFO] " __VA_ARGS__)
#define mytest_log_debug(...) mytest_log(MYTEST_LOG_DEBUG, "[DEBUG] " __VA_ARGS__)
#define mytest_log(...) __mytest_log(__VA_ARGS__)
#define __mytest_log(level, ...) sd_journal_print(level, __VA_ARGS__)
int main()
{
mytest_log_emerg("你好,世界!\n");
mytest_log_alert("你好,世界!\n");
mytest_log_crit("你好,世界!\n");
mytest_log_err("你好,世界!\n");
mytest_log_warning("你好,世界!\n");
mytest_log_notice("你好,世界!\n");
mytest_log_info("你好,世界!\n");
mytest_log_debug("你好,世界!\n");
return 0;
}
二、创建第一个config文件:mytestlog 放到/etc/logrotate.d目录下,所属用户和组均为root,权限为644./var/log/mytest.log{
daily
missingok
compress
delaycompress
dateext
notifempty
create 777 root adm
}
参数说明:1、daily-指定转储周期为天 2、missingok-如果日志不存在或丢失,不报错 3、compress-通过gzip压缩转储以后的日志 4、delaycompress-通常和compress一起使用,转储的日志文件到下一次转储时才压缩 5、dateext-切换后的日志文件会附加上一个短横线和YYMMDD格式日期 6、notifempty-如果是空文件的话不转储。三、创建第二个config文件:30-mytest.conf(后缀是conf的文件都可以,注意不要与目录下同名)放到/etc/rsyslog.d/目录下,所属用户和组均为root,权限为644
module(load="imjournal" PersistStateInterval="100" StateFile="/var/spool/rsyslog/imjournal.state") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs
template(name="mytest" type="string"
string="<%PRI-TEXT%>\t(%TIMESTAMP%) [%APP-NAME%:%procid%]%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
)
$template FileFormat,"<%PRI-TEXT%> (%TIMESTAMP%) %syslogtag%%procid% %msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$template RizhiyiFormat_APPNAME,"<%pri%>%protocol-version% %timestamp% %HOSTNAME% %app-name% %procid% %msgid% [TOKEN@32473 tag=\"TAG\"] %msg%\n"
if $programname == 'mytest' then {
action(type="mmjsonparse")
action(type="omfile" file="/var/log/mytest.log" template="mytest")
}
说明:此配置文件指定日志输入文件/var/log/mytest.log
四、编译mytest.c(gcc mytest.c -o mytest -lsystemd),日志文件如下:/var/log/mytest.log
<user.emerg> (Feb 16 14:20:44) [mytest:-] [EMERG] 你好,世界!
<user.alert> (Feb 16 14:20:44) [mytest:-] [ALERT] 你好,世界!
<user.crit> (Feb 16 14:20:44) [mytest:-] [CIRT] 你好,世界!
<user.err> (Feb 16 14:20:44) [mytest:-] [ERROR] 你好,世界!
<user.warning> (Feb 16 14:20:44) [mytest:-] [WARNING] 你好,世界!
<user.notice> (Feb 16 14:20:44) [mytest:-] [NOTICE] 你好,世界!
<user.info> (Feb 16 14:20:44) [mytest:-] [INFO] 你好,世界!
<user.debug> (Feb 16 14:20:44) [mytest:-] [DEBUG] 你好,世界!
五、重启Rsyslog服务,日志采集开始工作
service rsyslog restart