乐乐音乐播放器(四) 日志文件

源码下载:http://www.eoeandroid.com/thread-587291-1-1.html

开发应用的时候,我们一般情况下只能在开发的时候可以看到logcat里面的日志,但是我们在日常使用应用的时候,不能时时都连电脑看bug,所以我们最好就是有一个 日志文件功能  可以将日志保存到 手机内存卡,当我们的应用 出现问题时,我们就可以查看内存卡里的 日志文件,这样我们就方便查看我们的应用 出现的问题。

1. 如果要添加日志到手机内存卡,首先要往 app 添加权限
    <!-- 往sdcard中写入数据的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <!-- 在sdcard中创建/删除文件的权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
    </uses-permission>

2.编写日志文件类
  1. package com.happy.logger;

  2. import java.io.File;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.Hashtable;

  7. import org.apache.log4j.Logger;

  8. import android.content.Context;

  9. import com.happy.common.Constants;

  10. import de.mindpipe.android.logging.log4j.LogConfigurator;

  11. public class LoggerManage {
  12.         /**
  13.          * 是否输出log
  14.          */
  15.         private final static boolean logFlag = true;

  16.         /**
  17.          * 应用名标签
  18.          */
  19.         public final static String tag = "[" + Constants.APPNAME + "]";
  20.         private String userName = null;
  21.         /**
  22.          * 保存用户对应的Logger
  23.          */
  24.         private static Hashtable<String, LoggerManage> sLoggerTable = new Hashtable<String, LoggerManage>();

  25.         private static int SDCARD_LOG_FILE_SAVE_DAYS = 3;// sd卡中日志文件的最多保存天数
  26.         private static SimpleDateFormat logfile = new SimpleDateFormat("yyyy-MM-dd");// 日志文件格式
  27.         private static Logger logger;
  28.         private static LogConfigurator logConfigurator;

  29.         public LoggerManage(String userName) {
  30.                 this.userName = userName;
  31.                 if (logger == null) {
  32.                         initLog();
  33.                         logger = Logger.getLogger(tag);
  34.                 }
  35.         }

  36.         /**
  37.          * 初始化log的相关配置
  38.          */
  39.         private void initLog() {
  40.                 logConfigurator = new LogConfigurator();

  41.                 String time = logfile.format(new Date());
  42.                 String fileName = time + ".log";
  43.                 String path = Constants.PATH_LOGCAT + File.separator + fileName;
  44.                 logConfigurator.setFileName(path);
  45.                 // 输出内容的格式
  46.                 logConfigurator.setFilePattern("%d{yyyy-MM-dd HH:mm:ss} <%m>%n%n");
  47.                 // 文件大小500k
  48.                 logConfigurator.setMaxFileSize(1024 * 500);
  49.                 // 备份
  50.                 logConfigurator.setMaxBackupSize(1);
  51.                 // 表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  52.                 logConfigurator.setImmediateFlush(true);
  53.                 logConfigurator.configure();

  54.                 cleanOldLogFile();

  55.         }

  56.         /**
  57.          * 清除过期的log文件
  58.          */
  59.         private void cleanOldLogFile() {
  60.                 File logFileParent = new File(Constants.PATH_LOGCAT);
  61.                 if (logFileParent.exists()) {
  62.                         String needDelTime = logfile.format(getDateBefore());
  63.                         File[] files = logFileParent.listFiles();
  64.                         if (files != null) {
  65.                                 for (int i = 0; i < files.length; i++) {
  66.                                         String fileName = files[i].getName();
  67.                                         fileName = fileName.substring(0, fileName.lastIndexOf("."));
  68.                                         if (needDelTime.compareTo(fileName) > 0) {
  69.                                                 files[i].delete();
  70.                                         }
  71.                                 }
  72.                         }
  73.                 }
  74.         }

  75.         /**
  76.          * 得到现在时间前的几天日期,用来得到需要删除的日志文件名
  77.          * */
  78.         private Date getDateBefore() {
  79.                 Date nowtime = new Date();
  80.                 Calendar now = Calendar.getInstance();
  81.                 now.setTime(nowtime);
  82.                 now.set(Calendar.DATE, now.get(Calendar.DATE)
  83.                                 - SDCARD_LOG_FILE_SAVE_DAYS);
  84.                 return now.getTime();
  85.         }

  86.         /**
  87.          * 
  88.          * @param userName
  89.          *            用戶名
  90.          * @return
  91.          */
  92.         public static LoggerManage getLogger(String userName) {
  93.                 LoggerManage userLogger = (LoggerManage) sLoggerTable.get(userName);
  94.                 if (userLogger == null) {
  95.                         userLogger = new LoggerManage(userName);
  96.                         sLoggerTable.put(userName, userLogger);
  97.                 }
  98.                 return userLogger;

  99.         }

  100.         /**
  101.          * 创建zhangliangming用法
  102.          * 
  103.          * @return
  104.          */
  105.         public static LoggerManage getZhangLogger(Context mContext) {
  106.                 String name = "zhangliangming";
  107.                 LoggerManage userLogger = (LoggerManage) sLoggerTable.get(name);
  108.                 if (userLogger == null) {
  109.                         userLogger = new LoggerManage(name);
  110.                         sLoggerTable.put(name, userLogger);
  111.                 }
  112.                 return userLogger;
  113.         }

  114.         /**
  115.          * 获取方法名
  116.          * 
  117.          * @return
  118.          */
  119.         private String getFunctionName() {
  120.                 StackTraceElement[] sts = Thread.currentThread().getStackTrace();
  121.                 if (sts == null) {
  122.                         return null;
  123.                 }
  124.                 for (StackTraceElement st : sts) {
  125.                         if (st.isNativeMethod()) {
  126.                                 continue;
  127.                         }
  128.                         if (st.getClassName().equals(Thread.class.getName())) {
  129.                                 continue;
  130.                         }
  131.                         if (st.getClassName().equals(this.getClass().getName())) {
  132.                                 continue;
  133.                         }
  134.                         return "@" + userName + "[url=home.php?mod=space&uid=2779]@[/url] " + "[ "
  135.                                         + Thread.currentThread().getName() + ": "
  136.                                         + st.getClassName() + ":" + st.getLineNumber() + " "
  137.                                         + st.getMethodName() + " ]";
  138.                 }
  139.                 return null;
  140.         }

  141.         public void i(String str) {
  142.                 if (logFlag) {
  143.                         String name = getFunctionName();
  144.                         if (name != null) {
  145.                                 logger.info(name + " - " + str);
  146.                         } else {
  147.                                 logger.info(str.toString());
  148.                         }
  149.                 }
  150.         }

  151.         public void d(String str) {
  152.                 if (logFlag) {
  153.                         String name = getFunctionName();
  154.                         if (name != null) {
  155.                                 logger.debug(name + " - " + str);
  156.                         } else {
  157.                                 logger.debug(str.toString());
  158.                         }
  159.                 }
  160.         }

  161.         public void f(String str) {
  162.                 if (logFlag) {
  163.                         String name = getFunctionName();
  164.                         if (name != null) {
  165.                                 logger.fatal(name + " - " + str);
  166.                         } else {
  167.                                 logger.fatal(str.toString());
  168.                         }
  169.                 }
  170.         }

  171.         public void w(String str) {
  172.                 if (logFlag) {
  173.                         String name = getFunctionName();
  174.                         if (name != null) {
  175.                                 logger.warn(name + " - " + str);
  176.                         } else {
  177.                                 logger.warn(str.toString());
  178.                         }
  179.                 }
  180.         }

  181.         public void e(String str) {
  182.                 if (logFlag) {
  183.                         String name = getFunctionName();
  184.                         if (name != null) {
  185.                                 logger.error(name + " - " + str);
  186.                         } else {
  187.                                 logger.error(str.toString());
  188.                         }
  189.                 }
  190.         }

  191. }
复制代码


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值