需求:

     收集现有Toc production日志到log server;
     Toc production日志定义facility为LOCAL0;
     收集到的日志每小时切割一次;
     日志头为TC:的日志,存放路径为:/data-nfs/syslog/TC-production/log.year-month-day-hour,保留原有日志换行格式,并且去掉日志首字符“TC:”,保存其余部分的日志消息;

     日志头为TCBeta:的日志,存放路径为:/data-nfs/syslog/TC-beta/log.year-month-day-hour,保留原有日志换行格式,并且去掉日志首字符“TCBeta:”,保存其余部分的日志消息;


修改配置文件

#vi /etc/rsyslog.conf
$EscapeControlCharactersOnReceive off      #关闭rsyslog默认转译ASCII<32的所有怪异字符,包括换行符等
$template tc_pro_log,"/data-nfs/syslog/TC-production/log.%$year%-%$month%-%$day%-%$hour%"       #定义TC:日志存放路径
$template tc_beta_log,"/data-nfs/syslog/TC-beta/log.%$year%-%$month%-%$day%-%$hour%"            #定义TCBeta:日志存放路径
$template tocFormat,"%msg%\n"                  #定义toc日志format
:rawmsg,contains,"TC:"  -?tc_pro_log;tocFormat                 #接受TC:日志,并应用tocFormat格式
:rawmsg,contains,"TCBeta:"      -?tc_beta_log;tocFormat        #接受TCBeta:日志,并应用tocFormat格式



重启rsyslog服务

#/etc/init.d/rsyslog restart



收集到的日志出现“#12”错误提示,日志打到本地就不会有这种现象,如下:

Mar 28 20:11:59 telemachos root: ERROR 'EXCEPTION'#012Traceback (most recent call last):#012  File "./test.py", line 22, in <module>#012    foo()#012  File "./test.py", line 13, in foo#012    bar()#012  File "./test.py", line 16, in bar#012    bla()#012  File "./test.py", line 19, in bla#012    raise Exception("EXCEPTION!")#012Exception: EXCEPTION!


原因:默认情况下,rsyslog会转译所有怪异字符(ASCII<32),包括换行符和标签等
解决办法:
     在rsyslog.conf配置文件中,添加:

$EscapeControlCharactersOnReceive off


参考:http://stackoverflow.com/questions/5463992/multiline-log-records-in-syslog