получил это в моем 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, поэтому значение будет правильным.

answer

Вы всегда можете распечатать переменную, чтобы увидеть результат. Я думаю, что это связано с синтаксисом, попробуйте использовать containsвместо ==.

Вы можете назначить его переменной, используя шаблоны:

    $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```