您的位置:首页 > 其它

程序中输出的各种日志信息类并写入日志文件

2013-05-11 10:15 489 查看
相信在开发应用的过程中,日志的输出是相当重要的,当你测试bug时,日志能帮你快速定位问题,

因此一个日志类的好坏关系到了你应用的开发速度,正确率等,是相当重要的,在些分享一个日志类,

实现了各种日志信息的记录,并会写入到SD卡的文件当中,在有bug时可以叫测试人员将此文件发回

来定位问题。

代码:
package com.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.http.Header;

import android.app.Activity;
import android.content.Intent;
import android.os.Environment;

/**
* 日志打印类,提供了一个开关来决定是否打印日志
*/
public class AspLog
{

public final static String STARTUP_TAG = "startup_log";
private static String path = "/sdcard/mm/mmdebugversion_com.mm.txt";
private static boolean isFirst = true;

public static void setIsPrintLog() {
try {
if (new File(path).exists())
isPrintLog = true;
isFirst = false;
} catch (Exception ex) {
}
}

public static void setIsPrintLog(Activity acti)
{
try
{
Intent intent = acti.getIntent();
// 文件是否存在
File file = new File(path);
if(file.exists())
{
isPrintLog = true;
}
// intent内是否有数据
if(isPrintLog == false)
{
isPrintLog = intent.getBooleanExtra("com.mm.debug",
false);

if(isPrintLog == true)
{
file.createNewFile();
}
}

isFirst = false;

}
catch (Exception ex)
{

}
}

private static void checkLog()
{
if(isFirst == true)
{
File file = new File(path);
if(file.exists())
{
isPrintLog = true;
}
isFirst = false;
}
createLogFile();
}

public static boolean isPrintLog = true;
public static boolean isPrintSDcardLog = true;
public static boolean isWriteToFile = false;
private static final boolean isShowLoginSuc = false;
private final static String LOG_FILEPATH = "mm" + File.separator + "log" + File.separator;
//	private final static String LOG_CFGFILE = "mmlog.cfg";
private final static String LOG_FILENAME = "mmlog";
private final static String LOG_FILEEXT = ".txt";
private static File mLogFile;

private final static long LOGFILE_LIMIT = 1000000L;
private final static SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final static SimpleDateFormat DATEFORMAT1 = new SimpleDateFormat("yyyyMMddHHmmss");
private static String mSdcardRootPath = "/sdcard/";
private static final String SHOW_CFGFILE = "mmloginsuccess.cfg";

public static void print(String msg)
{
checkLog();
if(isPrintLog)
{
System.out.print(msg == null ? "" : msg);
}
writeLogFile("", "", msg);
}

private static void createLogFile()
{
if(isWriteToFile)
{
synchronized (LOG_FILENAME)
{
if(mLogFile == null)
{
try
{
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)){
return;
}

//						File sdcardRootPath = Environment.getExternalStorageDirectory();
mSdcardRootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;

//						File cfgfile = new File(mSdcardRootPath + LOG_CFGFILE);
//						if(!cfgfile.exists()){//没用开启配置文件则不写日志文件
//							return;
//						}

File logpath = new File(mSdcardRootPath + LOG_FILEPATH);
if(!logpath.exists()){
logpath.mkdir();
}

mLogFile = new File(mSdcardRootPath + LOG_FILEPATH + LOG_FILENAME
+ LOG_FILEEXT);
if(!mLogFile.exists())
{
AspLog.d("TestFile", "Create the file:"
+ LOG_FILENAME);
mLogFile.createNewFile();
}

}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
if(mLogFile.isFile())
{
if(mLogFile.length() > LOGFILE_LIMIT)
{
StringBuffer sb = new StringBuffer(mSdcardRootPath);
sb.append(LOG_FILEPATH);
sb.append(LOG_FILENAME);
sb.append(DATEFORMAT1.format(new Date()));
sb.append(LOG_FILEEXT);
mLogFile.renameTo(new File(sb.toString()));
sb = null;
sb = new StringBuffer(mSdcardRootPath);
sb.append(LOG_FILEPATH);
sb.append(LOG_FILENAME);
sb.append(LOG_FILEEXT);
mLogFile = new File(sb.toString());
sb = null;
if(!mLogFile.exists())
{
AspLog.d("TestFile", "Create the file:"
+ LOG_FILENAME + LOG_FILEEXT);
try
{
mLogFile.createNewFile();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
}
}
}

private static void writeLogFile(String level, String tag, String msg)
{
if(isWriteToFile)
{
synchronized (LOG_FILENAME)
{
if(mLogFile != null)
{

StringBuffer sb = new StringBuffer();
sb.append(DATEFORMAT.format(new Date()));
sb.append(": ");
sb.append(level);
sb.append(": ");
sb.append(tag);
sb.append(": ");
sb.append(msg);
sb.append("\n");
RandomAccessFile raf = null;
try
{
raf = new RandomAccessFile(mLogFile, "rw");
raf.seek(mLogFile.length());
raf.write(sb.toString().getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();

}
catch (IOException e)
{
e.printStackTrace();

}
finally
{
sb = null;
if(raf != null)
{
try
{
raf.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
}
}
}

public static void println(String msg)
{
checkLog();
if(isPrintLog)
{
System.out.println(msg == null ? "" : msg);
}
writeLogFile("", "", msg);
}

public static void i(String tag, String msg)
{
checkLog();
if(isPrintLog)
{
android.util.Log.i(tag, msg == null ? "" : msg);
}

writeLogFile("INFO", tag, msg);
}

public static void i(String tag, String msg, Throwable tr)
{
checkLog();
if(isPrintLog)
{
android.util.Log.i(tag, msg == null ? "" : msg, tr);
}
writeLogFile("INFO", tag, msg);
}

public static void d(String tag, String msg)
{
checkLog();
if(isPrintLog)
{
android.util.Log.d(tag, msg == null ? "" : msg);
}
writeLogFile("DEBUG", tag, msg);
}

public static void d(String tag, String msg, Throwable tr)
{
checkLog();
if(isPrintLog)
{
android.util.Log.d(tag, msg == null ? "" : msg, tr);
}
writeLogFile("DEBUG", tag, msg);
}

public static void e(String tag, String msg)
{
checkLog();
if(isPrintLog)
{
android.util.Log.e(tag, msg == null ? "" : msg);
}
writeLogFile("ERROR", tag, msg);
}

public static void e(String tag, String msg, Throwable tr)
{
checkLog();
if(isPrintLog)
{
android.util.Log.e(tag, msg == null ? "" : msg, tr);
}
writeLogFile("ERROR", tag, msg);
}

public static void v(String tag, String msg)
{
checkLog();
if(isPrintLog)
{
android.util.Log.v(tag, msg == null ? "" : msg);
}
writeLogFile("VERBOSE", tag, msg);
}

public static void v(String tag, String msg, Throwable tr)
{
checkLog();
if(isPrintLog)
{
android.util.Log.v(tag, msg == null ? "" : msg, tr);
}
writeLogFile("VERBOSE", tag, msg);
}

public static void w(String tag, String msg)
{
checkLog();
if(isPrintLog)
{
android.util.Log.w(tag, msg == null ? "" : msg);
}
writeLogFile("WARN", tag, msg);
}

public static void w(String tag, String msg, Throwable tr)
{
checkLog();
if(isPrintLog)
{
android.util.Log.w(tag, msg == null ? "" : msg, tr);
}
writeLogFile("WARN", tag, msg);
}

public static void save2sd(String filename, String data)
{

File file = new File("/sdcard/mm");
if(!file.isDirectory())
{
if(file.exists())
file.delete();
file.mkdir();
}
file = new File("/sdcard/mm/" + filename);
int index = -1;
index = filename.lastIndexOf('/');
if(index > 0)
{
filename = filename.substring(index + 1);
}
index = filename.lastIndexOf('.');
String basename, extname;
if(index > 0)
{
basename = filename.substring(0, index);
extname = filename.substring(index);
}
else
{
basename = filename;
extname = "";
}
index = 0;
while (file.exists())
{
file = null;
file = new File("/sdcard/mm/" + basename + (index++) + extname);
}
FileOutputStream fos = null;
try
{
file.createNewFile();
fos = new FileOutputStream(file, true);
fos.write(data.getBytes());
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(fos != null)
{
try
{
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
fos = null;
}
}
}

public static void h(String tag, String hintmsg, Header[] headers)
{
checkLog();
if(isPrintLog && headers != null)
{
// HeaderElement he[] = null;
int k = 0;
StringBuilder sb = new StringBuilder();
for (Header h : headers)
{
sb.setLength(0);
sb.append(hintmsg + " H" + (k++) + " " + h.getName() + " : "
+ h.getValue());
// he = h.getElements();
// if (he != null){
// sb.append(" he-> ");
// i = 0;
// for (HeaderElement e:he){
// if (i > 0)
// sb.append(",");
// sb.append(e.getName()+"="+e.getValue());
// i ++ ;
// }
// }
AspLog.v(tag, sb.toString());
}
}
}

/**
* 是否一直显示登录成功提示toast,只用于调试,测试验证,拨测
* @return
*/
public static boolean isShowLoginSuccess(){
if(!isShowLoginSuc){
return false;
}
File cfgfile = new File(mSdcardRootPath + SHOW_CFGFILE);
if(!cfgfile.exists()){//没有开启配置文件则不显示
return false;
}
return true;
}
}


更多的移动互联网的发展趋势app开发移动互联网应用相关的资料请到互联网的一点事www.yidin.net 留言

android QQ群:222392467

资料:
http://www.yidin.net/?p=8280 http://www.yidin.net/?p=9725 http://yidinshi.blog.51cto.com/7142195/1197889
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐