Php rsyslog日志文件开头的空白空间
使用此rsyslog配置:Php rsyslog日志文件开头的空白空间,php,linux,logging,rsyslog,Php,Linux,Logging,Rsyslog,使用此rsyslog配置: $template MYFORMAT,"%msg%\n" if $programname == 'mylog' then { action(type="omfile" file="/var/log/mylog.log" template="MYFORMAT") & stop } 这个PHP脚本: <?php openlog('mylog', LOG_ODELAY, LOG_LOCAL0); syslog
$template MYFORMAT,"%msg%\n"
if $programname == 'mylog' then {
action(type="omfile" file="/var/log/mylog.log" template="MYFORMAT")
& stop
}
这个PHP脚本:
<?php
openlog('mylog', LOG_ODELAY, LOG_LOCAL0);
syslog(LOG_INFO, date('Y-m-d: ') . 'stuff has happened!');
closelog();
修改
$template MYFORMAT,"%msg%\n"
为了
您还可以使用基于正则表达式的属性替换程序,如下所示:
template(name="logfmt" type="string" string="%msg:R,ERE,1,FIELD:^[ \t]*(.*)$--end%\n")
上面的语句从与给定正则表达式(
^[\t]*(.*)$
)匹配的MSG字符串中选取第一个组(前导空格后的所有字符)。请注意,正则表达式语法是POSIX ERE(扩展正则表达式)。根据RFC 3164,syslog标记中冒号之后的任何内容都将被计算为%msg%
字段的一部分,包括任何空格字符。这在各种rsyslog文档/博客文章中都有提及,例如,如果此处没有sp,则在sp文档中也有提及
由于它是%msg%
字段的一部分,有两种方法可以记录没有前导空格的行:
- 将前缀硬编码为每个日志行的一部分,例如:
$template MYFORMAT,"[app]: %msg%\n"
- 去掉前导空格字符。您可以使用
$
符号表示“包含所有内容,直到行尾”。msg字符为1索引,因此从字段2开始
$template MYFORMAT,"%msg:2:$%\n"
是的,rsyslog正在添加空间,因为它位于日期('Y-m-d:')
删除冒号后面的空格,如下所示:
改变
"syslog(LOG_INFO, date('Y-m-d: ') . 'stuff has happened!');"
到
php应该如下所示:
<?php
openlog('mylog', LOG_ODELAY, LOG_LOCAL0);
syslog(LOG_INFO, date('Y-m-d:') . 'stuff has happened!');
closelog();
为什么要这样修改?也许可以添加一些解释,并提供文档支持?显示不同的结果是什么?从位置2到2048的子字符串。我喜欢。效果很好,速度也很快。
"syslog(LOG_INFO, date('Y-m-d: ') . 'stuff has happened!');"
syslog(LOG_INFO, date('Y-m-d:') . 'stuff has happened!');"
<?php
openlog('mylog', LOG_ODELAY, LOG_LOCAL0);
syslog(LOG_INFO, date('Y-m-d:') . 'stuff has happened!');
closelog();