This repository has been archived by the owner on Mar 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 149
Better logging (on upstream) #283
Merged
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
035c5fd
Better logging
hannesa2 d32f351
remove some pointless warnings
hannesa2 b084ca7
introduce deprecated old and new methods
hannesa2 fa4db38
fix progress dialog and 'No adapter attached'
hannesa2 10a7bdb
delete all *.log in directory
hannesa2 5bf99df
Update Logcat library dependency
davigonz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
233 changes: 54 additions & 179 deletions
233
owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/utils/Log_OC.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,212 +1,87 @@ | ||
package com.owncloud.android.lib.common.utils; | ||
|
||
import android.util.Log; | ||
import timber.log.Timber; | ||
|
||
import com.owncloud.android.lib.BuildConfig; | ||
|
||
import java.io.BufferedWriter; | ||
import java.io.File; | ||
import java.io.FileWriter; | ||
import java.io.IOException; | ||
import java.text.SimpleDateFormat; | ||
import java.util.Calendar; | ||
import java.util.Locale; | ||
|
||
public class Log_OC { | ||
private static final String SIMPLE_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss"; | ||
private static final String LOG_FOLDER_NAME = "log"; | ||
private static final long MAX_FILE_SIZE = 2000000; // 2MB | ||
|
||
private static String mOwncloudDataFolderLog = "owncloud_log"; | ||
private static String mOwncloudDataFolderLog; | ||
|
||
private static File mLogFile; | ||
private static File mFolder; | ||
private static BufferedWriter mBuf; | ||
public static void setLogDataFolder(String logFolder) { | ||
mOwncloudDataFolderLog = logFolder; | ||
} | ||
|
||
private static String[] mLogFileNames = { | ||
"currentLog" + BuildConfig.BUILD_TYPE + ".txt", | ||
"olderLog" + BuildConfig.BUILD_TYPE + ".txt" | ||
}; | ||
public static void i(String message) { | ||
Timber.i(message); | ||
} | ||
|
||
private static boolean isMaxFileSizeReached = false; | ||
private static boolean isEnabled = false; | ||
public static void d(String message) { | ||
Timber.d(message); | ||
} | ||
|
||
public static void setLogDataFolder(String logFolder) { | ||
mOwncloudDataFolderLog = logFolder; | ||
public static void d(String message, Exception e) { | ||
Timber.d(e, message); | ||
} | ||
|
||
public static void i(String TAG, String message) { | ||
Log.i(TAG, message); | ||
appendLog("I: " + TAG + " : " + message); | ||
public static void e(String message) { | ||
Timber.e(message); | ||
} | ||
|
||
public static void e(String message, Throwable e) { | ||
Timber.e(e, message); | ||
} | ||
|
||
public static void v(String message) { | ||
Timber.v(message); | ||
} | ||
|
||
public static void w(String message) { | ||
Timber.w(message); | ||
} | ||
|
||
@Deprecated | ||
public static void i(String tag, String message) { | ||
Timber.i(message); | ||
} | ||
|
||
@Deprecated | ||
public static void d(String TAG, String message) { | ||
Log.d(TAG, message); | ||
appendLog("D: " + TAG + " : " + message); | ||
Timber.d(message); | ||
} | ||
|
||
@Deprecated | ||
public static void d(String TAG, String message, Exception e) { | ||
Log.d(TAG, message, e); | ||
appendLog("D: " + TAG + " : " + message + " Exception : " + e.getStackTrace()); | ||
Timber.d(e, message); | ||
} | ||
|
||
@Deprecated | ||
public static void e(String TAG, String message) { | ||
Log.e(TAG, message); | ||
appendLog("E: " + TAG + " : " + message); | ||
Timber.e(message); | ||
} | ||
|
||
@Deprecated | ||
public static void e(String TAG, String message, Throwable e) { | ||
Log.e(TAG, message, e); | ||
appendLog("E: " + TAG + " : " + message + " Exception : " + e.getStackTrace()); | ||
Timber.e(e, message); | ||
} | ||
|
||
@Deprecated | ||
public static void v(String TAG, String message) { | ||
Log.v(TAG, message); | ||
appendLog("V: " + TAG + " : " + message); | ||
Timber.v(message); | ||
} | ||
|
||
@Deprecated | ||
public static void w(String TAG, String message) { | ||
Log.w(TAG, message); | ||
appendLog("W: " + TAG + " : " + message); | ||
} | ||
|
||
/** | ||
* Start doing logging | ||
* | ||
* @param storagePath : directory for keeping logs | ||
*/ | ||
synchronized public static void startLogging(String storagePath) { | ||
String logPath = storagePath + File.separator + mOwncloudDataFolderLog + File.separator + LOG_FOLDER_NAME; | ||
mFolder = new File(logPath); | ||
mLogFile = new File(mFolder + File.separator + mLogFileNames[0]); | ||
|
||
boolean isFileCreated = false; | ||
|
||
if (!mFolder.exists()) { | ||
mFolder.mkdirs(); | ||
isFileCreated = true; | ||
Log.d("LOG_OC", "Log file created"); | ||
} | ||
|
||
try { | ||
|
||
// Create the current log file if does not exist | ||
mLogFile.createNewFile(); | ||
mBuf = new BufferedWriter(new FileWriter(mLogFile, true)); | ||
isEnabled = true; | ||
|
||
if (isFileCreated) { | ||
appendPhoneInfo(); | ||
} | ||
|
||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} finally { | ||
if (mBuf != null) { | ||
try { | ||
mBuf.close(); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
} | ||
|
||
synchronized public static void stopLogging() { | ||
try { | ||
if (mBuf != null) { | ||
mBuf.close(); | ||
} | ||
isEnabled = false; | ||
|
||
mLogFile = null; | ||
mFolder = null; | ||
mBuf = null; | ||
isMaxFileSizeReached = false; | ||
|
||
} catch (IOException e) { | ||
// Because we are stopping logging, we only log to Android console. | ||
Log.e("OC_Log", "Closing log file failed: ", e); | ||
} catch (Exception e) { | ||
// This catch should never fire because we do null check on mBuf. | ||
// But just for the sake of stability let's log this odd situation. | ||
// Because we are stopping logging, we only log to Android console. | ||
Log.e("OC_Log", "Stopping logging failed: ", e); | ||
} | ||
} | ||
|
||
/** | ||
* Delete history logging | ||
*/ | ||
public static void deleteHistoryLogging() { | ||
File folderLogs = new File(mFolder + File.separator); | ||
if (folderLogs.isDirectory()) { | ||
String[] myFiles = folderLogs.list(); | ||
for (String fileName : myFiles) { | ||
File fileInFolder = new File(folderLogs, fileName); | ||
Log_OC.d("delete file", fileInFolder.getAbsoluteFile() + " " + fileInFolder.delete()); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Append the info of the device | ||
*/ | ||
private static void appendPhoneInfo() { | ||
appendLog("Model : " + android.os.Build.MODEL); | ||
appendLog("Brand : " + android.os.Build.BRAND); | ||
appendLog("Product : " + android.os.Build.PRODUCT); | ||
appendLog("Device : " + android.os.Build.DEVICE); | ||
appendLog("Version-Codename : " + android.os.Build.VERSION.CODENAME); | ||
appendLog("Version-Release : " + android.os.Build.VERSION.RELEASE); | ||
} | ||
|
||
/** | ||
* Append to the log file the info passed | ||
* | ||
* @param text : text for adding to the log file | ||
*/ | ||
synchronized private static void appendLog(String text) { | ||
|
||
if (isEnabled) { | ||
|
||
if (isMaxFileSizeReached) { | ||
|
||
// Move current log file info to another file (old logs) | ||
File olderFile = new File(mFolder + File.separator + mLogFileNames[1]); | ||
if (mLogFile.exists()) { | ||
mLogFile.renameTo(olderFile); | ||
} | ||
|
||
// Construct a new file for current log info | ||
mLogFile = new File(mFolder + File.separator + mLogFileNames[0]); | ||
isMaxFileSizeReached = false; | ||
} | ||
|
||
String timeStamp = new SimpleDateFormat(SIMPLE_DATE_FORMAT, Locale.ENGLISH).format(Calendar.getInstance().getTime()); | ||
|
||
try { | ||
mBuf = new BufferedWriter(new FileWriter(mLogFile, true)); | ||
mBuf.newLine(); | ||
mBuf.write(timeStamp + " " + text); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} finally { | ||
try { | ||
mBuf.close(); | ||
} catch (IOException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
|
||
// Check if current log file size is bigger than the max file size defined | ||
if (mLogFile.length() > MAX_FILE_SIZE) { | ||
isMaxFileSizeReached = true; | ||
} | ||
} | ||
} | ||
|
||
public static String[] getLogFileNames() { | ||
return mLogFileNames; | ||
Timber.w(message); | ||
} | ||
|
||
public static void startLogging(String storagePath) { | ||
LoggingHelper.INSTANCE.startLogging( | ||
new File(storagePath+ File.separator + mOwncloudDataFolderLog), mOwncloudDataFolderLog); | ||
} | ||
|
||
public static void stopLogging() { | ||
LoggingHelper.INSTANCE.stopLogging(); | ||
} | ||
|
||
} |
24 changes: 24 additions & 0 deletions
24
owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/utils/LoggingHelper.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.owncloud.android.lib.common.utils | ||
|
||
import info.hannes.timber.FileLoggingTree | ||
import info.hannes.timber.fileLoggingTree | ||
import timber.log.Timber | ||
import java.io.File | ||
|
||
object LoggingHelper { | ||
|
||
fun startLogging(directory: File, storagePath: String) { | ||
fileLoggingTree()?.let { | ||
Timber.forest().drop(Timber.forest().indexOf(it)) | ||
} | ||
if (!directory.exists()) | ||
directory.mkdirs() | ||
Timber.plant(FileLoggingTree(directory, filename = storagePath, delegator = Log_OC::class.java)) | ||
} | ||
|
||
fun stopLogging() { | ||
fileLoggingTree()?.let { | ||
Timber.forest().drop(Timber.forest().indexOf(it)) | ||
} | ||
} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As an idea for owncloud/android#2725 (comment):
Don't use filename and specify context then the file hast as prefix the package name.