Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1794071
  • 博文数量: 184
  • 博客积分: 10122
  • 博客等级: 上将
  • 技术积分: 5566
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-08 12:32
文章存档

2011年(1)

2008年(183)

我的朋友

分类: LINUX

2008-03-03 21:35:54

3.7. Template objects

The syslog-ng application allows you to define message templates, and reference them from every object that can use a template. Templates can be used to create standard message formats or filenames. Templates can reference one or more macros (e.g., date, the hostname, etc.). See for a list of available macros.

# 注释 :syslog-ng 允许你定义消息格式的模板,然后你可以在每个对象内部引用它。模版可以用于创建标准消息格式或者文件名。

# 模板还可以引用一个后者多个宏(例如日期、主机名,也就是预先定义的变量)。


Template objects have a single option called template_escape, which is turned on by default (template_escape(yes)). This causes syslog-ng to escape the ' and " characters from the messages. This behavior might cause problems when the messages are passed to a an application that cannot handle escaped characters properly. In such case, disable the escape feature (template_escape(no)).

# 注释 :模板对象只有1个选项,名为 template_esscape ,默认是启用的(yes)。

# 作用是让  syslog-ng 将消息中的单引号和双引号进行转义

[Example] Example 3.8. Using templates

The following template (t_demo_filetemplate) adds the date of the message and the name of the host sending the message to the beginning of the message text. The template is then used in a file destination: messages sent to this destination (d_file) will use the message format defined in the template.

# 注释 :下面的模版增加消息的时间和主机名到消息的头部。然后在 destination d_file 中引用它。

# 补充 :ISODATE、HOST、MSG 都是 宏,要引用它们,用 $ 的格式。

# 补充 :要在一个 destination 中引用某个模板,用 template()格式

# 补充 :如果把 template ()用于 file ()之内,表示对该文件采用该模版。所以不同的文件可以采用不同的模版

template t_demo_filetemplate { 
template("$ISODATE $HOST $MSG\n"); template_escape(no); };
destination d_file {
file("/var/log/messages" template(t_demo_filetemplate)); };

Templates can also be used inline, if they are used only at a single location. The following destination is equivalent with the previous example:

# 注释 :template()也可以单独一行,表示对所有的文件都起作用

# 问题 :可以在一个 log 语句中为不同的 file()使用不同的模板吗?

destination d_file { 
file("/var/log/messages"
template("$ISODATE $HOST $MSG\n"; template_escape(no))); };

[Example] Example 3.9. Feeding messages into an SQL database

In order to record the log messages in a database, the messages have to be formatted in a way recognized by the database application. This can be accomplished using templates and macros. The following template creates an SQL INSERT command formatted to fit a database that stores the hostname, priority, date, application name, and message parts of the log messages in separate fields.

# 注释 :如果是要把日志写入数据库,还必须把消息格式化为一个可以被数据库应用程序所识别的格式。

# 这时可以使用下面的格式,实际上是一个 sql 的 insert 语句

template t_sql { 
template("INSERT INTO logs (host, pri, datetime, program, msg)
VALUES (
'$HOST', '$PRI', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG');\n")
};

The Premium Edition of syslog-ng natively supports logging into a database. See for details.

阅读(1692) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~