Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php rsyslog日志文件开头的空白空间_Php_Linux_Logging_Rsyslog - Fatal编程技术网

Php 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

使用此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(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();