当前位置: 首页 > 工具软件 > SLF4J Android > 使用案例 >

android log4j slf4j,在android中使用logback-android日志框架配置 slf4j + logback

耿招
2023-12-01

为什么使用 slf4j + logback

logbak定位于log4j的替代者,logback同样支持slf4j,方便被替换。在Android平台上,我在使用log4中遇到tag混乱的问题。相比log4j,logback-android的jar更小巧。

下载jar包

前往 https://github.com/tony19/logback-android ,下载获得 logback-android-1.1.1-4.jar  slf4j-api-1.7.6.jar

导入到工程中

将上面的两个jar文件放入项目中的libs中,并添加项目引用。

配置日志文件的位置

注意下面代码中的  configureLogbackDirectly 方法,它接收一个文件路径参数,指示存放日志文件的目录,还有一个是生成的日志文件的前缀。我下面配置了“每天生成一个新的日志文件”。

package vir56k.logdemo;

import android.os.Environment;

import org.slf4j.LoggerFactory;

import java.io.File;

import ch.qos.logback.classic.Level;

import ch.qos.logback.classic.Logger;

import ch.qos.logback.classic.LoggerContext;

import ch.qos.logback.classic.android.LogcatAppender;

import ch.qos.logback.classic.encoder.PatternLayoutEncoder;

import ch.qos.logback.classic.spi.ILoggingEvent;

import ch.qos.logback.core.rolling.RollingFileAppender;

import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;

/**

* Created by zhangyunfei on 15/9/21.

*/

public class LogConfigurator {

public static void confifure() {

final String LOG_DIR = Environment.getExternalStorageDirectory() + File.separator + "logback";

final String PREFIX = "log";

configureLogbackDirectly(LOG_DIR, PREFIX);

}

private static void configureLogbackDirectly(String log_dir, String filePrefix) {

// reset the default context (which may already have been initialized)

// since we want to reconfigure it

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();

context.reset();

RollingFileAppender rollingFileAppender = new RollingFileAppender();

rollingFileAppender.setAppend(true);

rollingFileAppender.setContext(context);

// OPTIONAL: Set an active log file (separate from the rollover files).

// If rollingPolicy.fileNamePattern already set, you don't need this.

//rollingFileAppender.setFile(LOG_DIR + "/log.txt");

TimeBasedRollingPolicy rollingPolicy = new TimeBasedRollingPolicy();

rollingPolicy.setFileNamePattern(log_dir + "/" + filePrefix + "_%d{yyyyMMdd}.txt");

rollingPolicy.setMaxHistory(7);

rollingPolicy.setParent(rollingFileAppender); // parent and context required!

rollingPolicy.setContext(context);

rollingPolicy.start();

rollingFileAppender.setRollingPolicy(rollingPolicy);

PatternLayoutEncoder encoder = new PatternLayoutEncoder();

encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");

encoder.setContext(context);

encoder.start();

rollingFileAppender.setEncoder(encoder);

rollingFileAppender.start();

LogcatAppender logcatAppender = new LogcatAppender();

logcatAppender.setContext(context);

logcatAppender.setEncoder(encoder);

logcatAppender.setName("logcat1");

logcatAppender.start();

// add the newly created appenders to the root logger;

// qualify Logger to disambiguate from org.slf4j.Logger

ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);

root.setLevel(Level.TRACE);

root.addAppender(rollingFileAppender);

root.addAppender(logcatAppender);

// print any status messages (warnings, etc) encountered in logback config

//StatusPrinter.print(context);

}

}

使用方法

先声明和创建实例

private static final Logger logger = LoggerFactory.getLogger(MainActivity.class);

写入日志

logger.debug("debug Some log message. Details: {}", "debug 输出");

logger.info("info Some log message. Details: {}", "debug 输出");

logger.error("error Some log message. Details: {}", "debug 输出");

代码混淆注意

请在你的混淆设置里加入下面这些:

-keep class ch.qos.** { *; }

-keep class org.slf4j.** { *; }

-keepattributes *Annotation*

我写的示例下载地址

参考资料:

https://github.com/tony19/logback-android

https://github.com/tony19/logback-android/wiki/Appender-Notes

http://logback.qos.ch/documentation.html

http://blog.csdn.net/zgmzyr/article/details/8267072

SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。

小结: 1.加层: 每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性. 为了解决这个问题,就是在日志框架和应用程序之间架设一个 ...

Spring Boot干货系列:(七)默认日志框架配置

Spring Boot干货系列:(七)默认日志框架配置 原创 2017-04-05 嘟嘟MD 嘟爷java超神学堂 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候, ...

Springboot入门-日志框架配置(转载)

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台. Logback是log4j框架的作者开发的新一代日志框架,它效率更高.能够适应诸多的运行环境,同时天然支 ...

springboot日志框架学习------slf4j和log4j2

springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...

slf4j/logback: logging日志的配置

slf4j/logback: logging日志的配置 import依赖: import org.slf4j.Logger;import org.slf4j.LoggerFactory;private ...

Android中常用的优秀开源框架

Android开源框架库分类,挑选出最常用,最实用的开源项目,本篇主要介绍的是优秀开源框架库和项目,UI个性化控件会独立介绍.UI个性化控件 Index Dependency Injections A ...

Android多媒体开发-- android中OpenMax的实现整体框架

1.android中用openmax来干啥? android中的AwesomePlayer就 是用openmax来做(code)编解码,其实在openmax接口设计中,他不光能用来当编解码.通过他的组 ...

Android中Universal Image Loader开源框架的简单使用

UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...

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

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

随机推荐

在jekyll模板博客中添加网易云模块

最近使用GitHub Pages + Jekyll 搭建了个人博客,作为一名重度音乐患者,博客里面可以不配图,但是不能不配音乐啊. 遂在博客里面引入了网易云模块,这里要感谢网易云的分享机制,对开发者非 ...

vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)

描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大, ...

Python学习笔记03

区间访问:[from:to:step] step默认是1:from表示起始索引(包括),to表示结束索引(不包括) step如果有符号,表示方向从右到左; from,to有符号,表示从倒数开始算, ...

zoj 3380 Patchouli's Spell Cards 概率DP

题意:1-n个位置中,每个位置填一个数,问至少有l个数是相同的概率. 可以转化求最多有l-1个数是相同的. dp[i][j]表示前i个位置填充j个位置的方案数,并且要满足上面的条件. 则: dp[i] ...

spring框架总结(04)----介绍的是Spring中的JDBC模板

1.1  Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...

Winform/WPF中内嵌BeetleX的HTTP服务

在新版本的BeetleX.FastHttpApi加入了对netstandard2.0支持,如果程序基于.NetFramework4.6.1来构建WinForm或WPF桌面程序的情况下可以直接把Beet ...

redis数据库的基础

redis数据库 redis有以下三个特点 redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用 redis不仅仅支持简单的key-value类型的数据,同时还提 ...

W3CSchool闯关笔记(初级脚本算法)

W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看 function reverseString(str) ...

Rest架构风格

一.REST介绍:: 1.REST是英文 Representational State Transfer的缩写 -- 表象化状态转变 或者 表述性状态转移 1.1 REST是 Web服务的一种架构风格 ...

DbHelper.ttinclude 更新,查询视图和表

GetDbTables(str ...

 类似资料: