模板是rsyslog的关键功能,它们允许指定用户可能需要的任何格式。
它们也可以用于动态文件生成, 每个output 在rsyslog 使用模板--
数据库写期望它的模板是一个正确的SQL语句。
因此这个是高度自定义的, 你可能会问 所有这些事如何工作的当没有模板被指定
答案是简单的,尽管模板是兼容stock syslogd 格式 被硬编码到rsyslogd.
因此如果没有模板被指定,我们使用一个硬代码的模板
$template tocFormat,"%msg%
"
#$template tocFormat,"%syslogtag%,%msg%
"
$template zjzc-flow01,"/data01/applog_backup/zjzc_log/zj-flow01-catalina.out.%$year%-%$month%-%$day%" #定义TC:日志存放路径
模板是通过template()语句指定, 可以通过legacy 语句指定
模板处理:
由于缺乏标准的关于日志格式,当一个模板是特定的 它假设包含HEADER,定义在RFC5424
假设,如果MSG 字段是设置“this:is a message” 没有HOSTNAME,也没有指定TAG,分析器会分割消息为:
TAG:this:
MSG:is a message
The template() statement 模板语句
template() 语句是用于定义模板,注意他是一个静态声明,
这意味着所有模板是被定义当rsyslog 读取配置文件, 因此 模板是不被if语句或者配置嵌套的影响
基本的模板语句的结构是如下:
template(parameters)
除了这个简单的语法,list 模板(下面描述)支持扩展语法:
template(parameters) { list-descriptions }
每个模板有一个参数名字, 指定了模板的名字,和一个参数类型,
指定了模板类型。
名字参数必须是唯一的,如果不是 行为是不可预知的。
类型参数指定不同的模板类型,不同的类型简单的启动不同的方式来指定模板内容。
模板类型不影响 一个ouput 插件可以处理它。
创建omfile 动态文件名:
模板可以用于生成actions 使用动态文件名。
比如,你想要分割syslog 消息从不同的主机到不同的文件(一个主机一个文件),你可以定义下面的模板:
template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")
Legacy example:
$template DynFile,"/var/log/system-%HOSTNAME%.log"
$template zjzc-flow01,"/data01/applog_backup/zjzc_log/zj-flow01-catalina.out.%$year%-%$month%-%$day%"
legacy format:
在rsyslog v6版本之前,你需要使用 $template 语句来配置模板。
它们提供等价于 字符串和基于插件的模板。
legacy 语法在rsyslog v7版本继续工作,但是我们推荐避免legacy 格式用于新的配置文件。
Legacy 和当前配置语句可以共存在相同的配置文件
The general format is
$template name,param[,options]
name 表示模板名字,param 是一个单独的参数 指定模板的内存
字符串:
这个参数 是相同的字符串 指定当前格式 你指定的在字符串参数,例如:
$template strtpl,"PRI: %pri%, MSG: %msg%
"
Legacy String-based Template Samples
这个章节 提供一些默认的模板以legacy 格式, 是用于 rsyslog v6前的版本。
注意 这个格式是仍旧被支持的,因此没有必须要升级存在的配置。
然而, 它是强烈推荐legacy 结构是不在被使用的当 使用新的模板。
注意 每个 $template statement 是在一个单独的行