NXLog中文文档(4):开发语言

   NXlog的核心包含了一些内置的语法。它能够完成一些更加复杂的日志处理功能。当NXLog启动的时候,内置的语言就会被预编译,如果程序出错了,NXLog会提示错误信息的。

 

NXLog语言能在2个地方用上

  • 指令中的变量

  • Exec中执行相应程序

 

NXLog语言不包含异常捕获程序,如果出错了,会在NXLog的日志中打印出来,如果在处理的时候出错了,那很可能就会把日志丢掉了

 

类型

NXLog语言是强类型程序,NXLog 语言只支持简单类型,复杂的类型例如HashMap这种是不支持的

Unknown 未知类型
Boolean 可用TRUE、FALSE、undefined
Integer 整形
String 字符串,undefined字符串和空字符串相等,一个字符串最多放1M,编译时就决定了的
Datetime 时间戳
IPv4 Address IP地址
IPv6 Address IP地址
正则表达式 只能用=~ 或者!~操作符
Binary 可用保存bytes数组
Variadic arguments 变长参数

 

表达式

和常规的开发语言差不多,变量用$xxx这样声明,一些示例:

    条件非

1
if not $success log_error("failure");

    正则匹配

1
if $Message =~ /^Test message/ log_info("matched");

    使用/g进行全局替换

1
if $SourceName =~ s/\s/_/g log_info("removed all whitespace in SourceName");

    使用/s代替.*

1
if $Message =~ /failure/s log_info("failure string present in the message");

    /m能代替正则的^和$

    /i能忽略大小写匹配

 

静态计数器

NXLog有一些静态计数器,可以用create_stat来调用

1
2
3
4
5
6
7
8
if $Message =~ /login failure/
{
   # create will no do anything if the counter already exists
   create_stat('login_failures''RATE'45, $EventTime);
   add_stat('login_failures'1, $EventTime);
   if get_stat('login_failures', $EventTime) >= 3
      log_warning("3 or more login failures detected within 45 seconds");
}
COUNT 累计计数器
COUNTMIN 计算给定变量的最小值
COUNTMAX 计算给定变量的最大值
AVG 计算给定变量的平均值
AVGMIN 计算给定变量的最小值平均值的
AVGMAX 计算给定变量的最小值平均值的
RATE 指定时间间隔的值
RATEMIN 指定时间间隔的最小值
RATEMAX 指定时间间隔的最大值
GRAD 计算在指定的时间间隔上的计数器的速率的变化,
GRADMIN 计算在指定的时间间隔上的计数器的速率的最大值
GRADMAX 计算在指定的时间间隔上的计数器的速率的最小值

一些内置函数

string lc(string arg); 把字符串转成小写
string uc(string arg); 把字符串转成大写
datetime now(); 当前时间
string type(unknown arg); 返回变量类型,"boolean", "integer", "string", "datetime", "ip4addr", "ip6addr", "regexp", "binary"
integer microsecond(datetime datetime); 转为微秒
integer second(datetime datetime); 转为秒
integer minute(datetime datetime); 转为分钟
integer hour(datetime datetime) 转为小时
integer day(datetime datetime) 转为天
integer month(datetime datetime) 转为月
integer year(datetime datetime) 转为年
datetime fix_year(datetime datetime); 设置当前时间的年,BSD syslog或者cisco timestamp会把年丢掉的
integer dayofweek(datetime datetime) 返回一周的第几天
integer dayofyear(datetime datetime) 返回一年的第几天
string string(unknown arg); 转为string
integer integer(unknown arg) 转为integer
datetime datetime(integer arg) 转为datetime
datetime parsedate(string arg) 转为date,例:$EventTime = parsedate($somestring); if not defined($EventTime) $EventTime = now();
string strftime(datetime datetime, string fmt); 格式化字符串
datetime strptime(string input, string fmt); 格式化日期
string hostname(); 获取主机名
string hostname_fqdn(); 获取主机名
ip4addr host_ip(); 获取主机IP
ip4addr host_ip(integer nth); 获取非本地回路IP
unknown get_var(string varname); 获取变量
integer get_stat(string statname); 获取计数器的值
integer get_stat(string statname, datetime time); 获取计数器的值,如果不存在就把time设进去
ip4addr ip4addr(integer arg) 转为ipv4类型
ip4addr ip4addr(integer arg, boolean ntoa); 转为IPV4类型,ntoa代表是否反转
string substr(string src, integer from); 字符串截取
string substr(string src, integer from, integer to); 字符串截取
string replace(string subject, string src, string dst); 字符串替换
string replace(string subject, string src, string dst, integer count); 字符串替换
integer size(string str); 获取字符串长度
boolean dropped(); 如果当前事件drop了,返回True

 

内置处理函数

 

log_debug(unknown arg, varargs args); 打印日志,级别为Debug
debug(unknown arg, varargs args); 打印日志,级别为Debug
log_info(unknown arg, varargs args); 打印日志,级别为Info
log_warning(unknown arg, varargs args); 打印日志,级别为Warning
log_error(unknown arg, varargs args); 打印日志,级别为Error
delete(unknown arg); 删除日志里面的指定字段
create_var(string varname); 创建模块变量
create_var(string varname, integer lifetime); 创建模块变量并指定生存周期
create_var(string varname, datetime expiry); 创建模块变量并指定生存周期
delete_var(string varname); 删除变量
set_var(string varname, unknown value); 设置变量
create_stat(string statname, string type); 创建计数器
create_stat(string statname, string type, integer interval); 创建计数器
create_stat(string statname, string type, integer interval, datetime time); 创建计数器
create_stat(string statname, string type, integer interval, datetime time, integer lifetime); 创建计数器
create_stat(string statname, string type, integer interval, datetime time, datetime expiry); 创建计数器
add_stat(string statname, integer value); 添加计数器值
add_stat(string statname, integer value, datetime time); 添加计数器值
sleep(integer interval); 休眠指定时长
drop(); 放弃处理当前日志
rename_field(string old, string new); 修改日志字段名称
reroute(string routename); 动态指定路由
add_to_route(string routename); 复制一份日志动态指定路由,不影响当前日志流
 
posted @ 2016-04-18 19:27  XGogo  阅读(935)  评论(0)    收藏  举报