带有 $programname 的 Rsyslog 表达式不起作用

带有 $programname 的 Rsyslog 表达式不起作用

在我的 rsysconf 中得到这个:

    $template TemplateLog,"%msg%\n"   
    $template DynamicLog,"%msg%\n"                                                                                                                            
    $template DynamicFile,"/var/log/%PROGRAMNAME%.log"    
    if ($programname == "test") then {local3.=debug    -/var/log/path.log;TemplateLog}                                                                  
    local3.=debug    -?DynamicFile;DynamicLog                                                                                                                 
    & stop   

如果我把 if 语句去掉,它工作得很好。但我需要让 if 语句工作。这有什么问题?谢谢你的建议。

我尝试按照其中一个答案中的建议将 == 更改为 contains ,但这没有帮助。

$programname 是否包含与 %PROGRAMNAME% 相同的信息?这可能会导致问题,也许...

因此根据答案,我做了以下操作:

$template TemplateLog,"%msg%\n"   
$template DynamicLog,"%msg%\n"                                                                                                                            
$template DynamicFile,"/var/log/%PROGRAMNAME%.log"           
template(name="pname" type="string" string="%PROGRAMNAME%")                                                                                               
set $!xyz = exec_template("pname");     
if ($!xyz contains'test') then {local3.=debug    -/var/log/path.log;TemplateLog}
local3.=debug    -?DynamicFile;DynamicLog                                                                                                                 
& stop   

但不幸的是,这段代码也不起作用。如果我删除 if 语句,第二个 DynamicFile 会保存到 test.log 中,因此该值是正确的。

答案1

您始终可以打印变量以查看输出。我认为这与语法有关,请尝试使用contains而不是==

您可以使用模板将其分配给 var:

    $template DynamicLog,"%msg%\n"                                                                                                                            
    $template DynamicFile,"/var/log/%PROGRAMNAME%.log"    
    template(name="pname" type="string" string="%PROGRAMNAME%")
    set $!xyz = exec_template("pname");
    if ($!xyz contains 'test') then {local3.=debug    -/var/log/path.log;TemplateLog}                                                                 
    local3.=debug    -?DynamicFile;DynamicLog                                                                                                                 
    & stop```

相关内容