为什么控制台上的error_logger消息与error_logger_mf文件的顺序不同

时间:2011-05-27 21:19:21

标签: erlang error-logging

我正在查看控制台上的error_logger消息,并将它们同时存储在error_logger_mf的文件中。

如果我查看文件和控制台,消息的顺序完全不同。

时间戳都显示相同的值,所以它的速度非常快,而且我确实知道从不同的进程发送消息时可能会出现故障。

但我一直认为,一旦到达error_logger,当它们被发送到不同的事件处理程序时,它们将保持相同的顺序。

我在文件中看到的内容(当我使用rb查看时),事件的发生顺序比控制台更合理。

澄清:

很明显,来自不同进程的消息到达error_logger的顺序不会太严重。

当我将磁盘日志与屏幕日志进行比较时,我不明白的是顺序的差异。


在下面的部分调查结果中添加了社区维基的答案,如果您知道其他要点,请进行编辑。

1 个答案:

答案 0 :(得分:0)

更新:这仍然没有解决,如果您知道某事,请随时添加到此社区维基

在源头进行了一些挖掘,但到目前为止还没有解决这个问题:

查看应该负责输出到控制台的error_logger_tty_h.erl

handle_event({_Type, GL, _Msg}, State) when node(GL) =/= node() ->
    {ok, State};
handle_event(Event, State) ->
    write_event(tag_event(Event)),
    {ok, State}.

因此忽略在另一个节点上具有group_leader的事件,所有未被忽略的事件都将通过write_event/1传递。哪些格式化,然后输出结果:

format(String)       -> io:format(user, String, []).
format(String, Args) -> io:format(user, String, Args).

user.erl io:format发送其io_request的情况下,我们有一个服务器循环调用一系列函数,最终将文本发送到tty端口。

在任何时候都不会有来自多个进程的消息!

因此,我无法看到任何方式让消息在前往tty时改变顺序。

报告的顺序还可以根据邮件是发送到tty还是发送到mf而改变?