microlog4android如何将Android Log日志写到SD

microlog4android如何将Android Log日志写到SD,第1张

我们在进行Android开发时,经常会有这种粗薯体会,由于客户的设备型号各不相同,从而导致出现多种问题,但对于研发人员,因为没有log日志文件,不太容易定位问题的具体位置。所以我们急需一个能将程序日志写到SD卡文件里的工具,类似web的log4j那样。这时microlog4android进入我们的视野,虽然它尚有不足,但也已能满足大部分需求。

使用microlog4android的步骤如下:

1、下载

到http://code.google.com/p/microlog4android/downloads/list 下载microlog4android-1.0.0.jar和microlog.properties文件。

2、建立使用logger对象

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

3、在程序的第一个activity的oncreate方法里初始化方法

PropertyConfigurator.getConfigurator(this).configure()

4、把microlog.properties文件放到assets文件夹里

注意:assets文件夹是与res文件夹平级的。

然后更改microlog.properties文件为以下内容:

microlog.level=DEBUG microlog.appender=LogCatAppenderFileAppender microlog.formatter=PatternFormatter microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T

5、写日志记录

logger.debug("这是debug信息")

6、在AndroidManifest.xml 添加写sd卡的权限

运行程序,然后到SD卡根目录,可以发现有一个microlog.txt的'文件,里面就是我们的日志了。

更改日志问价的路径和名称

有朋友问如何更改日志文件的路径和名称,在网上找了一通的资料,没找到答案,只好到https://github.com/johanlkarlsson/microlog4android 下载源代码,经过查看源代码的PropertyConfigurator类,发现源代码里有这么蔽凳清一个配置参数microlog.appender.FileAppender.File,这样应该就可以更改日志文件的路径和名称了。

配置文件如下:

microlog.level=DEBUG microlog.appender=FileAppenderLogCatAppender microlog.appender.FileAppender.File=mylog.txt microlog.formatter=PatternFormatter microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T

运行程序,发现日志文件还是叫microlog.txt,更改名称无效,找了各种原因都无法解决,只好反编译我们之前下载的microlog4android-1.0.0.jar包,发现PropertyConfigurator这个类和刚刚从GIT下载的源代码PropertyConfigurator类不一样,microlog4android-1.0.0.jar包里的PropertyConfigurator类没有这样的一个宏前参数microlog.appender.FileAppender.File,只好把从GIT下载下来的源代码,重新打个包,暂时打成microlog4android-1.1.jar,然后重新运行程序,OK,搞定,日志文件名称变成了我们配置的mylog.txt。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Logger来自log4j自己的包。如果用Logger.getLogger,需要一个log4j的jar包,用此方式你只能依靠log4j:

LogFactory来自common-logging包。如果用LogFactory.getLog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响。apache的common-logging包是通用日志接口,通过这个中间层基粗,你可以随便指定到底用哪个日志系统。增加系统的灵活性。若log4j它不存在, commons-logging 会另行选择其它的日志实现类。 这样保证了程序中不一定要使用log4j这个日志文件了

增强灵活性的理由:

1)首先在 classpath 下寻找自己的配置文件 commons-logging.properties ,如果找到,则使用其中定义的 Log 实现类;

2) 如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量 org.apache.commons.logging.Log ,找到则使用其定义的 Log 实现类;

3) 否则,查看 classpath 中是否有 Log4j 的包,如果发现,则自动使用 Log4j 作为日志实现类;

4) 否则,使用 JDK 自身的日志实现类( JDK1.4 以后才有日志实现类)粗升;

5) 否则,使用 commons-logging 自己提供的一个简单的日志实现类 SimpleLog ;

为了简化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 Log4j 的 Jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 Log4j 的融合。

根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试( DEBUG )”“信息( INFO )”“警告( WARN )”“错误(ERROR )”“致命错误( FATAL )搏凳镇”。

关于log4j2的初始化流程,现在项目基本都是springboot项目,就需要结合 springboot 源码来解析,这块可以参考 Springboot - Log4J2LoggingSystem源码解析

因为spring-boot-starter依赖中日志使用的是spring-boot-starter-logging,这里面是用的是logback,所以需要先剔除此依赖

再添加log4j2依赖

如果我们想使用 yml 后缀渗贺的配置文件还需要再加一个依赖

然后相关依赖版本如下

以下源码基于 log4j 2.7。

先看一张log4j官方提供的类图

先简单了解一下这些类

过滤器的种类高举也很多,比如根据日志级别。Filter会返回一个枚举值Filter.Result,有三种:

详细参见 log4j - Filters

log4j的初始化流程实在有点饶,这里简要讲讲。

LoggerFactory#getLogger(String)

在只有一个log4j2的依赖时,加载流程大致如下:

在 getILoggerFactory() 方法中做了这么几件事

再看下 log4j2 的 StaticLoggerBinder 源码

下一篇看看后续Logger的获取。

添加 logback 依赖(直接放开 spring-boot-starter-logging 也行),这样我们项戚喊碧目就有两个 org/slf4j/impl/StaticLoggerBinder.class 了

然后启动,提示

我的疑问就是为啥不用log4j2而用logback,就打开这个网址查了下,里面最后有一段

告诉我们

好吧,随机的我也是醉了。。

参考

http://logging.apache.org/log4j/2.x/log4j-users-guide.pdf

http://www.slf4j.org/codes.html#multiple_bindings

回家,风雨兼程。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12284445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存