Templates 模板:

Templates 模板:

########################温金
$template wj-flow01,"/data01/applog_backup/winfae_log/wj-flow01-catalina.out.%$year%-%$month%-%$day%"       #定义TC:日志存放路径
$template wj-flow02,"/data01/applog_backup/winfae_log/wj-flow02-catalina.out.%$year%-%$month%-%$day%"       #定义TC:日志存放路径

:syslogtag,isequal,"wj-flow01"  -?wj-flow01;tocFormat
模板是rsyslog 的关键特征,它们允许指定任何用户需要的格式。

它们也可以用于动态文件名称生成, 每个output 在rsyslog 使用模板 - 使用真实的文件,

用户消息等等。


数据库写期望它的模板可以被一个合适的SQL语句,这个是高度自定义的。

你可以告诉要求左右这些工作当没有指定模板的时候)

答案是简单的,尽管模板兼容stock syslogd 格式是硬编码到rsyslogd.

这样如果没有模板指定,我们使用那些硬编码模板中的一个


Templates  是通过template() 语句指定,它们也可以通过$template legacy statements. 指定



注意: 模板的关键元素是rsyslog 属性

The template() statement


template() 语句是用于定义模板, 注意他是一个静态的语句,那意味着所有的模板是被定义当rsyslog 读取config文件的时候


因此,模板不会受到模板或者配置嵌套的影响

template(parameters)


除了这个简单的语法, 列表模板(下面有描述) 支持一个扩展的语法:

template(parameters) { list-descriptions }

每个模板有一个参数名称, 指定模板的类型。

名字参数必须是唯一的, 行为是无法预测的 如果它不是。


类型参数 指定不同的模板类型,不同的模板类型简单的让不同的方式来指定模板内容。

模板类型不会影响一个输出插件可用用它做什么。



    list
    subtree
    string
    plugin

The various types are described below.


list:

在这种情况下, 模板是通过一个常量和变量语句的列表生成的。

那些安装模板说明在大括号里。


这种类型也主要是使用结构输出,像ommongodb


然而, 它也很好的和基于文本的输出工作,我们推荐使用这个模式

如果 更加复杂的属性体检。在这种情况下, 基于列表的模板语法是更加清晰的相比简单的基于字符串的


列表模板包含列表Header(type="list") 是通过一个常量和属性语句,

在大括号里表示模板语句, 正如名字所说,常量语句描述常量文本和属性描述属性访问。

有很多选项来属性,下面有描述。很多那些选项是用于提取特定属性的内存或者来修改文本得到

template(name="tpl1" type="list") {
    constant(value="Syslog MSG is: '")
    property(name="msg")
    constant(value="', ")
    property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
    constant(value="
")
    }

常量语句:


这个提供了一种方式来指定常量文本。文本是用于字面上的,

它主要是用于基于文本的输出,因此 一些常量文本可以被包含

比如,如果一个复杂的模板是创建用于文件输出,一个通常需要完成它通过一个新行,

可以通过一个常量语句介绍。

template(name="outfmt" type="list") {
    property(name="$!usr!msgnum")
    constant(value="
")
}


下面的转义序列被认为是在常量文本中:

1. \  简单的反斜杠

2.
 

注意 如果一个不支持的字符跟着一个反斜杠,这是对待为一个错误,行为是不可预测的


避免 文本模板的使用 对于基于文本输出和结构使用,如果你要支持一些常量文本

例如 mongodb,你必须包含一个outname,这里可以看到:

template(name="outfmt" type="list") {
    property(name="$!usr!msgnum")
    constant(value="
" outname="IWantThisInMyDB")
}

常量语句支持以下参数:

值 常量值来使用

outname  输出域名字



属性声明 


此语句是用于包含属性文件,它可以访问所有的属性。

选项允许来指定选择属性的部分或者修改它 它支持下面的参数:


传统格式:


在rsyslog v6之前, 你需要使用$template 语句来配置模板,

它们提供了等价于字符和基于插件的模板,传统的语句在V7继续可以用,然而我们推荐避免传统格式用于新的写入到配置文件,

传统的和当前配置语句可以共存于相同的配置文件

The general format is

$template name,param[,options]

########################温金
$template wj-flow01,"/data01/applog_backup/winfae_log/wj-flow01-catalina.out.%$year%-%$month%-%$day%"       #定义TC:日志存放路径



"name" 是模板名字和"param" 是一个简单的参数 指定模板内容,选项部分是用于设置模板选项

字符串:

参数是同样的字符串 使用当前样式的格式你指定在字符串参数

$template strtpl,"PRI: %pri%, MSG: %msg%
"


$template tocFormat,"%msg%
"


注意 list 模板 是不可用的在传统格式里, 因此你需要使用复杂属性替换结构来做复杂的事情


保留模板名字:

模板名字以 “RSYSLOG_” 开头的是被保留用于rsyslog使用,

不要使用它们,否则 你可能受到一个冲突( 不可预知的行为)

传统的基于字符串的模板例子:


这个章节提供一些默认模板在 legacy format, 用于rsyslog v6之前的版本。

注意 这个格式仍旧被支持,因此没有必要硬升级现在的配置。

然而,它是强力推荐 传统的结构是不被使用了当制作新的模板。

注意每个 $template statement 是在一个单独的行,但是大概跨越多行来显示通过你的浏览器。

行是通过空行分隔,记录, 换行是重要的在 legacy format.


$template FileFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
"

$template TraditionalFileFormat,"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
"

$template ForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"

$template TraditionalForwardFormat,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"

$template StdSQLFormat,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', 
%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL``

原文地址:https://www.cnblogs.com/hzcya1995/p/13350202.html