Log4erl
http://developerworks.github.io/2011/05/16/erlang-use-log4erl/
Erlang 使用Log4erl
all = debug < info < warn < error < fatal < none
更新历史:
- 2014-09-25 23:34:31
功能
- 支持多日志
- 当前文件Appender仅支持基于大小的日志文件滚动
- 支持默认Logger,未指定Logger时系统提供默认Logger
- 5个预定义的日志级别(debug, info, warn, error, fatal)
- 一个error_logger的日志处理器
- 支持用户指定日志级别
- 支持日志格式化
- 支持控制台日志
- 支持smtp formatter
- 支持XML格式的日志
- 支持syslog
- 支持在运行时改变Appender的格式和级别.
Step1. Checkout from repository
你可以从 -Google code 或者- Github上获取Log4erl的源代码, Google code上的代码已经旧了,建议从Github上clone 代码
1 |
git clone git://github.com/ahmednawras/log4erl.git log4erl |
Clone a copy from github
Checkout a copy from google code
Log4erl目录结构
编译Log4erl
Step2. 编译
如图4, 进入Log4erl源代码目录src执行:
1 |
make:all([{outdir, "../ebin"}]).
|
Step3. 安装
你要让Erlang能够找到Log4erl,两种方式
- 把整个Log4erl目录复制到$ERLANG_HOME/lib目录下面.看上面第三张图.
- 命令行指定
1 |
erl -pz /path/to/log4erl |
Step4. 使用
1 |
application:start(log4erl). |
创建配置文件并调用log4erl:conf(file)初始化
1 |
log4erl:conf("priv/log4erl.conf").
|
同样你可以用编程的方式对Log4erl进行配置
1 |
log4erl:add_logger(messages_log). |
好了,现在可以使用它了.
1 |
log4erl:info("Information message").
|
Log4erl配置文件格式
1 |
logger [<name>] {
|
<name> 指定了Logger的名称,你可以去任意你喜欢的名字.如果不指定任何名字,那么log4erl将把它作为默认的Logger使用,例如:
1 |
%% default logger |
在一个Logger中,可以有一到多个Appender,例如
1 |
%% Default logger |
Appender的配置格式如下
1 |
<appender_type> <name> {
|
在Appender中你可以用’property=value’的格式来设置Appender的属性,属性剑以’,’逗号分隔.每种Appender有不同的属性集合.
公共属性:
1 |
level = <Level> => 日志级别 (例如: warn) |
file_appender
1 |
dir => 输出路径 (例如: /var/log/my_app) |
smtp_appender
1 |
ip => SMTP服务器IP地址 |
syslog_appender
1 |
facility => Facility (例如: ftp) |
新建一个测试项目test
新建module,test_log,代码如下
-module(test_log).
-export([init/0,log/0]).
init()->
init_log4erl(). log()->
log4erl:warn("warn3 msg"). init_log4erl() ->
application:start(log4erl),
log4erl:add_file_appender(app,{"/ide/erlang/workspace/log", "app", {size, 100000}, 10, log, info}),
log4erl:change_format(app, "%j %T [%L] %l%n"),
log4erl:add_console_appender(cmd_logs, {info, "%j %T [%L] %l%n"}).
log格式的配置,可以参看log4erl自带的README.txt,和API.txt
验证
1)启动 test_log:init().
2)使用 test_log:log().
结果:
2012-05-30 13:57:02.180647 [error] check_pid_is_alive error!
本文源码:
https://github.com/developerworks/skypebot/tree/master/src/erlang/log4erl_example
参考资料:
Log4erl的更多相关文章
- log4erl API
https://github.com/ahmednawras/log4erl/blob/master/API.txt NOTE:=====Please be informed that the API ...
- log4erl Configuration
https://github.com/ahmednawras/log4erl/blob/master/CONFIGURATION.txt Configuration Guide: ========== ...
- high volume logging
logging 是现在系统中必不可少的组件了.市面上已经有很多很多非常成熟的日志产品,log*系列就是一个典型代表.对于erlang系统来说,也有很多,比如error_logger, disk_log ...
- erlang中http请求
1..app文件中 {application,backend,[ {description,"ebank backend"}, {vsn,1.0}, {modules,[]} ...
- 理解Erlang/OTP Supervisor
http://www.cnblogs.com/me-sa/archive/2012/01/10/erlang0030.html Supervisors are used to build an hie ...
- 理解Erlang/OTP - Application
http://www.cnblogs.com/me-sa/archive/2011/12/27/erlang0025.html 1>application:start(log4erl). 我们就 ...
- 建立一个OTP应用
http://www.javaeye.com/topic/374167 以下是在erlang项目开发中的一些记录,即包含很多通俗易懂的原则,也包含一些似是而非的建议,比较混乱,还没有积累到一个可以分门 ...
- erlang 开发建议
* 确保没有任何编译警告 * Erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针).因此string速度较慢,空间占用较大 * 在 ...
随机推荐
- php的数据类型和变量的作用域
1)php支持例如以下所看到的的基本数据类型: Integer(整数).Float(浮点数).String(字符串).Boolean(布尔值).Array(数组).Object(对象),此外还有两个特 ...
- Spider_basic
网络爬虫 定义:网络蜘蛛.网络机器人,抓取网络数据的程序 总结:用Python程序去模仿人去访问网站,模仿的越逼真越好 目的:通过有效的大量数据分析市场走势.公司决策 企业获取数据的方式 公司自有数据 ...
- vue使用(三)
本节目标:获取后端api数据 需求:一个按钮,点击之后将服务器上的数据获取到,并显示出来 方法一: 1. 准备工作, (1)安装官方插件 vuedemo02>npm install vue-re ...
- (转)Oracle EXP-00091解决方法
转自:http://blog.csdn.net/dracotianlong/article/details/8270136 EXP-: 正在导出有问题的统计信息. . . 正在导出表 WF_GENER ...
- 【Codeforces Round #435 (Div. 2) B】Mahmoud and Ehab and the bipartiteness
[链接]h在这里写链接 [题意] 让你在一棵树上,加入尽可能多的边. 使得这棵树依然是一张二分图. [题解] 让每个节点的度数,都变成二分图的对方集合中的点的个数就好. [错的次数] 0 [反思] 在 ...
- -bash: /usr/local/mysql/scripts/mysql_install_db: /usr/bin/perl: bad interpreter: No such file or directory
安装 MySQL 初始化时,报错如下: [root@hcdb1 ~]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/m ...
- 21、根据(应用程序)虚拟驱动vivi的使用过程彻底分析摄像头驱动(有ioctrl分析)
videobuf2-core.h中的vb2_buffer,记录了v4l2_buffer ,驱动可以对vb2_buffer的v4l2_buffer进行操控, vb2_buffer是v4l2框架层的代码, ...
- Swift3.0 功能一(持续更新)
修改项目名称两种方式 1.Bundle name 2.Bundle display name try 三种处理异常的方式 // 在swift中提供三种处理异常的方式 // 方式一:try方式 程序员手 ...
- arm Linux 如何自动检测并mount SD卡,以及如何得知已经mount
一.土八路做法: SD 卡一旦插入系统,内核会自动在/dev/下创建设备文件:sdcard. 但有时可能时用户在拨出卡前并没有umount的话,第二次插卡进去后系统创建的就不是sdcard设备文件了, ...
- [CSS] Reduce Ambiguity in Class Names using a Naming Convention
A solid naming convention makes it less likely to run into naming conflicts and helps establish a se ...