android 有自带的log但是不能很方便的保存到文件.
就用了第三方的jar包来支援了.
apache的log4j
slf4j
android-logging-log4j
导入以上jar包,然后写代码配置
//先设置文件log要保存的目录和文件名
File appLogFile = new File(XApplication.getInstance().getRootWorkDir()//
+ File.separator + LOG_FILE_PATH + File.separator, LOG_FILE_NAME);
addFileLogger(appLogFile.getPath());
addLogCatLogger();
这里有一个问题,在文件名没有后缀名的时候会出现一些奇怪的问题.建议加入后缀名.
/**
* 添加文件日志管理
*
* @param logfile
*/
private void addFileLogger(String logfile) {
try {
/**
* 文件log格式 输出的格式
* 2014-08-17 19:30:21,688 [ERROR][com.xxx.xxx.activity@Thread-150]
*/
private String fileLogLayoutPatten = "%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p][%c@%t] - %m%n";
Appender appender = new DailyRollingFileAppender(new PatternLayout(fileLogLayoutPatten), logfile,
"yyyy-MM-dd");
LevelRangeFilter f = new LevelRangeFilter();
f.setLevelMin(fileLevel);
appender.addFilter(f);
Logger rootLogger = getRootLogger();
rootLogger.addAppender(appender);
} catch (IOException e) {
Log.e("Log4jConfigurator", "Failed to create log file " + logfile, e);
}
}
以上为文件log
/**
* 添加LogCat的日志(控制台)
*/
private void addLogCatLogger() {
LogCatAppender logCatAppender = new LogCatAppender(new PatternLayout());
LevelRangeFilter f = new LevelRangeFilter();
f.setLevelMin(logcatLevel);
logCatAppender.addFilter(f);
Logger rootLogger = getRootLogger();
rootLogger.addAppender(logCatAppender);
}
以上为LogCat
/**
*
* @return
*/
private Logger getRootLogger() {
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(rootLevel);
return rootLogger;
}
//此处为 org.slf4j.Logger 便于切换
Logger log = LoggerFactory.getLogger(xxx.class);
Log4j添加文件附加时有两种
一种是DailyRollingFileAppender按日期生成新文件.
一种是RollingFileAppender按log文件最大长度限度生成新文件.