Android日志框架darks-logs使用教程
一、配置文件
在使用darks-logs之前,我们需要为它创建一个名叫logd.properties的配置文件。如果你是需要在JAVA或WEB上使用该组件,那么你可以像配置log4j一样将它放在classpath中。
如果是在Android端使用该组件,你需要将logd.properties文件放置在assets目录中,以便能让组件找到它。在放置了logd.properties文件后,为了能让组件获取到assets目录中的配置文件,需要在Android的Application中进行相关的设置。如果需要日志输出捕获的Android应用ANR异常信息,也需要在Application中注册ANR异常处理器。
- public class CustomApplication extends Application
- {
- @Override
- public void onCreate()
- {
- //首先必须设置Application对象
- Logger.Android.setApplication(this);
- //注册ANR错误处理器
- Logger.Android.registerCrashHandler();
- super.onCreate();
- }
- }
如果希望Android应用在捕获到ANR异常后,能回调执行相关的代码,可以在registerCrashHandler方法中设置CallBack。
- Logger.Android.registerCrashHandler(new CallBack(){
- @Override
- public boolean handleMessage(Message msg)
- {
- //发生ANR异常时执行
- new Thread()
- {
- public void run()
- {
- Looper.prepare();
- Toast.makeText(CustomApplication.this, "The crash has happened.", Toast.LENGTH_LONG).show();
- Looper.loop();
- }
- }.start();
- Thread.sleep(3000);
- return true;
- }
- });
默认的配置文件加载器会从Java的classpath以及Android的assets中加载配置文件,如果你需要从其他特别的地方加载配置文件(例如sdcard、raw等等)。你可以自定义加载器,并通过Logger.Config.setCustomLoader(...)进行设置。在后续版本中会增加加载路径的自定义设置,从而不需要自定义加载器,除非你有特别需求。
二、简单使用
在完成配置文件的放置及必要的参数配置后,我们就可以向配置文件中添加配置参数了。
我们先简单的向logd.properties中添加一个控制台日志处理器。
- logd.root=info,console
- #logd.appender.console=darks.log.appender.impl.ConsoleAppender
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
然后我们在JAVA类中创建一个logger,为了提高效率建议设置成static变量。
- static Logger log = Logger.getLogger(TestLogger.class);
- static Logger log = Logger.getLogger("darks.logs.test.TestLogger");
- static Logger log = Logger.getLogger("TestLogger");
之后我们可以通过多种方式输出不同日志级别的日志信息。
- log.debug("This is the darks logs hello world.");
- log.info("Info message will be output");
- log.error("Happen a exception. Cause " + e.getMessage(), e);
如果你需要进行比较多的字符串拼接,或者对部分日志信息进行格式化。这样的输出方式可以提高一部分效率。
- log.append("darks").append('-').append("logs").info();
- log.append(2014).append(1).append(1).debug(e);
- log.buffer(2014, " coming ", "now").warn();
- log.format("darks-logs was created in %d by %s", 2014, "darks").error(e);
- log.append("...").append("...").format("...", ...).info();
三、日志消息格式化
在简单使用中我们设置了一个控制台日志输出器,其中配置了
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
这段配置信息是为了配置当前消息输出器的日志格式。相关的格式定义如下。
- %n, %N: 输出一个回车字符。
- %m, %M: 输出消息内容。(也包括异常栈信息)
- %e, %E: 输出错误异常栈信息。
- %d, %D: 输出日期格式信息,例如 "%d{yyyy-MM-dd HH:mm:ss}".
- %c: 输出命名空间或者tags.我们可以使用%c{层数}来输出命名空间中指定的信息。
- 例如%c{1},如果命名空间是 darks.log.DemoMain,那么它会输出DemoMain。
- %C: 输出类名.你也可以使用%C{层数}的方式来输出类名的指定层数。
- 例如%C{2},如果类全名是darks.log.DemoMain,那么它会输出log.DemoMain。
- %f, %F: 输出源文件名称。
- %L: 输出源代码行数。
- %l: 输出时间信息。包括调用类,线程名,源文件名以及代码行数。
- %p, %P: 输出日志级别。
- %r, %R: 输出从启动到现在的消耗时间。
- %t, %T: 输出当前线程名。
例如:
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%f][%p] - %m%n
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{2} - %m%n
四、消息处理器
Appender是所有消息处理器的基类,它可以配置layout、filter等等,你可以通过继承该类去自定义化输出,比如将日志输出到Android的UI上。
1、layout
layout主要用来格式化消息,你可以使用自带的darks.log.PatternLayout, darks.log.SimpleLayout等layout,你甚至可以继承LoggerLayout自定义实现layout。
- PatternLayout能够灵活的通过输出格式输出日志信息。例如%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n。
- SimpleLayout能够输出较为简单的日志I型逆袭。例如:level - message
2、filter
filter能够通过指定的规则过滤日志消息。
- LevelRangeFilter能够输出最小等级与最大等级之间的日志消息。
- #它将会输出debug与info等级之间的消息
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.console.filter=LevelRangeFilter
- logd.appender.console.filter.levelMin=debug
- logd.appender.console.filter.levelMax=info
- logd.appender.console.filter.accept=true
- RegexMatchFilter能够输出匹配指定的正则表达式的日志消息。
- #它将会输出匹配正则表达式darks\d+的日志消息
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.console.filter=RegexMatchFilter
- logd.appender.console.filter.pattern=darks\d+
- logd.appender.console.filter.accept=true
- LevelMatchFilter能够输出制定日志等级的消息日志。多个等级之间用逗号隔开。
- #它将会输出debug以及info级别的消息日志
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.console.filter=LevelMatchFilter
- logd.appender.console.filter.levels=debug,info
- logd.appender.console.filter.accept=true
3、async
- logd.appender.console.async=true
五、各类消息处理器
1、ConsoleAppender
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
2、AndroidAppender
- logd.appender.ANDROID=AndroidAppender
- #输出命名空间的指定层数作为logcat的TAG。默认为1.
- logd.appender.ANDROID.layer=1
- logd.appender.ANDROID.layout=PatternLayout
- logd.appender.ANDROID.layout.pattern=%m
3、StreamAppender
- public class CustomAppender extends StreamAppender
- {
- @Override
- public void activateHandler()
- {
- //会在第一次激活时调用,你可以用他创建文件或者初始化IO流等。
- }
- @Override
- protected void expandAppend(LogMessage msg, String log) throws Exception
- {
- //在这里做日志的扩展处理,比如检查文件大小等等
- }
- }
4、SocketAppender
- logd.appender.SOCKET=SocketAppender
- logd.appender.SOCKET.layout=PatternLayout
- logd.appender.SOCKET.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- #服务端IP
- logd.appender.SOCKET.serverHost=127.0.0.1
- #服务端端口
- logd.appender.SOCKET.serverPort=8686
- #保持alive
- logd.appender.SOCKET.keepAlive=true
- logd.appender.SOCKET.tcpNoDelay=true
- #用头字节封装消息,它会给传输的日志消息加上前置标识以及消息长度。
- logd.appender.SOCKET.wrapBytes=true
5、FileAppender
- logd.appender.FILE=FileAppender
- logd.appender.FILE.layout=PatternLayout
- logd.appender.FILE.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.FILE.fileName=${user.dir}\log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txt
- #logd.appender.FILE.fileName=${sdcard}/log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txt
- logd.appender.FILE.buffered=true.
6、FileDateSizeAppender
- logd.appender.FILE=FileDateSizeAppender
- logd.appender.FILE.layout=PatternLayout
- logd.appender.FILE.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.FILE.fileName=${user.dir}\log_${Dyyyy_MM_dd_HH_mm_ss_SS}.txt
- logd.appender.FILE.buffered=true
- logd.appender.FILE.maxSize=10485760
- logd.appender.FILE.keepDay=7
7、StorgeAppender
8、SqliteAppender
- logd.appender.SQLITE=SqliteAppender
- logd.appender.SQLITE.layout=PatternLayout
- #指定数据库名称
- logd.appender.SQLITE.dbName=db_records
- #指定版本号
- logd.appender.SQLITE.dbVersion=1
- #指定表名
- logd.appender.SQLITE.table=t_logs
- #创建表的语句
- logd.appender.SQLITE.createSQL=create table if not exists t_logs(_id integer primary key autoincrement,date text,level text,source integer,file text,message text)
- #数据库列映射
- logd.appender.SQLITE.columnsMap.date=%d{yyyy-MM-dd HH:mm:ss}
- logd.appender.SQLITE.columnsMap.level=%p
- logd.appender.SQLITE.columnsMap.source=%L
- logd.appender.SQLITE.columnsMap.file=%f
- logd.appender.SQLITE.columnsMap.message=%m
六、命名空间分类
- #设置darks.log.test包中的日志输出为debug级
- logd.logger.darks.log.test=debug
- #设置darks.log.test.file包中的日志输出为debug级,并且输出到名为FILE的消息处理器中。
- logd.logger.darks.log.test.file=debug,FILE
- #设置darks.log包中的日志输出为debug级,并且输出到名为console的消息处理器中。
- logd.logger.darks.log=debug,console
指定包的子logger设置可以将消息输出到指定的日志处理器中,但同时也会输出到root的日志处理器中。为了避免日志被输出两次,你可以使用inherit关闭指定命名空间或者整体都不输出到root的logger中。
- #logd.additivity = false
- logd.inherit = false
- logd.inherit.darks.logs.test = true
七、综合示例
- logd.root=debug,console,FILE
- logd.appender.console=ConsoleAppender
- logd.appender.console.layout=PatternLayout
- logd.appender.console.layout.convertor=DefaultPattern
- logd.appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %c - %m%n
- logd.appender.console.async=false
- logd.appender.console.filter=LevelRangeFilter
- logd.appender.console.filter.levelMin=debug
- logd.appender.console.filter.levelMax=info
- logd.appender.console.filter.accept=false
- logd.appender.FILE=FileDateSizeAppender
- logd.appender.FILE.layout=PatternLayout
- logd.appender.FILE.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} - %m%n
- logd.appender.FILE.fileName=${user.dir}\logs\log_${Dyyyy_MM_dd_HH_mm_ss}.txt
- logd.appender.FILE.buffered=true
- logd.appender.FILE.maxSize=10485760
- logd.appender.FILE.keepDay=7
- logd.logger.darks.log.test=info
Android日志框架darks-logs使用教程的更多相关文章
- Java 日志框架终极教程
概述 对于现代的 Java 应用程序来说,只要被部署到真实的生产环境,其日志的重要性就是不言而喻的,很难想象没有任何日志记录功能的应用程序被运行于生产环境中.日志 API 所能提供的功能是多种多样的, ...
- Android开源日志框架xlog
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/144 xlog的优点 在开发过程中,避免不了要使用日志组件 ...
- 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...
- java日志框架log4j详细配置及与slf4j联合使用教程
最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...
- [转载]java日志框架log4j详细配置及与slf4j联合使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- java日志框架log4j详细配置及与slf4j使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...
- SpringBoot系列之日志框架使用教程
目录 1.SpringBoot日志级别 1).日志级别简介 2).默认日志级别 3).配置日志级别 4).日志分组设置 2.SpringBoot日志格式设置 1).默认格式原理简介 2).默认日志格式 ...
- Java程序员最常用的8个Java日志框架
转自:http://www.codeceo.com/article/8-java-log-framework.html 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用 ...
随机推荐
- day-7
/* 倒数7天了 某一天 某一刻 某次呼吸 我们终将再分离 而我的 自传里 曾经有你 没有遗憾的诗句 诗句里 充满感激 (小仙女博客抄来的233) 是啊 就快要结束了 曲终人散 上午被错误数据卡了一小 ...
- angularJs 使用中遇到的问题小结【一:关于传参】
我请教个问题 :我在界面传了一个参数<a ng-click="deleteOrder({{orderOrder}})" class="btn warning-btn ...
- (转)META http-equiv="refresh" 实现网页自动跳转
***.html自动跳转文件代码如下: <HTML> <HEAD><META http-equiv="Refresh" content="5 ...
- [XML] resources的Xml配置文件 (转载)
<?xml version="1.0" encoding="utf-8" ?> <resources> <language> ...
- 2014年10月30日-----SQL的基础知识
数据库的概念 结构化查询语言:structured query language 简称:SQL 数据库管理系统:database management system 简称:DBMS 数据库管理员:da ...
- Codevs 1081 线段树练习 2
1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的 ...
- P次方数 英雄会 csdn 高校俱乐部
题目: 一个整数N,|N| >= 2, 如果存在整数x,使得N = x * x * x... (p个x相乘) =x^p,则称N是p次方数,给定32位内的整数N,求最大的P.例如N=5,输出1,N ...
- JQuery slideToggle闪烁问题及解决办法
在使用slideToggle的时候,会出现在实现隐藏效果后闪烁一下在消失,找了很多原因,本以为是浏览器问题,后来发现是文档定义类型的问题... 原来页面的文档定义:<!DOCTYPE HTML ...
- mysql5.7.14安装与配置
参考文章链接: http://jingyan.baidu.com/article/afd8f4de9006d934e286e9fd.html http://www.cnblogs.com/wenthi ...
- Docker安装Gitlab
一.Ubuntu16.4上Docker安装Gitlab 1.安装docker 参见:https://docs.docker.com/engine/installation/linux/ubuntuli ...