在我的 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```