Рейтинг:0

Выражение Rsyslog с $programname не работает

флаг ng

получил это в моем rsysconf:

    $templateTemplateLog,"%msg%\n"   
    $template DynamicLog,"%msg%\n"                                                                                                                            
    $template DynamicFile,"/var/log/%PROGRAMNAME%.log"    
    если ($programname == "test"), то {local3.=debug -/var/log/path.log;TemplateLog}                                                                  
    local3.=debug -?DynamicFile;DynamicLog                                                                                                                 
    & останавливаться   

Если я уберу оператор if, он будет работать хорошо. Но мне нужно, чтобы оператор if работал. Что в этом плохого? Спасибо за совет.

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

Содержит ли $programname ту же информацию, что и %PROGRAMNAME%? Это может быть причиной проблемы, может быть...

Итак, согласно ответу, я сделал это:

$templateTemplateLog,"%msg%\n"   
$template DynamicLog,"%msg%\n"                                                                                                                            
$template DynamicFile,"/var/log/%PROGRAMNAME%.log"           
шаблон (имя = «pname», тип = «строка», строка = «% PROGRAMNAME%»)                                                                                               
установить $!xyz = exec_template("pname");     
если ($!xyz содержит "тест"), то {local3.=debug -/var/log/path.log;TemplateLog}
local3.=debug -?DynamicFile;DynamicLog                                                                                                                 
& останавливаться   

Но, к сожалению, этот код тоже не работает. Если я удалю оператор if, второй DynamicFile будет сохранен в test.log, поэтому значение будет правильным.

Рейтинг:0
флаг ng

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

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

    $template DynamicLog,"%msg%\n"                                                                                                                            
    $template DynamicFile,"/var/log/%PROGRAMNAME%.log"    
    шаблон (имя = «pname», тип = «строка», строка = «% PROGRAMNAME%»)
    установить $!xyz = exec_template("pname");
    если ($!xyz содержит 'test'), то {local3.=debug -/var/log/path.log;TemplateLog}                                                                 
    local3.=debug -?DynamicFile;DynamicLog                                                                                                                 
    & остановить```
флаг ng
Нет, это не помогает. Я почти уверен, что это что-то с синтаксисом, хотя я этого не вижу, так как я действительно не в этом
флаг ng
Как вы его печатаете?
Zhivko Zhelev avatar
флаг ng
Итак, ```$programname``` и ```%PROGRAMNAME%``` не одно и то же, вы не можете просто использовать «programname» как var.
Zhivko Zhelev avatar
флаг ng
Так что, вероятно, синтаксис ```if``` в порядке, но вы можете сделать это с помощью шаблона (я отредактирую свой ответ)
флаг ng
Спасибо ! Я скорректировал ответ, чтобы он соответствовал текущему состоянию, но, к сожалению, он все еще не работает :(

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.