안드로이드 장치에서 로그 파일을 얻는 방법은 무엇입니까?
장치에서 내 PC로 로그 파일을 가져오고 싶습니다. 어떻게해야합니까?
Logcollector 는 좋은 옵션이지만 먼저 설치해야합니다.
로그 파일을 우편으로 보내려면 일반적으로 다음을 수행하십시오.
- 장치를 PC에 연결하십시오.
- 특정 장치에 대해 이미 OS를 설정했는지 확인하십시오 .
- 터미널을 엽니 다
- 운영
adb shell logcat > log.txt
이 코드가 누군가를 돕기를 바랍니다. 장치에서 로깅하는 방법을 파악하고 필터링하는 데 2 일이 걸렸습니다.
public File extractLogToFileAndWeb(){
//set a file
Date datum = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY);
String fullName = df.format(datum)+"appLog.log";
File file = new File (Environment.getExternalStorageDirectory(), fullName);
//clears a file
if(file.exists()){
file.delete();
}
//write log to file
int pid = android.os.Process.myPid();
try {
String command = String.format("logcat -d -v threadtime *:*");
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder result = new StringBuilder();
String currentLine = null;
while ((currentLine = reader.readLine()) != null) {
if (currentLine != null && currentLine.contains(String.valueOf(pid))) {
result.append(currentLine);
result.append("\n");
}
}
FileWriter out = new FileWriter(file);
out.write(result.toString());
out.close();
//Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath());
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
//clear the log
try {
Runtime.getRuntime().exec("logcat -c");
} catch (IOException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
return file;
}
@mehdok가 지적한대로
로그 읽기 권한을 매니페스트에 추가
<uses-permission android:name="android.permission.READ_LOGS" />
나는 이런 종류의 것을 사용할 것입니다 :
$adb logcat -d > logcat.txt
-d 옵션은 전체 순환 버퍼를 텍스트 파일로 덤프하며 특정 조치 / 의도를 찾으려면 시도하십시오.
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
도움이 되었기를 바랍니다 :)
For those not interested in USB debugging or using adb
there is an easier solution. In Android 6 (Not sure about prior version) there is an option under developer tools: Take Bug Report
Clicking this option will prepare a bug report and prompt you to save it to drive or have it sent in email.
I found this to be the easiest way to get logs. I don't like to turn on USB debugging.
EDIT:
The internal log is a circular buffer in memory. There are actually a few such circular buffers for each of: radio, events, main. The default is main.
To obtain a copy of a buffer, one technique involves executing a command on the device and obtaining the output as a string variable.
SendLog is an open source App which does just this: http://www.l6n.org/android/sendlog.shtml
The key is to run logcat
on the device in the embedded OS. It's not as hard as it sounds, just check out the open source app in the link.
Often I get the error "logcat read: Invalid argument
". I had to clear the log, before reading from the log.
I do like this:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
A simple way is to make your own log collector methods or even just an existing log collector app from the market.
For my apps I made a report functionality which sends the logs to my email (or even to another place - once you get the log you can do whether you want with it).
Here is a simple example about how to get the log file from a device:
Simple just run the following command to get the output to your terminal:
adb shell logcat
I know it's an old question, but I believe still valid even in 2018.
There is an option to Take a bug report hidden in Developer options in every android device.
NOTE: This would dump whole system log
How to enable developer options? see: https://developer.android.com/studio/debug/dev-options
What works for me:
- Restart your device (in order to create minimum garbage logs for developer to analyze)
- Reproduce your bug
- Go to Settings -> Developer options -> Take a bug report
- Wait for Android system to collect the logs (watch the progressbar in notification)
- Once it completes, tap the notification to share it (you can use gmail or whetever else)
how to read this? open bugreport-1960-01-01-hh-mm-ss.txt
you probably want to look for something like this:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main
or:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Thanks to user1354692 I could made it more easy, with only one line! the one he has commented:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
I have created a small library (.aar) to retrieve the logs by email. You can use it with Gmail accounts. It is pretty simple but works. You can get a copy from here
The site is in Spanish, but there is a PDF with an english version of the product description.
I hope it can help.
Two steps:
- Generate the log
- Load Gmail to send the log
.
Generate the log
File generateLog() { File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder"); if (!logFolder.exists()) { logFolder.mkdir(); } String filename = "myapp_log_" + new Date().getTime() + ".log"; File logFile = new File(logFolder, filename); try { String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" }; Runtime.getRuntime().exec(cmd); Toaster.shortDebug("Log generated to: " + filename); return logFile; } catch (IOException ioEx) { ioEx.printStackTrace(); } return null; }
Load Gmail to send the log
File logFile = generateLog(); Intent intent = new Intent(Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile)); intent.setType("multipart/"); startActivity(intent);
References for #1
~~
For #2 - there are many different answers out there for how to load the log file to view and send. Finally, the solution here actually worked to both:
- load Gmail as an option
- attaches the file successfully
Big thanks to https://stackoverflow.com/a/22367055/2162226 for the correctly working answer
First make sure adb command is executable by setting PATH to android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
then run:
adb shell logcat > log.txt
OR first move to adb platform-tools:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
then run
./adb shell logcat > log.txt
참고URL : https://stackoverflow.com/questions/2882253/how-do-i-get-the-logfile-from-an-android-device
'Programing' 카테고리의 다른 글
Visual Studio 2008에서 후행 공백을 자동으로 제거하는 방법은 무엇입니까? (0) | 2020.07.14 |
---|---|
잡히지 않는 오류 : SECURITY_ERR : 쿠키를 설정하려고 할 때 DOM 예외 18 (0) | 2020.07.14 |
Android Studio 실행 오류 (0) | 2020.07.14 |
Java 웹 애플리케이션에 대한 Javascript 축소를 어떻게 자동화합니까? (0) | 2020.07.13 |
필드 정렬이 기본 유형인지 사용자 정의인지에 따라 구조체 정렬이 왜 달라 집니까? (0) | 2020.07.13 |