Reduce release build log level
This commit is contained in:
parent
fd6bbbd3b5
commit
eec2abf164
|
@ -5,7 +5,7 @@ Features:
|
||||||
-
|
-
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
-
|
- Reduce default release build log level, and lab option to enable more logs.
|
||||||
|
|
||||||
Other changes:
|
Other changes:
|
||||||
-
|
-
|
||||||
|
|
|
@ -86,9 +86,12 @@ class VectorApplication : Application(), HasVectorInjector, MatrixConfiguration.
|
||||||
vectorComponent = DaggerVectorComponent.factory().create(this)
|
vectorComponent = DaggerVectorComponent.factory().create(this)
|
||||||
vectorComponent.inject(this)
|
vectorComponent.inject(this)
|
||||||
vectorUncaughtExceptionHandler.activate(this)
|
vectorUncaughtExceptionHandler.activate(this)
|
||||||
// Log
|
|
||||||
VectorFileLogger.init(this)
|
if (BuildConfig.DEBUG) {
|
||||||
Timber.plant(Timber.DebugTree(), VectorFileLogger)
|
Timber.plant(Timber.DebugTree())
|
||||||
|
}
|
||||||
|
Timber.plant(vectorComponent.vectorFileLogger())
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Stetho.initializeWithDefaults(this)
|
Stetho.initializeWithDefaults(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import im.vector.riotx.features.notifications.NotificationBroadcastReceiver
|
||||||
import im.vector.riotx.features.notifications.NotificationDrawerManager
|
import im.vector.riotx.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.riotx.features.notifications.PushRuleTriggerListener
|
import im.vector.riotx.features.notifications.PushRuleTriggerListener
|
||||||
import im.vector.riotx.features.rageshake.BugReporter
|
import im.vector.riotx.features.rageshake.BugReporter
|
||||||
|
import im.vector.riotx.features.rageshake.VectorFileLogger
|
||||||
import im.vector.riotx.features.rageshake.VectorUncaughtExceptionHandler
|
import im.vector.riotx.features.rageshake.VectorUncaughtExceptionHandler
|
||||||
import im.vector.riotx.features.settings.VectorPreferences
|
import im.vector.riotx.features.settings.VectorPreferences
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
@ -101,6 +102,8 @@ interface VectorComponent {
|
||||||
|
|
||||||
fun vectorPreferences(): VectorPreferences
|
fun vectorPreferences(): VectorPreferences
|
||||||
|
|
||||||
|
fun vectorFileLogger(): VectorFileLogger
|
||||||
|
|
||||||
@Component.Factory
|
@Component.Factory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
fun create(@BindsInstance context: Context): VectorComponent
|
fun create(@BindsInstance context: Context): VectorComponent
|
||||||
|
|
|
@ -52,7 +52,8 @@ import javax.inject.Singleton
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSessionHolder,
|
class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSessionHolder,
|
||||||
private val versionProvider: VersionProvider) {
|
private val versionProvider: VersionProvider,
|
||||||
|
private val vectorFileLogger : VectorFileLogger) {
|
||||||
var inMultiWindowMode = false
|
var inMultiWindowMode = false
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -162,7 +163,7 @@ class BugReporter @Inject constructor(private val activeSessionHolder: ActiveSes
|
||||||
val gzippedFiles = ArrayList<File>()
|
val gzippedFiles = ArrayList<File>()
|
||||||
|
|
||||||
if (withDevicesLogs) {
|
if (withDevicesLogs) {
|
||||||
val files = VectorFileLogger.getLogFiles()
|
val files = vectorFileLogger.getLogFiles()
|
||||||
|
|
||||||
for (f in files) {
|
for (f in files) {
|
||||||
if (!mIsCancelled) {
|
if (!mIsCancelled) {
|
||||||
|
|
|
@ -17,43 +17,74 @@
|
||||||
package im.vector.riotx.features.rageshake
|
package im.vector.riotx.features.rageshake
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.text.TextUtils
|
import android.util.Log
|
||||||
|
import im.vector.riotx.features.settings.VectorPreferences
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
|
||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.logging.*
|
import java.util.logging.*
|
||||||
import java.util.logging.Formatter
|
import java.util.logging.Formatter
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
object VectorFileLogger : Timber.DebugTree() {
|
private const val LOG_SIZE_BYTES = 20 * 1024 * 1024 // 20MB
|
||||||
|
|
||||||
private const val LOG_SIZE_BYTES = 50 * 1024 * 1024 // 50MB
|
private const val LOG_ROTATION_COUNT = 3
|
||||||
|
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class VectorFileLogger @Inject constructor(val context: Context, private val vectorPreferences: VectorPreferences) : Timber.DebugTree() {
|
||||||
|
|
||||||
// relatively large rotation count because closing > opening the app rotates the log (!)
|
|
||||||
private const val LOG_ROTATION_COUNT = 15
|
|
||||||
|
|
||||||
private val sLogger = Logger.getLogger("im.vector.riotx")
|
private val sLogger = Logger.getLogger("im.vector.riotx")
|
||||||
private lateinit var sFileHandler: FileHandler
|
private var sFileHandler: FileHandler? = null
|
||||||
private lateinit var sCacheDirectory: File
|
private var sCacheDirectory: File? = null
|
||||||
private var sFileName = "riotx"
|
private var sFileName = "riotxlogs"
|
||||||
|
|
||||||
fun init(context: Context) {
|
private val prioPrefixes = mapOf(
|
||||||
|
Log.VERBOSE to "V/ ",
|
||||||
|
Log.DEBUG to "D/ ",
|
||||||
|
Log.INFO to "I/ ",
|
||||||
|
Log.WARN to "W/ ",
|
||||||
|
Log.ERROR to "E/ ",
|
||||||
|
Log.ASSERT to "WTF/ "
|
||||||
|
)
|
||||||
|
|
||||||
|
init {
|
||||||
val logsDirectoryFile = context.cacheDir.absolutePath + "/logs"
|
val logsDirectoryFile = context.cacheDir.absolutePath + "/logs"
|
||||||
|
|
||||||
setLogDirectory(File(logsDirectoryFile))
|
setLogDirectory(File(logsDirectoryFile))
|
||||||
init("RiotXLog")
|
try {
|
||||||
|
if (sCacheDirectory != null) {
|
||||||
|
sFileHandler = FileHandler(sCacheDirectory!!.absolutePath + "/" + sFileName + ".%g.txt", LOG_SIZE_BYTES, LOG_ROTATION_COUNT)
|
||||||
|
sFileHandler?.formatter = LogFormatter()
|
||||||
|
sLogger.useParentHandlers = false
|
||||||
|
sLogger.level = Level.ALL
|
||||||
|
sLogger.addHandler(sFileHandler)
|
||||||
|
}
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
Timber.e(e, "Failed to initialize FileLogger")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
|
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
|
||||||
|
if (sFileHandler == null) return
|
||||||
|
if (skipLog(priority)) return
|
||||||
if (t != null) {
|
if (t != null) {
|
||||||
logToFile(t)
|
logToFile(t)
|
||||||
}
|
}
|
||||||
|
logToFile(prioPrefixes[priority] ?: "$priority ", tag ?: "Tag", message)
|
||||||
|
}
|
||||||
|
|
||||||
logToFile("$priority ", tag ?: "Tag", message)
|
private fun skipLog(priority: Int): Boolean {
|
||||||
|
return if (vectorPreferences.labAllowedExtendedLogging()) {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
priority < Log.ERROR
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,24 +99,6 @@ object VectorFileLogger : Timber.DebugTree() {
|
||||||
sCacheDirectory = cacheDir
|
sCacheDirectory = cacheDir
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialises the logger. Should be called AFTER [Log.setLogDirectory].
|
|
||||||
*
|
|
||||||
* @param fileName the base file name
|
|
||||||
*/
|
|
||||||
private fun init(fileName: String) {
|
|
||||||
try {
|
|
||||||
if (!TextUtils.isEmpty(fileName)) {
|
|
||||||
sFileName = fileName
|
|
||||||
}
|
|
||||||
sFileHandler = FileHandler(sCacheDirectory.absolutePath + "/" + sFileName + ".%g.txt", LOG_SIZE_BYTES, LOG_ROTATION_COUNT)
|
|
||||||
sFileHandler.formatter = LogFormatter()
|
|
||||||
sLogger.useParentHandlers = false
|
|
||||||
sLogger.level = Level.ALL
|
|
||||||
sLogger.addHandler(sFileHandler)
|
|
||||||
} catch (e: IOException) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds our own log files to the provided list of files.
|
* Adds our own log files to the provided list of files.
|
||||||
|
@ -99,8 +112,8 @@ object VectorFileLogger : Timber.DebugTree() {
|
||||||
try {
|
try {
|
||||||
// reported by GA
|
// reported by GA
|
||||||
if (null != sFileHandler) {
|
if (null != sFileHandler) {
|
||||||
sFileHandler.flush()
|
sFileHandler!!.flush()
|
||||||
val absPath = sCacheDirectory.absolutePath
|
val absPath = sCacheDirectory?.absolutePath ?: return emptyList()
|
||||||
|
|
||||||
for (i in 0..LOG_ROTATION_COUNT) {
|
for (i in 0..LOG_ROTATION_COUNT) {
|
||||||
val filepath = "$absPath/$sFileName.$i.txt"
|
val filepath = "$absPath/$sFileName.$i.txt"
|
||||||
|
@ -111,7 +124,7 @@ object VectorFileLogger : Timber.DebugTree() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.e(e, "## addLogFiles() failed : " + e.message)
|
Timber.e(e, "## addLogFiles() failed : %s", e.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
return files
|
return files
|
||||||
|
|
|
@ -149,6 +149,8 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
||||||
private const val SETTINGS_USE_NATIVE_CAMERA_PREFERENCE_KEY = "SETTINGS_USE_NATIVE_CAMERA_PREFERENCE_KEY"
|
private const val SETTINGS_USE_NATIVE_CAMERA_PREFERENCE_KEY = "SETTINGS_USE_NATIVE_CAMERA_PREFERENCE_KEY"
|
||||||
private const val SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY = "SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY"
|
private const val SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY = "SETTINGS_ENABLE_SEND_VOICE_FEATURE_PREFERENCE_KEY"
|
||||||
|
|
||||||
|
const val SETTINGS_LABS_ALLOW_EXTENDED_LOGS = "SETTINGS_LABS_ALLOW_EXTENDED_LOGS"
|
||||||
|
|
||||||
private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY"
|
private const val SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY = "SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY"
|
||||||
private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
|
private const val SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY = "SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
|
||||||
|
|
||||||
|
@ -257,6 +259,10 @@ class VectorPreferences @Inject constructor(private val context: Context) {
|
||||||
return defaultPrefs.getBoolean(SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY, true)
|
return defaultPrefs.getBoolean(SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun labAllowedExtendedLogging(): Boolean {
|
||||||
|
return defaultPrefs.getBoolean(SETTINGS_LABS_ALLOW_EXTENDED_LOGS, false)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if we have already asked the user to disable battery optimisations on android >= M devices.
|
* Tells if we have already asked the user to disable battery optimisations on android >= M devices.
|
||||||
*
|
*
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Strings not defined in Riot -->
|
<!-- Strings not defined in Riot -->
|
||||||
|
<string name="labs_allow_extended_logging">Help developers by allowing extended logging.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -45,6 +45,12 @@
|
||||||
android:key="SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
|
android:key="SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY"
|
||||||
android:title="@string/labs_swipe_to_reply_in_timeline" />
|
android:title="@string/labs_swipe_to_reply_in_timeline" />
|
||||||
|
|
||||||
|
|
||||||
|
<im.vector.riotx.core.preference.VectorSwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:key="SETTINGS_LABS_ALLOW_EXTENDED_LOGS"
|
||||||
|
android:title="@string/labs_allow_extended_logging" />
|
||||||
|
|
||||||
<!--</im.vector.riotx.core.preference.VectorPreferenceCategory>-->
|
<!--</im.vector.riotx.core.preference.VectorPreferenceCategory>-->
|
||||||
|
|
||||||
</androidx.preference.PreferenceScreen>
|
</androidx.preference.PreferenceScreen>
|
Loading…
Reference in New Issue