নমুনা অ্যাপ্লিকেশন এবং ডিবাগিংয়ের উদ্দেশ্যে, আমি একটি সহজ সমাধান ব্যবহার করি যা ডিভাইসের এসডি কার্ডে স্ট্যাকট্রেস লিখতে এবং / অথবা এটি একটি সার্ভারে আপলোড করতে দেয়। এই সমাধানটি প্রকল্প অ্যান্ড্রয়েড-রিমোট-স্ট্যাকট্রেস দ্বারা অনুপ্রাণিত হয়েছে (বিশেষত, সেভ-টু-ডিভাইস এবং আপলোড-টু-সার্ভার অংশগুলি) এবং আমি মনে করি এটি সুনিল দ্বারা উল্লিখিত সমস্যা সমাধান করে। এটি সর্বোত্তম নয়, তবে এটি কাজ করে এবং আপনি যদি কোনও উত্পাদন প্রয়োগে এটি ব্যবহার করতে চান তবে আপনি এটি উন্নত করতে পারেন। আপনি যদি সার্ভারে স্ট্যাকট্রেসগুলি আপলোড করার সিদ্ধান্ত নেন তবে index.php
সেগুলি দেখার জন্য আপনি একটি পিএইচপি স্ক্রিপ্ট ( ) ব্যবহার করতে পারেন । আপনি যদি আগ্রহী হন তবে আপনি নীচের সমস্ত উত্সগুলি খুঁজে পেতে পারেন - আপনার আবেদনের জন্য একটি জাভা ক্লাস এবং আপলোড করা স্ট্যাকট্রেস হোস্টিং সার্ভারের জন্য দুটি alচ্ছিক পিএইচপি স্ক্রিপ্ট।
একটি প্রসঙ্গে (যেমন মূল ক্রিয়াকলাপ), কল করুন
if(!(Thread.getDefaultUncaughtExceptionHandler() instanceof CustomExceptionHandler)) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
"/sdcard/<desired_local_path>", "http://<desired_url>/upload.php"));
}
CustomExceptionHandler
public class CustomExceptionHandler implements UncaughtExceptionHandler {
private UncaughtExceptionHandler defaultUEH;
private String localPath;
private String url;
/*
* if any of the parameters is null, the respective functionality
* will not be used
*/
public CustomExceptionHandler(String localPath, String url) {
this.localPath = localPath;
this.url = url;
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}
public void uncaughtException(Thread t, Throwable e) {
String timestamp = TimestampFormatter.getInstance().getTimestamp();
final Writer result = new StringWriter();
final PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
String stacktrace = result.toString();
printWriter.close();
String filename = timestamp + ".stacktrace";
if (localPath != null) {
writeToFile(stacktrace, filename);
}
if (url != null) {
sendToServer(stacktrace, filename);
}
defaultUEH.uncaughtException(t, e);
}
private void writeToFile(String stacktrace, String filename) {
try {
BufferedWriter bos = new BufferedWriter(new FileWriter(
localPath + "/" + filename));
bos.write(stacktrace);
bos.flush();
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void sendToServer(String stacktrace, String filename) {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("filename", filename));
nvps.add(new BasicNameValuePair("stacktrace", stacktrace));
try {
httpPost.setEntity(
new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
httpClient.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
}
}
upload.php
<?php
$filename = isset($_POST['filename']) ? $_POST['filename'] : "";
$message = isset($_POST['stacktrace']) ? $_POST['stacktrace'] : "";
if (!ereg('^[-a-zA-Z0-9_. ]+$', $filename) || $message == ""){
die("This script is used to log debug data. Please send the "
. "logging message and a filename as POST variables.");
}
file_put_contents($filename, $message . "\n", FILE_APPEND);
?>
index.php
<?php
$myDirectory = opendir(".");
while($entryName = readdir($myDirectory)) {
$dirArray[] = $entryName;
}
closedir($myDirectory);
$indexCount = count($dirArray);
sort($dirArray);
print("<TABLE border=1 cellpadding=5 cellspacing=0 \n");
print("<TR><TH>Filename</TH><TH>Filetype</th><th>Filesize</TH></TR>\n");
for($index=0; $index < $indexCount; $index++) {
if ((substr("$dirArray[$index]", 0, 1) != ".")
&& (strrpos("$dirArray[$index]", ".stacktrace") != false)){
print("<TR><TD>");
print("<a href=\"$dirArray[$index]\">$dirArray[$index]</a>");
print("</TD><TD>");
print(filetype($dirArray[$index]));
print("</TD><TD>");
print(filesize($dirArray[$index]));
print("</TD></TR>\n");
}
}
print("</TABLE>\n");
?>