`
cryolite
  • 浏览: 581946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang的日志记录

阅读更多

OTP自带的日志机制很强大,但总是不习惯,我使用时发现日志记录量大时(比如上万的进程同时写日志,超过200MB后)很容易拖累系统。一个例子如图,这是一次崩溃后的dump文件,可以看到error_logger占用了大量的内存空间,而且还有160多万条消息等待处理中。这是在一次大量进程同时记录一个超时错误时发生的。日志文件也超过200MB。

 

如果使用多个文件间轮换的方式进行日志记录(rotating log),生成的并不是易读的文本日志,要在erlang中通过rb解读。

 

许多erlang应用都没有直接采用error_logger记录日志。

例如:

1. couchdb自己专门写了日志记录的模块couch_log,用一个supervisor模块管理couch_log,couch_log是一个gen_event的模块,显然日志的记录也是异步的,收到日志事件后负责往文件上写格式化后的日志信息。日志信息也是分级的。

2.当前版本的scalaris也有两个专门的日志记录模块,boot_logger和log,前者类似gen_server,接收日志信息并输出到终端或者文件,这个过程是同步的,后者其实就是一个文件写入的包装,不过写入之前会格式化日志信息加上时间标志。scalaris没有分级日志。

 

因此couchdb的日志要做得更像日志些。而提到专业的日志记录,这时不免怀念Java下的log4j,还好有log4erl了,用过log4j的会很熟悉,上手也容易。

 

0. 原理

log4erl是一个application,所以要使用必须先启动才行,log4erl做为application启动后会运行一个gen_server类型的模块接收记录日志请求,该模块最终调用一个gen_event的模块异步写日志。

 

1.  安装

直接在erlang安装目录的lib下解压文件,make后即可使用

 

2. 使用

记得要先启动作为application的log4erl:

 

application:start(log4erl)

 

与error_logger不同,log4erl不能直接将erlang term作为日志信息记录,log4erl的日志的使用类似与io:format。

 

 其它与log4erl的使用相同,五级日志信息:warn | info | error | fatal | debug。

 

系统中有多个日志记录器(logger),用户根据自己的需要可以用不同的日志记录器记录不同类型的日志,这样我们可以按各种标准划分日志,例如不同功能模块的日志信息由不同的日志记录器负责。

 

这些日志记录器由用户自己定义的atom标识,还有一个缺省的日志记录器,如果你不指定哪个日志记录器记录,就会用缺省的那个。

 

每个日志记录器(logger)可以有一个或多个输出方式(这被称为appender),每个appender都有一个atom标识,各个appender可能各不相同,可以是输出到终端屏幕上的,可以是记录在文件上的,smtp的,未来还有记录到数据库上的、SNMP的、SMTP的。一个日志记录器有多个appender使得同一个日志信息可以记录在多个地方。

 

日志信息中还可包含格式化的时间信息。

 

例子:

1. 为缺省日志记录器添加一个终端输出的appender,日志记录格式加入时间格式和日志级别:

 

16> log4erl:add_console_appender(cmd_logs, {info, "%j %T [%L] %l%n"}).
17> log4erl:get_appenders().
[{console_appender,cmd_logs}]

18> log4erl:log(info, "received message ~p", [abc]).
18-03-2009 22:16:45,911948 [info] received message abc

19> log4erl:warn("~p", [{a,{b,[c,d,e]}}]).
18-03-2009 22:17:48,920603 [warn] {a,{b,[c,d,e]}}

 

 

 

具体看文档,帮助很详细。

 

 

update

 

新版本的scalaris开始使用log4erl记录日志,这是log4erl当前的一个比较大的应用了吧

 

  • 大小: 152.7 KB
分享到:
评论
1 楼 litaocheng 2009-03-19  
呵呵,你的日志太多了...

相关推荐

    syslog:符合RFC 3164和RFC 5424的Erlang日志记录框架

    用于Erlang的基于Syslog的日志记录框架和/或OTP logger程序处理程序。 该项目的灵感来自于和这两个项目中的出色工作。 实际上, syslog尝试将两种方法结合起来。 简而言之, syslog可以看作是lager日志记录框架的轻...

    更大的:ErlangOTP的日志记录框架

    概述啤酒(如啤酒中的啤酒)是Erlang的日志记录框架。 其目的是提供一种在erlang应用程序中执行日志记录的更传统的方式,该方法可与logrotate和syslog之类的传统UNIX日志记录工具很好地配合使用。 :: [ ]特征更精细...

    erlang-otp-win64位 25.3版本

    在开发和运行使用Erlang OTP或RabbitMQ的应用时,还需要了解Erlang的语法和编程模型,包括模块、函数、进程通信(通过消息传递)、错误处理和日志记录等。此外,熟悉RabbitMQ的基本概念,如exchange(交换器)、...

    rabbitmq,erlang安装包

    同时,理解RabbitMQ的插件机制也很重要,它允许扩展RabbitMQ的功能,例如日志记录、监控等。保持RabbitMQ和Erlang的更新,以获取最新的安全修复和性能优化,是维护一个健康消息队列系统的关键。

    Erlang和RabbitMQ安装包

    3. **插件体系**:RabbitMQ有丰富的插件系统,可以扩展其功能,例如管理界面、日志记录、监控等。 4. **广泛的语言支持**:RabbitMQ提供了多种编程语言的客户端库,如Java、Python、Ruby、.NET等,便于开发者使用。...

    erlang tcp_server

    7. **错误处理和日志记录**:在开发TCP服务器时,错误处理和日志记录是必不可少的。Erlang提供了`error_logger`模块来记录应用程序的事件和异常,帮助调试和维护。 8. **连接池**:为了优化性能,可能会采用连接池...

    rustler编写erlang nif

    - 提供了一些调试NIF的技巧,比如使用`erl_nif_trace`和日志记录。 通过学习Rustler编写Erlang NIF,开发者可以充分利用Rust的安全性和高性能,同时保持Erlang的并发优势和容错能力。这篇文章提供了一个实用的指南...

    Erlang 环境 opt_win64_21.1版本

    - 插件体系:RabbitMQ提供了丰富的插件,用于监控、日志记录、管理界面等功能。 - 多语言支持:RabbitMQ提供多种客户端库,支持Java、Python、Ruby、JavaScript等语言,方便不同语言的应用程序接入。 总的来说,otp...

    erlang mysql

    Erlang 是一种功能强大的并发编程语言,以其在分布式系统、实时...同时,这也为自定义错误处理、日志记录和监控提供了基础。对于想要在 Erlang 环境下使用 MySQL 数据库的人来说,熟悉这些概念和实践是非常有价值的。

    Erlang_win64_24.1.rar

    RabbitMQ的强大之处在于其灵活的插件系统,允许用户根据需求添加监控、日志记录、管理界面等功能。 总的来说,Erlang_win64_24.1.rar是为在Windows系统上搭建RabbitMQ环境提供必要的Erlang支持。了解Erlang的基本...

    适用于windows版本的 Erlang25.2.3 and RabbitMQ server 3.11.9下载

    4. 插件系统:丰富的插件库提供了监控、管理、日志记录等功能,方便系统管理和维护。 5. 多语言客户端:RabbitMQ提供了多种编程语言的客户端库,包括Java,使得Java开发者可以轻松集成。 在安装Erlang和RabbitMQ的...

    erlang-java聊天

    同时,日志记录和调试工具可以帮助识别和解决问题。 总结,"erlang-java聊天"项目展示了如何利用Erlang的并发和分布特性与Java的广泛应用相结合,构建一个初级的聊天系统。这不仅涉及到两种语言的编程技术,还涵盖...

    erlang的小型游戏服务器

    `version.txt`则记录了项目的版本信息,这对于追踪代码的迭代和维护非常有用。 `proto`目录可能包含了游戏服务器使用的协议定义,这些协议定义了客户端与服务器之间的通信格式,例如玩家登录、移动、战斗等操作的...

    erlang otp 19.1 官网文档 HTML格式

    - **错误处理**:包括故障检测、恢复机制和日志记录。 **3. Docs** 文档中可能涵盖了以下内容: - **Erlang语言指南**:解释Erlang的语法、数据类型、控制结构等基本概念。 - **OTP设计原则**:介绍OTP的行为模式、...

    erlang 聊天室源码

    7. **日志与监控**:记录用户活动、错误日志和系统状态对于调试和优化非常重要。Erlang提供了`observer`工具和其他日志库来支持这些功能。 8. **性能优化**:随着用户数量增加,性能将成为关键。Erlang的并发模型和...

    erlang21.0_win64

    OTP(Open Telecom Platform)是Erlang的核心库,包含了各种实用工具和服务,如分布式计算、监控、日志记录和错误报告等,是构建大规模并发系统的基础。 总之,Erlang 21.0_win64是一个针对Windows 64位平台优化的...

    erlang mochiweb-test demo

    5. **Web 服务器中间件**:Mochiweb 允许开发者使用中间件来扩展其功能,如日志记录、会话管理等。 在 "mochiweb-test" 文件夹中,可能包含以下内容: - **源代码文件**:通常会有 `.erl` 扩展名的 Erlang 源代码...

    erlang lib of iconv

    4. **日志和调试**:在开发过程中,使用日志记录转换过程,以便在出现问题时进行调试。 5. **性能评估**:对大量数据进行性能测试,以确定库在生产环境中的表现。 **文件名称列表解析** 在提供的压缩包中,只有一...

    ERLang+RabbitMQ安装包

    3. **插件系统**:RabbitMQ拥有丰富的插件系统,可以扩展其功能,如监控、日志记录、持久化等。 4. **消息确认机制**:发送者和接收者可以通过消息确认来确保消息的正确传输,防止消息丢失。 5. **队列和交换器**...

Global site tag (gtag.js) - Google Analytics