一、代码
public class LogUtils {
private static boolean LOG_DEBUG = true;
private static String LOG_TAG = "Log";
private static final SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void v(String text){
if (LOG_DEBUG && !TextUtils.isEmpty(text)){
Log.i(LOG_TAG,text);
// writeToFile(text);
}
}
public static void d(String text){
if (LOG_DEBUG && !TextUtils.isEmpty(text)){
Log.e(LOG_TAG,text);
// writeToFile(text);
}
}
public static void i(String text){
if (LOG_DEBUG && !TextUtils.isEmpty(text)){
Log.i(LOG_TAG,text);
// writeToFile(text);
}
}
public static void w(String text){
if (LOG_DEBUG && !TextUtils.isEmpty(text)){
Log.i(LOG_TAG,text);
// writeToFile(text);
}
}
public static void e(String text){
if (LOG_DEBUG && !TextUtils.isEmpty(text)){
Log.e(LOG_TAG,text);
// writeToFile(text);
}
}
/**
* 将log写入文件中
* @param text
*/
private static void writeToFile(String text){
// 开始写入
FileOutputStream fileOutputStream =null;
BufferedWriter bufferedWriter = null;
try {
// 文件路径
String fileRoot = Environment.getExternalStorageDirectory().getPath() + "/Meet/";
String fileName = "Meet.log";
// 信息:时间 + 内容
String log = mSimpleDateFormat.format(new Date()) + " " + text + "\n";
// 检查父路径是否存在
File fileGroup = new File(fileRoot);
// 创建父路径
if (!fileGroup.exists()) {
// 父路径不存在则创建
fileGroup.mkdirs();
}
fileOutputStream = new FileOutputStream(fileRoot + fileName,true);
// 编码问题,使用GBK才能正确的传入中文
bufferedWriter = new BufferedWriter(
new OutputStreamWriter(fileOutputStream, Charset.forName("gbk"))
);
bufferedWriter.write(log);
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
二、Log等级介绍
Log常用的方法有以下5个:Log.v() 、Log.d() 、Log.i() 、Log.w()、Log.e() 。按照日志级别从高到低为ERROR、WARN、INFO、DEBUG、VERBOSE。其对应的Log定义在system层。
1、各种Log方法的介绍
1.1、Log.v 的输出颜色为黑色的,输出大于或等于VERBOSE日志级别的信息。
1.2、Log.d的输出颜色是蓝色的,输出大于或等于DEBUG日志级别的信息。
1.3、Log.i的输出为绿色,输出大于或等于INFO日志级别的信息。
1.4、Log.w的输出为橙色, 输出大于或等于WARN日志级别的信息。
1.5、Log.e的输出为红色,仅输出ERROR日志级别的信息。
2、各种Log级别的介绍
2.1.VERBOSE
Verbose就是冗长啰嗦的。通常表达开发调试过程中的一些详细信息,用Log.v()输出,不过滤地输出所有调试信息。是最低级的Log可以不用管。
2.2.DEBUG
Debug来表达调试信息。用Log.d()输出,能输出Debug、Info、Warn、Error级别的Log信息。
2.3.INFO
Info来表达一些信息。用Log.i()输出,能输出Info、Warn、Error级别的Log信息。
2.4.WARN
Warn表示警告,但不一定会马上出现错误,开发时有时用来表示特别注意的地方。用Log.w()输出,能输出Warning、Error级别的Log信息。
2.5.ERROR
Error表示出现错误,是最需要关注解决的。用Log.e()输出,能输出Error级别的Log信息。
注意: Info、Warn、Error等级的Log在普通调试中不随意滥用,存在发布版本中。在开发调试版本中,才会显示全部等级。
三、注意事项
1、写入文件需要添加写入权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2、在Android 11 中无法正常写入文件,请参阅Android 11 中的存储机制更新