分类:
2007-07-17 13:22:43
logging {
[ channel channel_name {
( file path name
[ versions ( number | unlimited ) ]
[ size size spec ]
| syslog syslog_facility
| stderr
| null );
[ severity (critical | error | warning | notice |
info | debug [ level ] | dynamic ); ]
[ print-category yes or no; ]
[ print-severity yes or no; ]
[ print-time yes or no; ]
}; ]
[ category category_name {
channel_name ; [ channel_name ; ... ]
}; ]
...
};
logging 语句为域名服务器配置大量日志选项。它的channel 子句与输出方法相关,格式选项和记录级别(severity levels with a name)被用到category 子句中,来确定哪一个级别和哪些变量被记录。
只有一个logging 语句,它可以定义许多个通道和类别。如果没有logging 语句,日志配置将是:
logging {
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
在子句
所有的日志都输出到一个或多个通道中(channels),如果愿意,可以设置多个通道。 每一个通道定义必须包括一个destination子句,来说明为这个通道选择的信息 是指向一个文件,或者一个专门的日志设备,或者到标准错误输出流,或者丢弃。也可以选择性的规定信息记录级别 (默认是 info级),是否包括一个由named生成的时间,字段的名称或者/和记录级别(默认是什么也没有)。 destination 设置成null使所有的日志信息丢弃,那时,channel就没用了。 destination 设置成file ,使通道指向一个文件,它可以包含限制信息:文件最大允许尺寸和(每次打开文件时检查)最多可以有多少个的文件的版本(文件数)。 如果在log file中使用versions 选项,那么 named 将会通过在要打开文件时改名保存很多备份版本的文件,例如,如果选择保留3 个老版的文件lamers.log ,那么每次打开时,lamers.log.1就会被改名成lamers.log.2,lamers.log.0 改成 lamers.log.1, lamers.log 改成lamers.log.0。也可以设置成versions unlimited,不限制文件的数目。如果size 选项设定了,改名只在文件达到设定的大小时发生,默认也不会保存备份,只对已经存在的日志文件简单进行追加。 size 选项用来限制日志文件无限制的增长。如果文件超过了设定大小,named 进程就会停止向文件写信息,除非它还有一个versions 选项,此时,会进行文件改名(如前段),然后在新文件里继续开始记录。如果没有设置versions 选项,达到设置大小时,记录会停止,直到有其它因素来减少文件大小。默认不设置文件大小最大值。 使用size 和versions 选项的例子: syslog 的目标指向系统日志,它的参数是在syslog man 里面列出的日志设备,著名的设备有kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, authpriv, ftp, local0, local1, local2, local3, local4, local5, local6 和 local7,然而不是所有的设备都被所有的操作系统支持, syslog 如何管理信息,发送到指定的设备等在syslog.conf 的man 中描述。如果你有一个使用很老版本的syslog 的系统,它的openlog()函数只有两个参数,那么这个子句将会被忽略。 severity 子句看起来是syslog重要的内容,除了在这里,他们也可以用在向文件中写入日志。更低记录级别的信息不会被写向通道,更高级别的信息可以被写入通道。 如果使用syslog, syslog.conf 首先确定哪些内容最后通过,例如,定义一个通道设备和记录级别为daemon 和debug,但只记录daemon.warning ,此时,syslog.conf 将只使用info 和notice级别的内容。如果要求记录warning 和更高的内容,那么 syslogd 将记录下所有从通道接收到的信息。 目的为stderr的子句将通道指向系统的标准错误输出,这一般用在服务器前台运行程序,例如,在调试配置文件时。 处于调试模式时,服务器可以提供更多的排错信息。如果服务器的全局排错级别(global debug level)大于0,调试 就会被激活。设置可以通过开始named 时加上-d 和一个正数标志(如 –d 2),或者运行rndc trace来激活。全局排错级别可以设置成0,或者运行(r)ndc notrace,排错模式就会被关闭。 所有服务器的排错信息都有一个级别,更高的级别有更详细的输出,通道需要一个指定的排错记录级别,例如: 将获得3和高于级别3的错误输出,即使排错模式级别小于3。动态记录通道使用服务器的全局级别来决定记录哪些信息。 如果print-time 设置为on,将记录日期和时间。print-time 可以被指明到syslog 通道,当这通常都是没什么用的,因为syslog 本身记录日期和时间。如果需要print-category,那么信息的类别也会被记录,最后,如果 print-severity 设置为on,那么信息的级别也会被记录。print- 前缀的选项可用于任何组合,总是以下面的顺序打印:time, category, severity。下面是全部三个print- 前缀的例子: 28-Feb-2000 15:05:32.863 general: notice: running named有4个预定义的通道,用于默认的记录,他们如何使用参见Section 6.2.10.2. default_debug 通道有特定的属性,它只在服务器的排错级别不是0时产生输出,它通常都写入域名服务的工作目录中的文件named.run 。 因为安全原因,当用 "-u" 命令选项时,named.run 文件只在named 运行改变成一个新的UID时产生,作为根用户时debug 产生的输出会被丢弃。如果你需要得到这些输出,必须运行服务时加上"-g" 选项,并且重定向标准输出到一个文件。 一旦一个通道被定义,它就不能被重新定义,因此你不能把通道定向到别处,但是可以修改默认的日志的记录的类别。 有许多类别,这样可以发送想要的内容,而不要不想要的部分。如果不给通道指明类别(category),那么将使用默认的类别,如果没有定义默认类别,将会用下面的"default default" : 作为例子,假如你想在文件中记录安全事件,但是又想记录默认的日志事件,需要这样做: 丢弃所有的信息,使用null 通道: 下面是可用的类别和描述,以后的版本可能会有更多的类别。 default 默认:默认类别定义那些没有明确设定配置。 general 全部:很多没有归类的东西都在这里。 database 数据库:域名服务器存取区域文件和缓存文件数据库相关的 security 安全:验证和拒绝请求相关。 config 配置:配置文件解析和处理。 resolver 解析器:如递归查询 xfer-in 服务器接收的区域数据 xfer-out 服务器向外发送的区域数据 notify NOTIFY协议 client 处理客户请求。 unmatched 域名需要的信息,很难判断它的类别,或者对于它,没有匹配的view。一个一行的摘要也会记录在客户的类别,这个类别最好发送给文件或者是标准错误输出(stderr),默认它会发送到空通道(null channel)。 network 网络操作. update 动态更新。 queries 请求,使用queries 会记录所有的请求。 dispatch 分发接收到的包到处理信息的服务器组。 dnssec DNSSEC 和TSIG 协议的处理 lame-servers 故障服务器。远端的服务器因为被错误的配置,被BIND 9 解析时发送查询包,因而发现而记录。 delegation-only 代表。日志查询被强迫为NXDOMAIN,在delegation-only 区域或者在hint 或stub 区域中宣告 delegation-onlychannel "an_example_channel" {
file "example.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
channel "specific_debug_level" {
file "foo";
severity debug 3;
};
channel "default_syslog" {
syslog daemon; // send to syslog's daemon
// facility
severity info; // only send priority info
// and higher
};
channel "default_debug" {
file "named.run"; // write to named.run in
// the working directory
// Note: stderr is used instead
// of "named.run"
// if the server is started
// with the '-f' option.
severity dynamic; // log at the server's
// current debug level
};
channel "default_stderr" { // writes to stderr
stderr;
severity info; // only send priority info
// and higher
};
channel "null" {
null; // toss anything sent to
// this channel
};
子句
category "default" { "default_syslog"; "default_debug"; };
channel "my_security_channel" {
file "my_security_file";
severity info;
};
category "security" {
"my_security_channel";
"default_syslog";
"default_debug";
};
category "xfer-out" { "null"; };
category "notify" { "null"; };