日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹SLS DSL的基礎(chǔ)語法。

注釋

對(duì)語法進(jìn)行解釋說明,需要以井號(hào)(#)開頭。示例如下:

#設(shè)置日志的默認(rèn)主題(放在行首的注釋)。
e_set("__topic__", "access_log")   #設(shè)置日志的默認(rèn)主題(放在行尾的注釋)。

換行

函數(shù)調(diào)用的參數(shù)列表過長時(shí),需要換行。

  • 如果函數(shù)結(jié)構(gòu)中存在半角逗號(hào)(,),可以直接在半角逗號(hào)(,)的地方進(jìn)行換行。

  • 如果某個(gè)字符串過長需要換行,可以使用反斜線(\)換行。

示例如下:

e_set("__topic__", "v1",
        "type", "v2",       #使用半角逗號(hào)(,)分隔時(shí),直接換行。
        "length", 100)
e_set("__topic__", "this is a very long long long .........." \
                            "......long text")  #使用反斜線(\)換行。

函數(shù)調(diào)用方式

  • 基本調(diào)用方式

    e_set("abc", "xyz")
    說明

    編寫數(shù)據(jù)加工語句時(shí),傳入?yún)?shù)類型和數(shù)量需要與函數(shù)語法匹配。

  • 基本變參調(diào)用

    str_replace(值, old [,new [,count] ]) 
    說明

    函數(shù)參數(shù)中包含如上形式的方括號(hào)([])時(shí),其參數(shù)例如newcount比較特殊,屬于可選參數(shù),但不能使用命名參數(shù)形式調(diào)用且只能順序調(diào)用。

    #錯(cuò)誤示例
    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)
  • 命名參數(shù)調(diào)用方式

    有默認(rèn)值的參數(shù)叫做命名參數(shù),例如e_set("abc", "xyz", mode="fill")中的mode

    • 某些函數(shù)的命名參數(shù)在特定條件下必須傳入值,具體請(qǐng)參見每個(gè)函數(shù)的參數(shù)說明。

    • 傳遞參數(shù)值的方式為:mode=...。

    • 有多個(gè)命名參數(shù)時(shí),對(duì)傳遞順序沒有嚴(yán)格要求,例如e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|")e_csv("data", ["f1", "f2", "f3"], quote="|", sep='#')相同。

    說明

    在函數(shù)中,命名參數(shù)始終排在非命名參數(shù)的后面。

  • 組合調(diào)用

    將函數(shù)的返回值作為其他函數(shù)參數(shù)的取值,需要確保兩個(gè)數(shù)據(jù)的數(shù)據(jù)類型一致。例如:

    e_set("abc", v("xyz"))
    e_set("abc", str_lower(v("xyz")))
  • 變參

    某些函數(shù)支持變參傳遞。v("f1", ....)表示可以傳遞更多參數(shù),例如v("f1", "f2", "f3")

    傳入命名參數(shù)時(shí),命名參數(shù)需要放在最后,例如v("f1", "f2", "f3", "f4", mode="fill")

操作符

  • 比較運(yùn)算符

    SLS DSL標(biāo)準(zhǔn)模式支持大小比較運(yùn)算符,包括>、<、>=、<=、!=、==。您也可以使用日志服務(wù)提供的比較運(yùn)算函數(shù)來實(shí)現(xiàn)相同效果。

    • 直接使用比較運(yùn)算符

      #下面是一些使用樣例,當(dāng)大小比較結(jié)果為True時(shí),丟棄日志。
      e_if(3 > 2, DROP)       # 3大于2時(shí),丟棄。
      e_if(3 < 2, DROP)       # 3小于2時(shí),丟棄。
      e_if(3 >= 2, DROP)      # 3大于等于2時(shí),丟棄。
      e_if(3 <= 2, DROP)      # 3小于等于2時(shí),丟棄。
      e_if(3 == 2, DROP)      # 3等于2時(shí),丟棄。
      e_if(3 != 2, DROP)      # 3不等于2時(shí),丟棄。
      e_if(1 < 2 < 3, DROP)   # 2大于1且2小于3時(shí),丟棄。
      e_if(0 < ct_int(v('x')) < 100, DROP) # 字段x的值大于0且小于100時(shí),丟棄。
    • 使用日志服務(wù)提供的比較運(yùn)算函數(shù)

      場(chǎng)景操作

      函數(shù)

      示例

      判斷等于==

      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)

  • 邏輯運(yùn)算符

    SLS DSL標(biāo)準(zhǔn)模式支持邏輯運(yùn)算符,包括and、or和not。您也可以使用日志服務(wù)提供的邏輯運(yùn)算函數(shù)來實(shí)現(xiàn)相同效果。

    • 直接使用邏輯運(yùn)算符

      #下面是一些使用樣例,當(dāng)邏輯運(yùn)算的結(jié)果為True時(shí),丟棄日志。
      e_if(True and False, DROP)     # 結(jié)果為False
      e_if(True or False, DROP)      # 結(jié)果為True
      e_if(True and not False, DROP) # 結(jié)果為True
      e_if(3 > 2 and 1 < 3, DROP)    # 結(jié)果為True
      e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # 字段x的值大于100或者字段y的值小于100
    • 使用日志服務(wù)提供的邏輯運(yùn)算函數(shù)

      場(chǎng)景操作

      函數(shù)

      示例

      邏輯且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))

  • 其他操作符

    由于SLS DSL標(biāo)準(zhǔn)模式下不直接支持以下操作符。日志服務(wù)提供對(duì)應(yīng)的函數(shù)來實(shí)現(xiàn)相同的效果。

    場(chǎng)景操作

    函數(shù)

    示例

    +

    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)

    取負(fù)-

    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"))

    字符串切片[ ...]

    op_slice

    op_slice(v("message"), 0, 20)

    例如設(shè)置字段a的值為3600*6

    # * 
    e_set("a", 3600 * 6)           #非法
    e_set("a", op_mul(3600, 6))    #合法
    
    # /
    e_set("bytes_kb", v("bytes") / 1024)                 #非法
    e_set("bytes_kb", op_div_floor(v("bytes"), 1024))    #合法

真假判斷

有些函數(shù)會(huì)接收條件,根據(jù)條件的值來決定事件的邏輯。條件可以是一個(gè)固定值或者表達(dá)式返回的值。

SLS DSL支持對(duì)任意類型值進(jìn)行判斷,如下表格是各種類型值的真假條件。

數(shù)據(jù)類型

True的條件

False的條件

布爾

True,true

False,false

None

總是False

數(shù)值

非0或非0.0

0或0.0

字符串

非空

空串

字節(jié)

非空

空字節(jié)

元組

非空

空元組

列表

非空

空列表

字典

非空

空字典

表格

存在即為True

空對(duì)象(None)

日期時(shí)間

存在即為True

空對(duì)象(None)

如下為丟棄事件示例:

e_if(True, DROP)                     #輸入True時(shí),丟棄。
e_if(1, DROP)                        #輸入1時(shí),丟棄。
e_if(v("abc"), DROP)                 #存在字段abc且字段不為空時(shí),丟棄。
e_if(str_isdigit(v("abc")), DROP)    #存在字段abc且字段的內(nèi)容都是數(shù)字時(shí),丟棄。