正则表达式

  • 正则表达式工作模式-贪婪模式,尽可能匹配可能长的匹配字符,所有*匹配所有,匹配短用 \? 或者 .?
  • 元字符:不代表字符本身的含义
      代码              说明
        .            匹配除换行符以外的任意字符
        \w           匹配字母或数字或下划线或汉字
        \s           匹配任意的空白符
        \d           匹配数字
        \b           匹配单词的开始或结束
        ^            匹配行的开始
        $           匹配行的结束
  • 常用反义元字符

      代码                   说明
      \W         匹配任意不是字母,数字,下划线,汉字的字符
      \S         匹配任意不是空白符的字符
      \D         匹配任意非数字的字符
      \B         匹配不是单词开头或结束的位置
      [^x]        匹配除了x以外的任意字符
      [^aeiou]         匹配除了aeiou这几个字母以外的任意字符
  • 常用重复限定符

     代码              说明
     *            重复零次或更多次
     +            重复一次或更多次
     ?            重复零次或一次
    {n}            重复n次
    {n,}            重复n次或更多次
    {n,m}            重复n到m次
  • 字符匹配

        .:匹配任意单个字符:   grep 'r..t' 就可以匹配:root,rlut,,  'r.t':可以匹配:rat,rlt等
    []:指定范围内的任意单个字符
    [0-9],[[:digit:]]
    [a-z],[[:lower:]]
    [A-Z],[[:upper:]]
    [:alpha:] ##所有的大小写字母
    [:alnum:] ##所有数字
    [:space:] ##所有空格
    [:punct:] ##所有标点
    [^]:指定范围外的任意单个字符
  • 数字匹配

        *: 任意字数:例子:x*y,xxy,xy,y:值得是前面的x出现0此或者多次。上面的可以表上 grep 'r*t'  t,rrt,xrt
        .*:匹配任意长度的任意字符。
        \?: 用来匹配其前面的字符 0次或者1次。(很显然*比\?是最多的)
        x\?y:xy,y,xxy(xxy只能匹配最后一个xy)

         \{m\}: 匹配m次。 \{m,n\}:匹配至少m次,最多n次。\{m,\}:至少m次。 \{0,n\}:至多n次

         x\{2\}y:表上x出现两次:xxy.    x\{2,6\}y:至少2次到6次:  xxxy,xxxxxy,
  • 位置锚定
^:锚定行首。所以这个符号必须出现在行首。
$:锚定行尾。
$:空白行。

\<char:锚定词首,或者\b:char: (相对于单词)
(env)[root@www devops]# grep '^Rr][^[:punct:]]*[t7]' /etc/passwd  ###表示以r开头的单词

char\>:锚定词尾,或者char\b
  • 分组

  • logstash 常见日志正则–grok格式

logstash提供一系列的常见正则表达式 也支持自己的grok 表达式

grok 表达式格式
%{PATTERN_NAME:capture_name:data_type}

(?(\S+|\s+)+)
(?pattern)
#()表示要取出来的值
#?为值取的名字
#pattern表达式 用于描述值的格式


grok默认调用的表达式是:logstash-5.0.0/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns 这个路径下。

常见的时间戳
%{TIMESTAMP_ISO8601:date}   yyyy-MM-dd HH:mm:ss,SSS Z
常见的日志等级
%{LOGLEVEL:level}   

([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)


线程名字
%{NOTSPACE:thread}   

常见的host
%{IPORHOST:clientip}    (?:%{IP}|%{HOSTNAME})

任意长度字符串
(\S+|\s+)+

  • log4j
#Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: 
#%m 输出代码中指定的消息 
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
#%r 输出自应用启动到输出该log信息耗费的毫秒数 
#%c 输出所属的类目,通常就是所在类的全名 
#%t 输出产生该日志事件的线程名 
#%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式 
#    如:%d{yyyy年MM月dd日HH:mm:ss,SSS},输出类似:2012年01月05日 22:10:28,921 
#%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 
#    如:Testlog.main(TestLog.java:10) 
#%F 输出日志消息产生时所在的文件名称 
#%L 输出代码中的行号 
#%x 输出和当前线程相关联的NDC(嵌套诊断环境),像javaservlets多客户多线程的应用中 
#%% 输出一个"%"字符 
# 
# 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 
#  %5c: 输出category名称,最小宽度是5,category<5,默认的情况下右对齐 
#  %-5c:输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格 
#  %.5c:输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格 
#  %20.30c:category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉

log4j.properties中是这样的:
log4j.appender.stdout.layout.ConversionPattern=%d %p %m%n
并且,我的日志输出类中拼凑的格式是这样的:
logger.info(ip+"/"+username +"/" + method +"/" + requestUrl)
所以最后打印出来的日志是这样的:
2016-12-01 11:18:05,550 INFO 127.0.0.1/zhangsan/GET/http://127.0.0.1:8080/xxxx/xxxx.html?xxxx
这里的信息都是我需要的 ,时间-日志级别-IP-用户名-method-请求url,

你可能感兴趣的:(ELK)