概述

在我们日常的开发中,肯定是少不了要和 Log 打交道,回想一下我们是怎么使用 Log 的:先定义一个静态常量 TAG,TAG 的值通常是当前类的类名,然后在需要打印 Log 的地方,调用 Log.d(TAG, "要打印的内容")。每次新写一个类,都要写一个 TAG,这也就算了,最苦逼的是,项目一上线,还要手动去把每个 Log 注释掉。。。

当然,有的同学可能要说,这又没什么,自己封装一个 Log 不就行了。但是对新手来说,自己封装有一定的难度,如果有现成的开源库可以直接拿来用就好了。


功能

线程的信息
类的信息
方法的信息
将 JSON
文本人性化输出
将换行符人性化输出
简洁的输出
从日志跳转到源码


使用

1.导入依赖

compile 'com.orhanobut:logger:1.15'

2.使用

Logger.d("执行了 onCreate");
Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);Logger.d(list);
Logger.d(map); Logger.d(set);
Logger.d("hello %s %d", "world", 5);

自定义 TAG如果你不满意默认的TAG

也可以自己定义一个 TAG,只需要调用一次 Logger.init() 就行了。因为只需要调用一次,所以可以在 Application 中来完成 Logger 的初始化。新建 MyApplication 继承 Application,代码如下:

public class MyApplication extends Application {
  private static String TAG = "LoggerTest";
  @Override
  public void onCreate() {
    super.onCreate();
    Logger.init(TAG);
  }
}

修改 AndroidManifest.xml 中 application 的属性,添加 android:name=".MyApplication" ,AndroidManifest.xml 代码如下:这样 App 启动时,初始化的就是我们自定义的 MyApplication 了。然后我们在 MainActivity 的 onCreate() 中打印一下日志,看下自定义的 TAG 生效了没。可以看到,我们自定义的 TAG 已经生效了。那么有的同学可能会有疑问了,我要是不想一直用这个 TAG 呢,要是临时想换个 TAG 用呢,当然也是有办法的,调用 Logger.t("临时TAG名").d() ,就能使用临时的 TAG 打印日志了。可以看到,临时的 TAG 名被追加到自定义 TAG 的后面了。


设置不打印日志
之前说了,日志只是开发的时候需要用到,等到项目上线就不能用了。Logger
当然也考虑到了这一点,通过设置 Logger.init(TAG).logLevel(LogLevel.NONE) 可以设置为不打印日志。logLevel()
方法默认的参数是 LogLevel.FULL,也就是打印全部日志。修改 MyApplication 的 onCreate() 方法:

@Override
public void onCreate() {
  super.onCreate();
  Logger.init(TAG).logLevel(LogLevel.NONE);
}

打印 Exception
Logger 打印 Exception,可以很清晰的看到 Exception 信息,这里我们写一个数组越界异常:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); int[] a = new int[3];
try {
a[4] = 3;
} catch (Exception e) {
Logger.e(e, "message");
}
}

个性化设置

Logger.init(TAG)
.methodCount(3) // 方法栈打印的个数,默认是 2
.hideThreadInfo() // // 隐藏线程信息,默认显示
.methodOffset(2) // 设置调用堆栈的函数偏移值,默认是 0
.logAdapter(new AndroidLogAdapter()); // 自定义一个打印适配器

日志框架之Logger的更多相关文章

  1. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器

    一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...

  2. python 简单日志框架 自定义logger

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 通常我们在构建 python 系统时,往往需要一个简单的 logging 框架.python 自 ...

  3. 深入理解Logger日志——框架绑定原理

    深入理解Logger日志--框架绑定原理 说到Logger日志的动态绑定,主要归功与Slf4j,在之前的文章也说过,Slf4j是类似于Apache Common-Logging,英文为Simple L ...

  4. 解读ASP.NET 5 & MVC6系列(9):日志框架

    框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...

  5. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

  6. java日志框架slf4j与log4j

    日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4 ...

  7. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  8. log4net 日志框架的配置

    log4net 日志框架的配置——静态文件(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2 ...

  9. Java程序员最常用的8个Java日志框架

    转自:http://www.codeceo.com/article/8-java-log-framework.html 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用 ...

随机推荐

  1. Java编程思想第四版完整中文高清版.pdf

    Java编程思想第四版完整中文高清版.pdf 链接: https://pan.baidu.com/s/1vV5BHF3L-bnaG6WGurdJ_A 提取码: vigy 复制这段内容后打开百度网盘手机 ...

  2. Google Chrome Keyboard Shortcuts

    Navigation To do this Press this Open a new window Ctrl + N Open a new tab Ctrl + T Open a new windo ...

  3. Java WEB框架——SSM之Hello world

    一.建立项目 先搭建一个webapp项目(要选creat from arctype) 起名 选择maven路径,settings.xml那里要选择override才可以在资源管理器中浏览.接下来直接N ...

  4. ZJOI2013 K大数查询 和 LG3380【模板】二逼平衡树(树套树)

    K大数查询 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c:如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的 ...

  5. 原生 JS实现一个简单分页插件

    最近做的一个 PC端的需求,这个需求中有一个小点,页面底部有一块列表区域,这个列表的数据量比较大,需要进行分页控制,切换页码的时候,发送一个 ajax请求,在页面无刷新的情况下,实现列表数据的刷新,所 ...

  6. 数据库中char和varchar的区别

    1. char类型的长度是固定的,varchar的长度是可变的. 这就表示,存储字符串'abc',使用char(10),表示存储的字符将占10个字节(包括7个空字符) 使用varchar2(10),, ...

  7. tornado框架自定义中间件过程中的一些基础技术(1)

    为了检查当前请求是否在用户的权限列表中,我们需要获取uri(也就是当前链接),下列代码说明了获取的过程,也证明了python魔术方法的重要性class testHandler(RequestHandl ...

  8. Java的日期与时间 java.time.Duration (转)

    一个Duration对象表示两个Instant间的一段时间,是在Java 8中加入的新功能. 一个Duration实例是不可变的,当创建出对象后就不能改变它的值了.你只能通过Duration的计算方法 ...

  9. WPF程序发布有关事项

  10. if语句分析

    1.if语句的反汇编判断 if语句反汇编后的标志:     执行各类影响标志位的指令             jxx xxxx 如果遇到上面的指令,则很可能是if语句:   例如:     1.案例一 ...