有人知道用 erlang 实现类似 tail 的么?
RT.这应该是监控系统的一个部分. 有人知道现在有没有人实现了这样的功能呢? q1208c 发表于 2014-08-26 15:49 static/image/common/back.gif
RT.
这应该是监控系统的一个部分. 有人知道现在有没有人实现了这样的功能呢?https://github.com/richcarl/file_monitor是类似这样的么? 回复 2# shijiang1130
没细看代码, 单看 readme 的话, 好象不是太一样.
我要实现的, 是 tail 的 差不多全部功能. 也就是可以指定输出一个文件的部分或全部内容, 并且可以跟踪文件的追加.
当然, 这只是第一步, 后面要做的工作是跟踪log的滚动. 也就是说, 不管log滚动了多少个文件, 都要从最早的一个文件开始,
一条条把log读出来并发送出去, 同时,要记录已经发送过的log, 不要重复发送相同的内容.
可以认为是异步的消息处理. 基于日志的.
-module(t).
-compile(export_all).
-include_lib("kernel/include/file.hrl").
start() ->
ets:new(?MODULE,),
ets:insert(?MODULE,{t,"ini"}),
ets:insert(?MODULE,{size,0}),
spawn(fun()->timer() end).
cancel(Pid) -> Pid ! cancel.
timer() ->
receive
cancel ->
void
after 5000 ->
do_check(),
timer()
end.
do_check()->
case file:read_file_info("t.txt") of
{ok,Exist}->
F = Exist#file_info.mtime,
[{t,G}]= ets:lookup(t,t),
case F =:= G of
true ->
ok;
false ->
[{size,O}]= ets:lookup(t,size),
N=Exist#file_info.size,
L = N - O,
ets:insert(?MODULE,{t,F}),
ets:insert(?MODULE,{size,N}),
{ok,S}=file:open("t.txt",[]),
{ok,C}=file:pread(S,O,L),
io:format("NewContent:~p~n",)
end;
_->
error
end. 回复 4# shijiang1130
好象略复杂。 没太看懂。
:em15:
页:
[1]