这是我的第一个问题,因此任何有关技术的建议都会有用。 :)
背景:我正在开发有限用户群使用的应用程序,我永远不会把它放在商店上。应用程序有时会在客户端设备上遇到一些麻烦,因为我无法访问设备,因此对我来说完全访问logcat似乎非常有用。我知道我必须给用户“调试”应用程序版本 - 这不是问题。
所以我想实现允许用户(例如我的请求)将logcat重定向到文件的功能,这可以发送给我。我已经实现了重定向到文件,但我希望允许用户禁用保存到文件,因为它变得非常快。
重定向到文件我正在使用
private void jButton2ActionPerformed(java.awt.event.ActionEventevt){
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con;
con=DriverManager.getConnection("jdbc:odbc:Database2");
try (Statement stmt = con.createStatement()) {
String a=jTextField2.getText();
String b=jTextField3.getText();
String c=jTextField4.getText();
String d=jTextField5.getText();
String e=jTextField12.getText();
String f= jTextField13.getText();
String g = jTextField14.getText();
int query;
query =stmt.executeUpdate("INSERT INTO ProductDatabase" + " (Id, Product, Price, Discount, Stock, Sold, Left)" + "VALUES('"+(a)+"','"+(b)+"','"+(c)+"','"+(d)+"','"+(e)+"','"+(f)+"','"+(g)+"')"); //insert query
System.out.println("inserted");
}
con.close();
}
catch(ClassNotFoundException | SQLException e)
{
System.err.println("Exception: "+e.getMessage());
} // TODO add your // TODO add you
}
但是一旦启用它我就无法禁用它。我的意思是停止保存到文件。我尝试使用String cmd = "logcat -f " + file.getAbsolutePath();
Runtime.getRuntime().exec(cmd);
选项没有运气。
有人知道我能做什么吗?
答案 0 :(得分:0)
您可以将其切换回打印到stdout
(默认)。
String cmd = "logcat -f stdout";
Runtime.getRundtime().exec(cmd);
答案 1 :(得分:0)
我没有找到问题的解决方案,所以它仍然是开放的。我只想留下我的解决方法,因为它可能有用。
所以我决定将logcat打印留给stdout
,然后将其转储到文件中,然后点击按钮清除。这个解决方案有一些优点,因为logcat在文件中以名称中的时间戳分隔,因此我可以根据发生事件的时间来查找问题。
答案 2 :(得分:0)
您可能想要调用" ps | grep logcat"用它的PID杀死它:"杀死pid"。
答案 3 :(得分:0)
问自己同样的事情...
如果有人还是有兴趣的话,这对我来说很成功
Runtime.getRuntime().exec("logcat -f " + outputFile.getAbsolutePath() + " -d");
键最后是“ -d”。
您也可以将“ -d”替换为“ -t 1000”,以仅打印文件的最后1000行,然后停止。
请注意,对同一日志文件的新调用将追加日志。因此,您可以删除该文件(如果已经存在)。
答案 4 :(得分:0)
Runtime.getRuntime().exec()
返回一个您可以终止的进程,该进程将停止日志记录。
// Start writing file
String cmd = "logcat -f " + file.getAbsolutePath();
Process logcatProcess = Runtime.getRuntime().exec(cmd);
// Stop writing file
logcatProcess.destroy();