本文档介绍SLS DSL的基础语法。

注释

对语法进行解释说明,以井号(#)开头。示例如下:
#设置默认主题 (放在行首的注释)
e_set("__topic__", "access_log")   #设置默认主题(放在行尾的注释)

换行

函数调用的参数列表可能过长需要换行。如果函数结构中存在逗号(,),也可以直接在逗号(,)的地方进行换行。如果某个字符串过长需要换行,可以使用反斜线(\)换行。示例如下:
e_set("__topic__", "v1",
        "type", "v2",       #使用逗号(,)分隔时,直接换行。
        "length", 100)
e_set("__topic__", "this is a very long long long .........." \  #使用反斜线(\)换行。
                            "......long text")

函数调用方式

  • 基本调用方式
    e_set("abc", "xyz")
    说明 传入和参数名数量匹配的参数值。
  • 基本变参调用
    str_replace(值, old [,new [,count] ]) 
    说明 函数参数中包含如上形式的中括号时,其参数例如newcount比较特殊,属于可选参数,但不能使用命名参数形式调用且只能顺序调用。
    #错误示例
    str_replace("a-b-c", "-", new='%')
    str_replace("a-b-c", "-", new='%', count=1)
    #正确示例
    str_replace("a-b-c", "-", '%')
    str_replace("a-b-c", "-", '%', 2)
  • 命名参数调用方式
    有默认值的参数叫做命名参数,例如e_set("abc", "xyz", mode="fill")中的mode
    • 某些函数的命名参数在特定条件下必须传入值,具体请参见每个函数的参数说明。
    • 传递参数值的方式为:mode=...
    • 有多个命名参数时,对传递顺序没有严格要求,例如e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")e_csv("data", ["f1", "f2", "f3"], quote="|", sep='#')相同。
    说明 在函数中,命名参数始终排在非命名参数的后面。
  • 组合调用
    将函数的返回值作为其他函数参数的取值,需要确保两个数据的数据类型一致。例如:
    e_set("abc", v("xyz"))
    e_set("abc", str_lower(v("xyz")))
  • 变参

    某些函数支持变参传递。v("f1", ....)表示可以传递更多参数,例如v("f1", "f2", "f3")

    传入命名参数时,命名参数需要放在最后,例如v("f1", "f2", "f3", "f4", mode="fill")

操作符

由于SLS DSL标准模式下不支持操作符,所以日志服务提供了对应的函数来实现相同的效果。
场景操作 函数 示例
+ op_add op_add(v("age"), 2)
- op_sub op_sub(v("age"), 2)
* op_mul op_mul(v("size"), 2)
** op_pow op_pow(v("size"), 2)
整除// op_div_floor op_div_floor(v("bytes"), 1024)
取模% op_mod op_mod(v("age"), 10)
取负- op_neg op_neg(v("profit"))
判断存在in op_in op_in(["pass", "ok"], v("result"))
判断不存在not in op_not_in op_not_in(["pass", "ok"], v("result"))
逻辑且and op_and op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))
逻辑或or op_or op_or(op_le(v("age"), 18), op_gt(v("age"), 65))
逻辑否not op_not op_not(op_gt(v("age"), 18))
判断等于== op_eq op_eq(v("name"), "xiao ming")
判断不等于!= op_ne op_ne(v("name"), "xiao ming")
大于> op_gt op_gt(ct_int(v("age")), )
大于等于>= op_ge op_ge(ct_int(v("age")), 18)
小于< op_lt op_lt(ct_int(v("age")), 18)
小于等于<= op_le op_le(ct_int(v("age")), 18)
字符串切片[ ...] op_slice op_slice(v("message"), 0, 20)
例如设置字段