Erlang 为什么控制台上的错误记录器消息与错误记录器mf文件的顺序不同

Erlang 为什么控制台上的错误记录器消息与错误记录器mf文件的顺序不同,erlang,error-logging,Erlang,Error Logging,我正在查看控制台上的错误记录器消息,同时将它们存储在带有error\u logger\u mf的文件中 如果我查看文件和控制台,消息的顺序完全不同 时间戳都显示相同的值,所以它运行得相当快,我确实理解,当从不同进程发送消息时,消息可能会出现故障 但我一直认为,一旦到达错误记录器,当它们被发送到不同的事件处理程序时,它们将保持相同的顺序 我在文件中看到的(当我用rb查看时)事件的顺序比控制台上的顺序更合理 澄清: 很明显,来自不同进程的消息到达错误记录器的顺序不应太严重 当我比较磁盘日志和屏幕日志

我正在查看控制台上的错误记录器消息,同时将它们存储在带有
error\u logger\u mf
的文件中

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

时间戳都显示相同的值,所以它运行得相当快,我确实理解,当从不同进程发送消息时,消息可能会出现故障

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

我在文件中看到的(当我用
rb
查看时)事件的顺序比控制台上的顺序更合理

澄清:

很明显,来自不同进程的消息到达错误记录器的顺序不应太严重

当我比较磁盘日志和屏幕日志时,我不理解的是顺序上的差异



在下面的社区维基中添加了我的部分发现,如果您知道其他要点,请进行编辑。

更新:这仍然没有解决,如果您知道一些问题,请随时添加到此社区维基。

对来源进行了一些挖掘,但到目前为止还没有解开谜团:

查看
错误\u logger\u tty\u 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}.
因此,在另一个节点上有一个组长的事件将被忽略,所有未被忽略的事件都将通过
write\u event/1
传递。它进行一些格式化,然后输出结果:

format(String)       -> io:format(user, String, []).
format(String, Args) -> io:format(user, String, Args).
user.erl
中,其中
io:format
发送其io_请求,我们有一个服务器循环调用级联函数,最终将文本发送到tty端口

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

因此,在前往tty时,我看不到任何方式可以改变信息的顺序


根据消息是发送到tty还是发送到mf,报告的顺序在哪里可以改变?

独占IO控制台是一场同步竞赛。至少这是我的猜测。其中可能有一个派生,使得多人想要访问控制台,因此问题是谁首先获取IO锁。@IG:检查了从错误记录器处理程序到tty的路径,但找不到任何证据(请参阅下面的c.wiki)。