Android|Android 中的日志服务(log4j)
- log4j对于开发过服务端同学来说应该很熟悉,log4j也可以使用在Android项目中来。
还有Android的封装http://logging.apache.org/log4j/1.2/download.html
分别下载完后加入lib并bulid
【Android|Android 中的日志服务(log4j)】第二步,添加权限
第三部,完成log4j的配置工作
- 生成LogConfigurator对象然后配置文件位置
final LogConfigurator logConfigurator = new LogConfigurator();
//日志文件路径地址:SD卡下dingdonglog文件夹yyyy-MM-dd-IMEI.txt文件
String name = ft.format(nowtime);
StringBuilder fileName = new StringBuilder();
fileName.append(Environment.getExternalStorageDirectory().getAbsolutePath());
fileName.append("/ImdroidDeviceLog");
fileName.append("/");
fileName.append(name);
fileName.append("-");
fileName.append(String.valueOf(imei));
fileName.append("-device");
fileName.append(".txt");
String fileAllname = fileName.toString();
- 接下来进行一些常规配置
//设置root日志输出级别 默认为DEBUG
logConfigurator.setRootLevel(Level.DEBUG);
// 设置日志输出级别
logConfigurator.setLevel("org.apache", Level.DEBUG);
//设置 输出到日志文件的文字格式 默认 %d %-5p [%c{2}]-[%L] %m%n
logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");
//设置输出到控制台的文字格式 默认%m%n
logConfigurator.setLogCatPattern("%m%n");
//设置总文件大小 (1M)
logConfigurator.setMaxFileSize(1024 * 1024);
//设置最大产生的文件个数
logConfigurator.setMaxBackupSize(2);
//设置所有消息是否被立刻输出 默认为true,false 不输出
logConfigurator.setImmediateFlush(true);
//是否本地控制台打印输出 默认为true ,false不输出
logConfigurator.setUseLogCatAppender(true);
//设置是否启用文件附加,默认为true。false为覆盖文件
logConfigurator.setUseFileAppender(true);
//设置是否重置配置文件,默认为true
logConfigurator.setResetConfiguration(true);
//是否显示内部初始化日志,默认为false
logConfigurator.setInternalDebugging(false);
更多配置请参考https://blog.csdn.net/zjclugger/article/details/51576156这里面有更详细的关于log4j的配置,尤其是第一次看logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n"); 的时候有点懵。
- 最后config
logConfigurator.configure();
- 接下来就是使用了
这是一个封装好的类
public class MyLogger {
private final static boolean logFlag = true;
/**
* 日志文件
*/
private static Logger logger = Logger.getLogger("jrhb");
//public final static String tag = "[" + Constance.APP_NAME + "]";
private static String userName = "dd";
public MyLogger(String userName) {
this.userName = userName;
}/**
* 获取方法名
* @return
*/
private static String getFunctionName() {
StackTraceElement[] sts = Thread.currentThread().getStackTrace();
if (sts == null) {
return null;
}
for (StackTraceElement st : sts) {
if (st.isNativeMethod()) {
continue;
}
if (st.getClassName().equals(Thread.class.getName())) {
continue;
}
if (st.getClassName().equals(MyLogger.class.getName())) {
continue;
}
return "[ "
+ Thread.currentThread().getName() + ": "
+ st.getFileName().replace(".java","") + ":" + st.getLineNumber() + " ]";
}
return null;
}public static void info(String str) {
if (logFlag) {
String name = getFunctionName();
if (name != null) {
logger.info(name + " - " + str);
} else {
logger.info(str.toString());
}
}
}public static void debug(String str) {
if (logFlag) {
String name = getFunctionName();
if (name != null) {
logger.debug(name + " - " + str);
} else {
logger.debug(str.toString());
}
}
}public static void trace(String str) {
if (logFlag) {
String name = getFunctionName();
if (name != null) {
logger.trace(name + " - " + str);
} else {
logger.trace(str.toString());
}
}
}public static void error(String str) {
if (logFlag) {
String name = getFunctionName();
if (name != null) {
logger.error(name + " - " + str);
} else {
logger.error(str.toString());
}
}
}}
log4j 这几个方法是不是看起来有点熟悉,log4j和Android的log一样分为 info debug trace error 等几个级别。其中有一个getFunctionName方法,它主要的功能是通过获取当前的线程的堆栈,从这个方法出发找到调用Mylogger方法所在的方法名。那么我们想要打印日志的时候只需要调用 MyLogger.info("stop trans file failed."); 方法就可以了,
最后日志效果
文章图片
image.png
推荐阅读
- 热闹中的孤独
- android第三方框架(五)ButterKnife
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 日志打卡
- 放下心中的偶像包袱吧
- 带有Hilt的Android上的依赖注入
- C语言字符函数中的isalnum()和iscntrl()你都知道吗