私はアンドロイドにログを記録したいので、メッセージをsdカードのファイルに記録したいと思っています。java.util.loggingを使ってアンドロイドのファイルにログする
私は別のスレッドからログを取らなければならなかったので、これらのスレッドをブロックしたくないので、別のスレッドでログを記録しようとしました。
私はこれまでのところ、このようなクラスのものを構築しました -
public class TestLogger {
private static String LOG_FILE_NAME = "/logs.txt";
private static int LOG_FILE_SIZE_LIMIT = 100 * 1024;
private static FileHandler logHandler;
private static Logger logger;
private static ExecutorService executorService;
public synchronized static void init() {
String logFilePathName = Environment.getExternalStorageDirectory() + LOG_FILE_NAME;
try {
logHandler = new FileHandler(logFilePathName, LOG_FILE_SIZE_LIMIT, 1, true);
logHandler.setFormatter(new SimpleFormatter());
logger = Logger.getLogger("com.test.android");
logger.setLevel(Level.ALL);
logger.addHandler(logHandler);
executorService = Executors.newFixedThreadPool(1);
} catch (IOException e) {
e.printStackTrace();
}
}
private synchronized static void writeLog(String msg) {
if(logger == null)
return;
logger.log(Level.FINE, msg);
}
public static void logMessage(String msg) {
executorService.submit(new LogToFile(msg));
}
private static class LogToFile implements Runnable {
String msg;
public LogToFile(String msg) {
this.msg = msg;
}
@Override
public void run() {
TestLogger.writeLog(msg);
}
}
}
アプリが入力されると、私は `TestLogger.logMessage(「ログメッセージ」)を呼び出すにTestLogger.init()
、そこからを呼び出します。いつでもファイルに何かを記録する必要があります。
これは正常に動作しますが、logs.txt
を作成する代わりに、他のファイルも作成されています。 logs.txt.1とlogs.txt.2のように.lckファイルがあります。キーワードを使用することで、2つのスレッドが同時に同じファイルに書き込まないようにしたことはありませんか?
私は間違っていますか?
こんにちは、私は同じことをしたい実装したい..あなたの作業コードを投稿してくださいできますか? – mudit
はい、実装を貼り付けてください – Raulp