Set maximum file size for logs and format logs info
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / Log_OC.java
index 18c81ee..de156b4 100644 (file)
@@ -5,28 +5,28 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import com.owncloud.android.MainApp;
+import java.util.Calendar;
 
 import android.util.Log;
 
 
 
 import android.util.Log;
 
 
-
 public class Log_OC {
 public class Log_OC {
-    
+    private static final String SIMPLE_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss";
+    private static final long MAX_FILE_SIZE = 1000000; // 1MB
+
+    private static File mLogFile;
+    private static File mFolder;
+    private static BufferedWriter mBuf;
+
+    private static String[] mLogFileNames = {"currentLog.txt", "olderLog.txt"};
+    private static String mLogPath =  FileStorageUtils.getLogPath();
+
+    private static boolean isMaxFileSizeReached = false;
 
 
-    private static boolean isEnabled = false;
-    private static File logFile;
-    private static File folder;
-    private static BufferedWriter buf;  
-    
     public static void i(String TAG, String message){
     public static void i(String TAG, String message){
-        // Printing the message to LogCat console
-        int a = Log.i(TAG, message);
+
         // Write the log message to the file
         // Write the log message to the file
-        appendLog(TAG+" : "+message);
+        appendLog(TAG+" : "+ message);
     }
 
     public static void d(String TAG, String message){
     }
 
     public static void d(String TAG, String message){
@@ -61,44 +61,71 @@ public class Log_OC {
         Log.wtf(TAG,message); 
         appendLog(TAG+" : "+ message);
     }
         Log.wtf(TAG,message); 
         appendLog(TAG+" : "+ message);
     }
-    
+
+    /**
+     * Start doing logging
+     * @param logPath : path of log file
+     */
     public static void startLogging(String logPath) {
     public static void startLogging(String logPath) {
-        folder = new File(logPath);
-        logFile = new File(folder + File.separator + "log.txt");
+        mFolder = new File(logPath);
+        mLogFile = new File(mFolder + File.separator + mLogFileNames[0]);
         
         
-        if (!folder.exists()) {
-            folder.mkdirs();
+        boolean isFileCreated = false;
+        
+        if (!mFolder.exists()) {
+            mFolder.mkdirs();
+            isFileCreated = true;
+            Log.d("LOG_OC", "Log file created");
         }
         }
-//        if (logFile.exists()) {
-//            logFile.delete();
-//        }
+
         try { 
         try { 
-            logFile.createNewFile();
-            buf = new BufferedWriter(new FileWriter(logFile, true));
-            isEnabled = true;
-            appendPhoneInfo();
-        }catch (IOException e){ 
+
+            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;
+            }
+
+            // Create the current log file if does not exist
+            mLogFile.createNewFile();
+            mBuf = new BufferedWriter(new FileWriter(mLogFile, true));
+            if (isFileCreated) {
+                appendPhoneInfo();
+            }
+
+            // Check if current log file size is bigger than the max file size defined
+            if (mLogFile.length() > MAX_FILE_SIZE) {
+                isMaxFileSizeReached = true;
+            }
+        } catch (IOException e) {
             e.printStackTrace(); 
         } 
     }
     
             e.printStackTrace(); 
         } 
     }
     
-    public static void stopLogging() {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
-        String currentDateandTime = sdf.format(new Date());
-        if (logFile != null) {
-            logFile.renameTo(new File(folder + File.separator + MainApp.getLogName() + currentDateandTime+".log"));
-          
-            isEnabled = false;
-            try {
-                buf.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            } 
-        
+    /**
+     * Delete history logging
+     */
+    public static void deleteHistoryLogging() {
+        File folderLogs = new File(mFolder + File.separator);
+        if(folderLogs.isDirectory()){
+            String[] myFiles = folderLogs.list();
+            for (int i=0; i<myFiles.length; i++) {
+                File myFile = new File(folderLogs, myFiles[i]);
+                myFile.delete();
+            }
         }
         }
-        
     }
     
     }
     
+    /**
+     * Append the info of the device
+     */
     private static void appendPhoneInfo() {
         appendLog("Model : " + android.os.Build.MODEL);
         appendLog("Brand : " + android.os.Build.BRAND);
     private static void appendPhoneInfo() {
         appendLog("Model : " + android.os.Build.MODEL);
         appendLog("Brand : " + android.os.Build.BRAND);
@@ -108,22 +135,32 @@ public class Log_OC {
         appendLog("Version-Release : " + android.os.Build.VERSION.RELEASE);
     }
     
         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
+     */
     private static void appendLog(String text) { 
     private static void appendLog(String text) { 
-        if (isEnabled) {
-           try { 
-               buf.append(text); 
-               buf.newLine(); 
-           } catch (IOException e) { 
-               e.printStackTrace(); 
-        } 
-    }
-}
+        startLogging(mLogPath);
+        String timeStamp = new SimpleDateFormat(SIMPLE_DATE_FORMAT).format(Calendar.getInstance().getTime());
 
 
-    
-   
+        try {
+           mBuf = new BufferedWriter(new FileWriter(mLogFile, true));
+           mBuf.newLine();
+           mBuf.write(timeStamp);
+           mBuf.newLine();
+           mBuf.write(text);
+           mBuf.newLine();
+           mBuf.close();
+       } catch (IOException e) {
+           e.printStackTrace();
+       }
+    }
 
 
-  
+    public static String[] getLogFileNames() {
+        return mLogFileNames;
+    }
 
 
-   
-   
+    public static void setmLogFileNames(String[] logFileNames) {
+        Log_OC.mLogFileNames = logFileNames;
+    }
 }
 }