erl 的 log4*, bt 以及杂七杂八
etorrent 是最近相当活跃(常能在 maillist 见到 ann )的一个项目,它是用 erlang 实现的一个 bittorrent 客户端。记得刚刚接触 erlang 的时候就觉得它貌似很适合用来写 bittorrent 客户端(分布式/TCP/并发),深入了解一番了之后,又觉得比起 C 来 erlang 并没有太明显的优势(GUI/CPU Heavy/IO/File),加之后来见到堪称完美的 uTorrent 横空出世(说实话,除了网上银行,唯一想让我回到 windows 平台的东西就是它了)让人不再有动力作“写 torrent 客户端”之想,没想到时隔一年,还真见到了这样的项目,让人感慨。现在的 etorrent 已经是第二个公开发布的版本了,从它的 change log 看到,特性增强很厉害,以“ 20 个 torrent 占用 50-80M 内存”这样的指标来说,已经相当接近实用水平了。或许日后的 etorrent 再配上一个好用的 frontend 能够打造出像 xmms2 那样强大的软件也说不定呢。
log4erl 是一个 log4* 的 erlang 实现。对于广大习惯了 log4* 的 erlang 使用者来说,确是一个福音。不过,从某种程度上讲,这也可以算是某种“重复建设”—— erlang 自身已经内置了相当强大的日志机制。注意,只是强大,我并没有说易用。因为对于广大 log4* 爱好者们而言,只有能使用 grep/awk/perl 这些标准 unix tool chain 来处理的,格式化的,每条一行的(问题是,以我的经验来说,”每条一行”这种限制常常会逼人多费半天劲,或者多写一大堆)才是易用的日志。而 erlang 自身内置的日志机制说实话也毫不逊色,只是用来颇有一些不同(加之文档组织得别出心裁,让人不易找到),各自属于不同的风格。既被拔到了“风格”层面,也就参杂了情感因素,无法以简单的方式来区分高下(君不见 csdn 上 x vs y 的口水仗层出不穷无休无止?)。本是见仁见智的事,大家看个人的喜好各取所需就是了。
顺便说说 erlang 自身的日志机制,极简的例子看上去象这样:
[{kernel,
[{error_logger,
{file, "debug.log" }}]}].
这好比是 log 的配置文件,然后,这样用:
1> error_logger:error_report([{tag1,data1},a_term,{tag2,data}]).
ok
2> error_logger:error_report("Serious error in my module").
ok
3> q().
ok
这样,在 debug.log 里面就有了:
=ERROR REPORT==== 17-Jul-2008::11:32:11 ===
tag1: data1
a_term
tag2: data
=ERROR REPORT==== 17-Jul-2008::11:32:31 ===
Serious error in my module
差不多就是这样了,更多配置,相关工具,以及更 “The Erlang Way” 的用法,可以参看文档 SASL 的部分。
btw,升级 wp 时从 incoming link 里发现一个 “默默无闻的领悟Erlang传说” 的中文 blog ToQuick (图快?),主人 cheng 同学治“程”(程序)态度严谨,细密,文章写得勤也写的好,值得推荐。下面对于 log4erl 的代码观感就转自图快:
log4erl代码非常精简,保持了erlang代码的风格,log4erl包括1个supervisor和2个gen_server和1个gen_event。
log4erl.erl为gen_server和application behaviour的callback,其作为主要的module,
log4erl_sup.erl为supervisor,启动log4erl,初始时将通过log4erl_sup:add_file_logger启动default_logger 日志记录器。
log4erl_sup:add_file_logger/1会动态添加file_logger_guard和file_logger两个child process。
have fun.


Write a Comment