android log4j 将日志自动发送到邮箱,Android 中的日志服务(log4j)

log4j对于开发过服务端同学来说应该很熟悉,log4j也可以使用在Android项目中来。

第二步,添加权限

第三部,完成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.");方法就可以了,

最后日志效果

6dc4ba16cd5c

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值