突出显示线程应用程序的日志

我有多线程应用程序的日志文件。每行具有公知的格式(例如,第3个字段是线程ID)。而其中一个字段是线程ID。我希望我不是要重新发明轮子:) 无论如何,为了方便阅读文件,我想到了两个可能有用的选项: 突出显示与当前行具有相同线程ID的所有行。 如果按下某个击键,则折叠所有具有其他线程ID的线,再次按下击键展开线。 欢迎这两个项目的骨架。     
已邀请:
通过模式突出显示 这是一个强调(和清除)所有包含给定图案的线条的功能,在图案本身上加上突出显示。 “最后搜索”寄存器
@/
也设置为请求的模式,因此
n
/
N
,在正常模式下,通过匹配线向前/向后跳转。
<Leader>l
(相当于大多数安装时的
l
)是一个快捷方式,用于突出显示光标下包含
WORD
的行。
highlight def link xHiLine Special
highlight def link xHiPatt String

function! ClearHighlight()
    syn clear xHiLine
    syn clear xHiPatt
    let @/ = ''
endfunction

function! HighlightPattern(patt)
    call ClearHighlight()
    if a:patt != ''
        echo "Highlighting pattern: ".a:patt
        exec "syn match xHiPatt "".a:patt."" contained"
        exec "syn match xHiLine ".*".a:patt.".*" contains=xHiPatt"
        let @/ = a:patt
    endif
endfunction

map <Leader>l :call HighlightPattern(expand("<cWORD>"))<CR>
map <Leader>c :call ClearHighlight()<CR>
按图案折叠 有关基于模式折叠的示例,请查看Show-Hide Vim插件。它提供了两个命令,
SHOW
HIDE
,以及一些快捷键映射。例如,
:SHOW thread=1234
将折叠除包含
thread=1234
的行以外的所有行,而在正常模式下
zs
将在光标下显示包含
word
的行。 [您可能想要创建一个替代地图,例如
zS
,以使用
<cWORD>
而不是
<cword>
。] 建筑模式 如果
<cword>
<cWORD>
都没有提取足够独特的滤镜模式(或者为了避免将光标移动到正确的字段),请创建另一个函数,如下图所示,并从地图中调用它。
function! GetField(num)
    let toks = split(getline('.'))
    if len(toks) >= a:num
        return toks[a:num-1]
    endif
    return ''
endfunction

map <Leader>hl :call HighlightPattern(GetField(3))<CR>
map <Leader>fl :exec "SHOW ".GetField(3)<CR>
    
您基本上寻找的是在日志文件之上构建的外部机制。 Chainsaw正在为基于log4j的日志做到这一点: http://logging.apache.org/chainsaw/index.html 不确定你的日志应用程序是什么,但你应该探讨这个方向。     

要回复问题请先登录注册