扩展 Android.util.Log 以写入文件
Posted
技术标签:
【中文标题】扩展 Android.util.Log 以写入文件【英文标题】:extend Android.util.Log to write to file 【发布时间】:2013-09-10 08:29:09 【问题描述】:我想扩展android.util.Log
类,使其也写入设备内部存储中的日志文件,最好也写入特定的TAGS
。
我目前有一个实现:
public class CustomLogger
private final static Logger fileLog = Logger.getLogger(MainActivity.class);
private Context context;
public CustomLogger(Context c)
this.context = c;
final LogConfigurator logConfigurator = new LogConfigurator();
logConfigurator.setFileName(context.getFilesDir() + File.separator + "myApp.log");
logConfigurator.setRootLevel(Level.DEBUG);
logConfigurator.setLevel("org.apache", Level.ERROR);
logConfigurator.configure();
public void i(String TAG, String message)
// Printing the message to LogCat console
Log.i(TAG, message);
// Write the log message to the file
fileLog.info(TAG+": "+message);
public void d(String TAG, String message)
Log.d(TAG, message);
fileLog.debug(TAG+": "+message);
正如您所见,此自定义记录器记录到内部存储上的日志文件(使用android-logging-log4j
库)和通过android.util.Log
类。
但是我想在我的日志文件中使用来自android.util.Log
类的标准日志条目,如果可能的话,只需要某些(自定义)TAGS
。
任何人有一个例子或任何好的提示来达到这个目标?
提前致谢
【问题讨论】:
Write android logcat data to a file的可能重复 【参考方案1】:您可以通过编程方式读取 log cat 并将其存储到文本文件中,也可以将其发送到任何您想要的地方。
下面是我写的详细文章:
Read & Store Log-cat Programmatically in Android
为了阅读 logcat,这里是示例代码:
public class LogTest extends Activity
private StringBuilder log;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
log=new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null)
log.append(line);
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(log.toString());
catch (IOException e)
//convert log to string
final String logString = new String(log.toString());
//create text file in SDCard
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/myLogcat");
dir.mkdirs();
File file = new File(dir, "logcat.txt");
try
//to write logcat in text file
FileOutputStream fOut = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
// Write the string to the file
osw.write(logString);
osw.flush();
osw.close();
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
【讨论】:
【参考方案2】:所以有更短的变体
try
final File path = new File(
Environment.getExternalStorageDirectory(), "DBO_logs5");
if (!path.exists())
path.mkdir();
Runtime.getRuntime().exec(
"logcat -d -f " + path + File.separator
+ "dbo_logcat"
+ ".txt");
catch (IOException e)
e.printStackTrace();
【讨论】:
执行 logcat 安全吗?我的意思是,你能指望它保证可用吗?您的应用是否需要某些权限?以上是关于扩展 Android.util.Log 以写入文件的主要内容,如果未能解决你的问题,请参考以下文章