<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>庆亮的博客-webgame架构 &#187; ejabberd</title>
	<atom:link href="http://www.qingliangcn.com/tag/ejabberd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Wed, 11 Aug 2010 15:25:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Erlang中日志管理三两话</title>
		<link>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/</link>
		<comments>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 08:05:42 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Erlang]]></category>
		<category><![CDATA[ejabberd]]></category>
		<category><![CDATA[sasl]]></category>
		<category><![CDATA[动态日志]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.qingliangcn.com/?p=242</guid>
		<description><![CDATA[日志系统的重要性就不罗嗦了，直接开始吧。 &#160; 一、基本概念 &#160; 在Erlang中，通过两个概念管理错误事情：事件管理器(event manager)和事件处理句柄(event handles)。通常各种错误、警告和消息事件都会有Erlang运行时系统发送给事件管理器。在Erlang中，默认的事情管理器为error logger，其进程名注册为error_logger。默认情况下error_logger把这些事件直接输出到控制台上。 &#160; &#160;&#160;&#160;&#160;&#160;&#160; 在系统启动的一开始，error_logger只有一个简单的事件处理句柄，该处理句柄只是做缓冲和原始格式的打印操作。查看error_logger的源码，可以看到其启动过程如下： &#160; -spec start() -&#62; {&#39;ok&#39;, pid()} &#124; {&#39;error&#39;, any()}. &#160; start() -&#62; &#160;&#160;&#160; case gen_event:start({local, error_logger}) of &#160;&#160;&#160; {ok, Pid} -&#62; &#160;&#160;&#160; &#160;&#160;&#160; simple_logger(?buffer_size), &#160;&#160;&#160; &#160;&#160;&#160; {ok, Pid}; &#160;&#160;&#160; Error -&#62; Error &#160;&#160;&#160; end. &#160; -spec start_link() -&#62; {&#39;ok&#39;, pid()} &#124; {&#39;error&#39;, any()}. &#160;]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">日志系统的重要性就不罗嗦了，直接开始吧。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">一、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">基本概念</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">中，通过两个概念管理错误事情：事件管理器</span><span lang="EN-US"><font face="Times New Roman">(event manager)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">和事件处理句柄</span><span lang="EN-US"><font face="Times New Roman">(event handles)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">。通常各种错误、警告和消息事件都会有</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">运行时系统发送给事件管理器。在</span><span lang="EN-US"><font face="Times New Roman">Erlang</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">中，默认的事情管理器为</span><span lang="EN-US"><font face="Times New Roman">error logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，其进程名注册为</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">。默认情况下</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">把这些事件直接输出到控制台上。<span id="more-242"></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在系统启动的一开始，</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">只有一个简单的事件处理句柄，该处理句柄只是做缓冲和原始格式的打印操作。查看</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的源码，可以看到其启动过程如下：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">-</span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">spec</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> start() -&gt; {&#39;ok&#39;, pid()} | {&#39;error&#39;, any()}</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> gen_event:start({local, error_logger}) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger(?buffer_size),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">-</span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">spec</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> start_link() -&gt; {&#39;ok&#39;, pid()} | {&#39;error&#39;, any()}</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start_link() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> gen_event:start_link({local, error_logger}) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger(?buffer_size),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><font size="3"><span lang="EN-US"><font face="Times New Roman">OK</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，只是简单的注册了一个进程，看看</span></font><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">simple_logger</span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font size="3">的内容：</font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">simple_logger(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">when</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> is_integer(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">gen_event:add_handler(error_logger, error_logger, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Buffer_size</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">)</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">看来</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在一开始的时候除了充当</span><span lang="EN-US"><font face="Times New Roman">manager</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，也担当了</span><span lang="EN-US"><font face="Times New Roman">handler</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的角色。</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">在启动的过程中，</span><span lang="EN-US"><font face="Times New Roman">kernel application</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">使用一个标准的事件处理句柄来代替之前的那个简单版本，这个版本会将输出到控制台的结果做个漂亮的格式化。当然，可以通过</span><span lang="EN-US"><font face="Times New Roman">kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的配置选项来修改上述行为，例如将结果输出到文件或者干脆什么都不干（忽略任何</span><span lang="EN-US"><font face="Times New Roman">event</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">）。口说无凭，还是继续看源码吧：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">kernel.erl</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">文件：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">start(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">_</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">, []) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> supervisor:start_link({local, kernel_sup}, kernel, []) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Type</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> = get_error_logger_type(),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>error_logger:swap_handler(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Type</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Pid</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">, []};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> -&gt; </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Error</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">首先，</span><span lang="EN-US"><font face="Times New Roman">kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">把自己注册为一个名为</span></font><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">kernel_sup</span></font><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">的监控树进程，其次立刻就更换了</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">error_logger</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">的处理句柄。</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">go on</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">：</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">get_error_logger_type() -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">case</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> application:get_env(kernel, error_logger) </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">of</span></b><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, tty} -&gt; tty;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, {file, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}} </span><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">when</span></b><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> is_list(</span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">) -&gt; {logfile, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">};</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, false} -&gt; false;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, silent} -&gt; silent;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>undefined -&gt; tty; </span><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt">% default value</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>{ok, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Bad</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">} -&gt; exit({bad_config, {kernel, {error_logger, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">Bad</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}}})</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><b><span lang="EN-US" style="font-family: 'courier new'; color: #a020f0; font-size: 10pt; mso-font-kerning: 0pt">end</span></b><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">代码很容易理解，根据配置来决定以何种方式处理日志。</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">二、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">定制</span><span lang="EN-US"><font face="Times New Roman">Kernel</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">选项</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">继续接着上面的代码往下走：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(tty) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:swap_handler(error_logger, {error_logger, swap},</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{error_logger_tty_h, []}),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler({logfile, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:swap_handler(error_logger, {error_logger, swap},</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{error_logger_file_h, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">File</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">}),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(silent) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>gen_event:delete_handler(error_logger, error_logger, delete),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>simple_logger();</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">swap_handler(false) -&gt;</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">ok</span><span lang="EN-US" style="font-family: 'courier new'; color: blue; font-size: 10pt; mso-font-kerning: 0pt">.</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"> </span><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt">% keep primitive event handler as-is<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: firebrick; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">可以看出，如果我们真的希望什么都不做，那么应该传递参数</span><span lang="EN-US"><font face="Times New Roman"> silent</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，而不是</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，因为</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">情况下原来的原始处理句柄并没有被移除掉。</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">打开命令提示符，做个简单的实验</span><span lang="EN-US"><font face="Times New Roman">(&gt;</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">表示命令提示符</span><span lang="EN-US"><font face="Times New Roman">)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">实验一，定制为</span><span lang="EN-US"><font face="Times New Roman">false</font></span></b><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数：</span><span lang="EN-US"><o:p></o:p></span></b></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">&gt; erl -kernel error_logger false<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">传递</span><span lang="EN-US"><font face="Times New Roman">false</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">2&gt; error_logger:error_msg(&quot;Haha&quot;). <span style="mso-spacerun: yes">&nbsp;</span>// </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">尝试产生一个</span><span lang="EN-US"><font face="Times New Roman">error event</font></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">ok{error_logger,{{</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">2010,2&gt; 3,10},{15,9,1}},&quot;Haha&quot;,[]}<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这里是结果</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">实验二，定制为</span><span lang="EN-US"><font face="Times New Roman">silent</font></span></b><b style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数：</span><span lang="EN-US"><o:p></o:p></span></b></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">&gt; erl -kernel error_logger silent<span style="mso-spacerun: yes">&nbsp; </span>//</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">传递</span><span lang="EN-US"><font face="Times New Roman">silent </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">参数</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">1&gt;<span style="mso-spacerun: yes">&nbsp; </span>error_logger:error_msg(&quot;Haha&quot;).</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ok<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>// </font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">看到这里只有</span><span lang="EN-US"><font face="Times New Roman">ok</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，没有其他任何信息了！</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">2&gt;</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font face="Times New Roman"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore">三、</span></span><span lang="EN-US">SASL</span></font></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">全称</span><span lang="EN-US"><font face="Times New Roman">System Architecture Support Libraries</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">，提供如下几个服务：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">alarm_handler</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">overload</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">rb</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">release_handler</font></span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"> <o:p></o:p></span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font face="Times New Roman"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-font-kerning: 0pt">systools</span><span lang="EN-US" style="font-family: 'verdana', 'sans-serif'; mso-font-kerning: 0pt"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">带有</span><span lang="EN-US"><font face="Times New Roman">error_logger</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的事件处理句柄用于格式化</span><span lang="EN-US"><font face="Times New Roman">SASL</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">错误和</span><span lang="EN-US"><font face="Times New Roman">crash</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">报告，这些句柄如下：</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span class="code"><span lang="EN-US"><font face="Courier"><font size="3"><font color="#000000">sasl_report_tty_h<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>sasl_report_file_h<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>error_logger_mf_h<o:p></o:p></font></font></font></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">细节参考</span><span lang="EN-US"><font face="Courier">OTP</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">文档可知。</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span lang="EN-US"><font face="Courier">SASL</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">的默认</span><span lang="EN-US"><font face="Courier">event handler</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">会将</span><span lang="EN-US"><font face="Courier">crash</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">报告、</span><span lang="EN-US"><font face="Courier">supervisor</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">和进程报告输出到控制台，如果你希望看到这些信息，那么在</span><span lang="EN-US"><font face="Courier">erlang</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">启动时需要加上指定的参数以启动</span><span lang="EN-US"><font face="Courier">sasl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">。</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">为了方便日志的查看，通常</span><span lang="EN-US"><font face="Courier">sasl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">和其他日志是分开输出的，可以在启动</span><span lang="EN-US"><font face="Courier">erl</font></span></span><span class="code"><span style="font-family: 宋体; mso-ascii-font-family: courier; mso-hansi-font-family: courier">时使用如下命令行参数：</span><span lang="EN-US"><o:p></o:p></span></span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><font color="#000000" face="Times New Roman" size="3">-sasl sasl_error_logger {file,&quot;/data/ log/sasl.log&quot;}</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt; mso-list: l0 level1 lfo1"><font size="3"><font color="#000000"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: ignore"><font face="Times New Roman">四、</font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">站在巨人的肩膀上</span></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这里并不打算介绍一个</span><span lang="EN-US"><font face="Times New Roman">gen_event behavior</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">模块的写法，而是想介绍一个非常强大、成熟的一个日志系统：</span><span lang="EN-US"><font face="Times New Roman">ejabberd</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">的日志系统。它包含两个部分：</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">dynamic_compile.erl<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">动态编译基础模块</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ejabberd_logger_h.erl<span style="mso-spacerun: yes">&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这是个</span><span lang="EN-US"><font face="Times New Roman">gen_event behavior</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">模块，可以定制我们写日志的行为</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span lang="EN-US"><font face="Times New Roman">ejabberd_loglevel.h<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">这个是</span><span lang="EN-US"><font face="Times New Roman">ejabberd</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'">日志系统的精华，可以在运行时动态调节日志的输出级别。</span></font></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span lang="EN-US"><o:p><font color="#000000" face="Times New Roman" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin: 0cm 0cm 0pt"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'"><font color="#000000" size="3">用法很简单：</font></span></p>
<p align="left" class="MsoNormal" style="text-align: left; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">error_logger:add_report_handler(ejabberd_logger_h, </span><span lang="EN-US" style="font-family: 'courier new'; color: darkgoldenrod; font-size: 10pt; mso-font-kerning: 0pt">LogPath</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">),</span><span lang="EN-US" style="font-family: 'courier new'; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">ejabberd_loglevel:set(</span><span lang="EN-US" style="font-family: 'courier new'; color: #5a5ab4; font-size: 10pt; mso-font-kerning: 0pt">4</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">)<span style="mso-tab-count: 1"> </span>//</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">级别</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">4</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">是</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt">info</span><span style="font-family: 宋体; color: black; font-size: 10pt; mso-ascii-font-family: 'courier new'; mso-hansi-font-family: 'courier new'; mso-font-kerning: 0pt; mso-bidi-font-family: 'courier new'">日志</span><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">原理很简单，利用</span><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">code</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">模块的</span><span lang="EN-US" style="mso-font-kerning: 0pt"><font face="Times New Roman">load_binary</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'times new roman'; mso-hansi-font-family: 'times new roman'; mso-font-kerning: 0pt">来实现动态代码替换，但是确实非常强大，可以在需要的时候打开某些特定级别的日志，在系统负载高的时候或者不需要的时候关闭它。</span></font></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2010/03/erlang%e4%b8%ad%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86%e4%b8%89%e4%b8%a4%e8%af%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

