`
witeman
  • 浏览: 6787 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

用log4erl怎么获取 error_logger捕获到的OTP系统的错误信息?

阅读更多
log4erl是一个在Erlang下很好的处理log的tools。可是,一些系统崩溃的error_msg不能用log4erl直接捕捉。因为OTP系统默认的error处理是给error_logger的。

可是系统崩溃的log对于debug和improve来说至关重要。一开始,我是一面用log4erl,一面用error_logger:logfile({open, FileName})来分别记录我自己定义的log和捕捉系统崩溃时的log。

之前,就有听说过error_logger可以自己写callback module然后add_report_handler。可是,之前一直没有时间去看,这个callback module的具体要求和格式。

今天发现了log4erl下面原来已经提供了这个callback module:error_logger_log4erl_h,所以,这一切都变得很简单。只要:

error_logger:add_report_handler(error_logger_log4erl_h).

就可以,转给log4erl来记录相应的系统发出的log了。

看了一下,error_logger_log4erl_h的源代码,发现原来就是这么简单地mapping一下就可以了:

-module(error_logger_log4erl_h).
-behaviour(gen_event).
...
-record(elogger_l4e_mappings, {error=error, info_msg=info, warning_msg=warn,
			       error_report=error, info_report=info,
			       warning_report=warn}).
...
init([])->
    {ok, #elogger_l4e_mappings{}};
init(Conf) ->
    io:format("Conf ~p~n",[Conf]),
    {ok, mapping(Conf, #elogger_l4e_mappings{})}.
...

handle_event({error, _GLeader, {_PID, Msg, Data}}, #elogger_l4e_mappings{error=L} = State) ->
    R = log4erl:log(L, Msg, Data),
    {R, State};
handle_event({info_msg, _GLeader, {_PID, Msg, Data}}, #elogger_l4e_mappings{info_msg=L} = State) ->
    R = log4erl:log(L, Msg, Data),
    {R, State};
handle_event({warning_msg, _GLeader, {_PID, Msg, Data}}, #elogger_l4e_mappings{warning_msg=L} = State) ->
    R = log4erl:log(L, Msg, Data),
    {R, State};
handle_event({error_report, _GLeader, _}, State) ->
    {ok, State};
handle_event({info_report, _GLeader, _}, State) ->
    {ok, State};
handle_event({warning_report, _GLeader, _}, State) ->
    {ok, State}.
...

分享到:
评论

相关推荐

    erlang日志应用log4erl(非sasl)

    用不惯sasl的,可以用log4xxx的erlang版,log4erl。 log4erl Manual: =============== TOC: ==== 1. Features 2. Installation 3. Usage 4. API 5. Configuration 6. Known issues 7. Future development 8. ...

    log4erl-0.9.0

    - 使用log4erl提供的函数进行日志记录,如`log4erl:info/1`、`log4erl:error/2`等,这些函数会自动附加必要的上下文信息。 - 定期检查和分析日志,以便快速发现并解决问题。 - 对于大型项目,可以结合监控系统,实时...

    erl:otp_src_24.0.5.tar.gz

    标题中的"erl:otp_src_24.0.5.tar.gz"指的是Erlang的源码包,其中"otp_src_24.0.5"是Erlang/OTP (Open Telecom Platform) 的24.0.5版本的源代码。Erlang是一种面向并发的、函数式的编程语言,常用于构建高可用性和...

    Erlang otp_win64_21.1.exe otp_win32_21.1.exe

    1. 确保选择与系统架构匹配的版本,即64位系统使用`otp_win64_21.1.exe`,32位系统使用`otp_win32_21.1.exe`。 2. 安装路径不应包含空格或非ASCII字符,以免导致后续RabbitMQ配置问题。 3. 安装后,需要将Erlang的...

    官方获取_win64位_otp_win64_22.0.zip

    这包括设置正确的环境变量,如ERL_INETRC,以及确保 RabbitMQ 插件目录被加入到 OTP 的代码路径中。此外,还需要根据项目需求安装相应的 RabbitMQ 插件,如管理界面或特定的协议插件。 在 OTP 22.0 版本中,有一些...

    kernel-Erlang

    The Kernel application is the first application started. It is mandatory in the...• error_logger • file • global • global_group • heart • inet • net_kernel • os • pg2 • rpc • seq_trace • user

    erl_nif_rustler_过程宏写法

    在Erlang中,`NIF (Native Implemented Functions)` 是一种机制,允许开发者使用其他语言(如C或Rust)...通过理解`rustler_macro`的过程宏和Erlang NIF的生命周期,开发者可以轻松地将Rust功能集成到Erlang系统中。

    otp-win32_20.1 32位

    4. **32位系统兼容性**:尽管现在64位系统已经成为主流,但仍有部分用户或服务器在使用32位操作系统。OTP提供32位版本,确保了这些平台上的兼容性,让所有开发者都能利用Erlang和OTP的强大功能。 5. **安装过程**:...

    erl_to_html:使用解析转换和erl_id_trans.erl将erlang代码转换为跨度为_everything_HTML

    erl_to_html 使用解析变换和erl_id_trans.erl Erlang的代码转换为HTML,跨度的一切。...我不知道我需要怎么做许可证,但是由于我是从Erlang示例代码中复制erl_id_trans.erl,因此我正在使用Erlang公共许可证。

    otp_win64_23.1.zip

    例如,使用`erl`命令启动Erlang shell,可以编写和运行Erlang代码,测试和调试系统。OTP还提供了诸如`rebar3`或`mix`这样的构建工具,便于管理和构建Erlang项目。 在分布式系统中,OTP的进程模型允许应用程序创建轻...

    otp_src_21.3.zip

    OTP(Open Telephony Platform)是Erlang的核心部分,包含了许多库、开发工具和应用程序,使得Erlang在分布式系统、实时系统以及容错系统等领域表现出色。这个压缩包包含了构建Erlang运行环境所需的全部源代码。 ...

    erl_nif 扩展erlang的另外一种方法

    4. **错误处理**:Erlang VM的并发模型要求所有的错误都必须是可恢复的,因此,NIFs需要处理错误并返回适当的Erlang值。 5. **线程安全**:由于Erlang VM可能在多个线程之间调度进程,因此NIFs必须是线程安全的。这...

    otp-win64-25.0.1.exe ErLang 下载

    **OTP (Open Telecom Platform) for Windows 64位 25.0.1 版本:ErLang 下载** ErLang是一种高级并发编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高度可靠和可扩展的分布式系统。OTP(Open Telecom ...

    erlang_otp_src_22.3.tar.gz

    Erlang OTP (Open Telephony Platform) 是一种高级编程语言,专为构建高并发、分布式、容错性强的系统而设计。22.3 版本是 Erlang OTP 的一个稳定版本,它提供了许多增强的功能和性能改进。下面将详细介绍这个版本的...

    erlang-otp-win64位 25.3版本

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

    erlang安装包otp_win64_23.1

    - 下载:访问Erlang Solutions或Erlang/OTP官方网站获取适合操作系统的安装包。 - 安装:运行下载的`.exe`文件,按照向导完成安装。 - 配置环境变量:确保`ERLANG_HOME`和`PATH`指向Erlang的安装目录。 - 检查...

    erlong-otp_win64_21.3.zip

    标题“erlong-otp_win64_21.3.zip”指的是Erlang OTP(Open Telecom Platform)在Windows 64位系统上的版本21.3的压缩包。Erlang是一种动态类型的、函数式的编程语言,特别适合构建高可用性、容错性强和面向并发的...

    otp_src_23.1.tar.gz

    OTP(Open Telecommunications Platform,开放电信平台)是Erlang编程语言的核心库,它提供了一系列强大的工具和库,用于构建高可靠性和可扩展性的分布式系统。`otp_src_23.1.tar.gz`是一个源码包,包含了Erlang OTP...

    otp_win64_22.0最新.zip

    4. **错误修复**:解决了已知的问题和漏洞,提升了系统的稳定性和可靠性。 5. **安全改进**:可能加强了安全相关的特性,如加密和认证机制,以保护系统免受攻击。 6. **开发工具升级**:可能更新了调试器、代码分析...

    otp_src_22.0.tar.gz

    "otp_src_22.0.tar.gz" 是一个源于 Erlang/OTP (Open Telecom Platform) 开源项目的压缩文件。Erlang 是一种并发性极强、面向分布式计算的编程语言,而 OTP 是一个由 Erlang 提供的软件框架,包含了各种库、工具和...

Global site tag (gtag.js) - Google Analytics