Improve logging infrastructure
This commit is contained in:
parent
dce685e711
commit
d4f1014df6
@ -269,6 +269,14 @@ dependencies {
|
|||||||
|
|
||||||
// Firebase (EH)
|
// Firebase (EH)
|
||||||
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
|
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
|
||||||
|
|
||||||
|
// Better logging (EH)
|
||||||
|
implementation 'com.elvishew:xlog:1.6.1'
|
||||||
|
|
||||||
|
// Time utils (EH)
|
||||||
|
def typed_time_version = '1.0.2'
|
||||||
|
implementation "com.github.kizitonwose.time:time:$typed_time_version"
|
||||||
|
implementation "com.github.kizitonwose.time:time-android:$typed_time_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
|
@ -3,19 +3,35 @@ package eu.kanade.tachiyomi
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
|
import android.os.Environment
|
||||||
import android.support.multidex.MultiDex
|
import android.support.multidex.MultiDex
|
||||||
|
import com.elvishew.xlog.LogConfiguration
|
||||||
|
import com.elvishew.xlog.LogLevel
|
||||||
|
import com.elvishew.xlog.XLog
|
||||||
|
import com.elvishew.xlog.printer.AndroidPrinter
|
||||||
|
import com.elvishew.xlog.printer.Printer
|
||||||
|
import com.elvishew.xlog.printer.file.FilePrinter
|
||||||
|
import com.elvishew.xlog.printer.file.clean.FileLastModifiedCleanStrategy
|
||||||
|
import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator
|
||||||
import com.evernote.android.job.JobManager
|
import com.evernote.android.job.JobManager
|
||||||
import com.github.ajalt.reprint.core.Reprint
|
import com.github.ajalt.reprint.core.Reprint
|
||||||
|
import com.kizitonwose.time.days
|
||||||
import eu.kanade.tachiyomi.data.backup.BackupCreatorJob
|
import eu.kanade.tachiyomi.data.backup.BackupCreatorJob
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||||
import eu.kanade.tachiyomi.data.updater.UpdaterJob
|
import eu.kanade.tachiyomi.data.updater.UpdaterJob
|
||||||
import eu.kanade.tachiyomi.util.LocaleHelper
|
import eu.kanade.tachiyomi.util.LocaleHelper
|
||||||
|
import exh.log.CrashlyticsPrinter
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.InjektScope
|
import uy.kohesive.injekt.api.InjektScope
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.registry.default.DefaultRegistrar
|
import uy.kohesive.injekt.registry.default.DefaultRegistrar
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
@ -31,8 +47,9 @@ open class App : Application() {
|
|||||||
|
|
||||||
setupJobManager()
|
setupJobManager()
|
||||||
setupNotificationChannels()
|
setupNotificationChannels()
|
||||||
setupRealm() //Setup metadata DB (EH)
|
GlobalScope.launch { deleteOldMetadataRealm() } // Delete old metadata DB (EH)
|
||||||
Reprint.initialize(this) //Setup fingerprint (EH)
|
Reprint.initialize(this) //Setup fingerprint (EH)
|
||||||
|
setupExhLogging() // EXH logging
|
||||||
|
|
||||||
LocaleHelper.updateConfiguration(this, resources.configuration)
|
LocaleHelper.updateConfiguration(this, resources.configuration)
|
||||||
}
|
}
|
||||||
@ -67,14 +84,14 @@ open class App : Application() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EXH
|
// EXH
|
||||||
private fun setupRealm() {
|
private fun deleteOldMetadataRealm() {
|
||||||
Realm.init(this)
|
Realm.init(this)
|
||||||
val config = RealmConfiguration.Builder()
|
val config = RealmConfiguration.Builder()
|
||||||
.name("gallery-metadata.realm")
|
.name("gallery-metadata.realm")
|
||||||
.schemaVersion(3)
|
.schemaVersion(3)
|
||||||
.deleteRealmIfMigrationNeeded()
|
.deleteRealmIfMigrationNeeded()
|
||||||
.build()
|
.build()
|
||||||
Realm.setDefaultConfiguration(config)
|
Realm.deleteRealm(config)
|
||||||
|
|
||||||
//Delete old paper db files
|
//Delete old paper db files
|
||||||
listOf(
|
listOf(
|
||||||
@ -89,4 +106,44 @@ open class App : Application() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EXH
|
||||||
|
private fun setupExhLogging() {
|
||||||
|
val logLevel = if(BuildConfig.DEBUG ||
|
||||||
|
Injekt.get<PreferencesHelper>().eh_detailedLogs().getOrDefault()) {
|
||||||
|
LogLevel.ALL
|
||||||
|
} else {
|
||||||
|
LogLevel.WARN
|
||||||
|
}
|
||||||
|
|
||||||
|
val logConfig = LogConfiguration.Builder()
|
||||||
|
.logLevel(logLevel)
|
||||||
|
.t()
|
||||||
|
.st(2)
|
||||||
|
.nb()
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val printers = mutableListOf<Printer>(AndroidPrinter())
|
||||||
|
|
||||||
|
val logFolder = File(Environment.getExternalStorageDirectory().absolutePath + File.separator +
|
||||||
|
getString(R.string.app_name), "logs")
|
||||||
|
|
||||||
|
printers += FilePrinter
|
||||||
|
.Builder(logFolder.absolutePath)
|
||||||
|
.fileNameGenerator(DateFileNameGenerator())
|
||||||
|
.cleanStrategy(FileLastModifiedCleanStrategy(7.days.inMilliseconds.longValue))
|
||||||
|
.build()
|
||||||
|
|
||||||
|
// Install Crashlytics in prod
|
||||||
|
if(!BuildConfig.DEBUG) {
|
||||||
|
printers += CrashlyticsPrinter(LogLevel.ERROR)
|
||||||
|
}
|
||||||
|
|
||||||
|
XLog.init(
|
||||||
|
logConfig,
|
||||||
|
*printers.toTypedArray()
|
||||||
|
)
|
||||||
|
|
||||||
|
XLog.d("Application booting...")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,4 +182,6 @@ object PreferenceKeys {
|
|||||||
const val eh_delegateSources = "eh_delegate_sources"
|
const val eh_delegateSources = "eh_delegate_sources"
|
||||||
|
|
||||||
const val eh_showTransitionPages = "eh_show_transition_pages"
|
const val eh_showTransitionPages = "eh_show_transition_pages"
|
||||||
|
|
||||||
|
const val eh_detailedLogs = "eh_detailed_logs"
|
||||||
}
|
}
|
||||||
|
@ -255,4 +255,6 @@ class PreferencesHelper(val context: Context) {
|
|||||||
fun eh_savedSearches() = rxPrefs.getStringSet("eh_saved_searches", emptySet())
|
fun eh_savedSearches() = rxPrefs.getStringSet("eh_saved_searches", emptySet())
|
||||||
|
|
||||||
fun eh_showTransitionPages() = rxPrefs.getBoolean(Keys.eh_showTransitionPages, true)
|
fun eh_showTransitionPages() = rxPrefs.getBoolean(Keys.eh_showTransitionPages, true)
|
||||||
|
|
||||||
|
fun eh_detailedLogs() = rxPrefs.getBoolean(Keys.eh_detailedLogs, false)
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import android.view.View
|
|||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import com.bluelinelabs.conductor.RouterTransaction
|
import com.bluelinelabs.conductor.RouterTransaction
|
||||||
import com.bluelinelabs.conductor.changehandler.FadeChangeHandler
|
import com.bluelinelabs.conductor.changehandler.FadeChangeHandler
|
||||||
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
import eu.kanade.tachiyomi.data.cache.ChapterCache
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
@ -118,6 +119,21 @@ class SettingsAdvancedController : SettingsController() {
|
|||||||
summary = "Apply TachiyomiEH enhancements to the following sources if they are installed: ${DELEGATED_SOURCES.values.joinToString { it.sourceName }}"
|
summary = "Apply TachiyomiEH enhancements to the following sources if they are installed: ${DELEGATED_SOURCES.values.joinToString { it.sourceName }}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switchPreference {
|
||||||
|
title = "Detailed logs"
|
||||||
|
|
||||||
|
if(BuildConfig.DEBUG) {
|
||||||
|
summary = "Force-enabled in this debug build."
|
||||||
|
isChecked = true
|
||||||
|
isPersistent = false
|
||||||
|
isEnabled = false
|
||||||
|
} else {
|
||||||
|
key = PreferenceKeys.eh_detailedLogs
|
||||||
|
defaultValue = false
|
||||||
|
summary = "Increase detail level of logs. May cause the app to become slightly slower."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
preference {
|
preference {
|
||||||
title = "Open debug menu"
|
title = "Open debug menu"
|
||||||
summary = Html.fromHtml("DO NOT TOUCH THIS MENU UNLESS YOU KNOW WHAT YOU ARE DOING! <font color='red'>IT CAN CORRUPT YOUR LIBRARY!</font>")
|
summary = Html.fromHtml("DO NOT TOUCH THIS MENU UNLESS YOU KNOW WHAT YOU ARE DOING! <font color='red'>IT CAN CORRUPT YOUR LIBRARY!</font>")
|
||||||
|
25
app/src/main/java/exh/log/CrashlyticsPrinter.kt
Normal file
25
app/src/main/java/exh/log/CrashlyticsPrinter.kt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package exh.log
|
||||||
|
|
||||||
|
import com.crashlytics.android.Crashlytics
|
||||||
|
import com.elvishew.xlog.printer.Printer
|
||||||
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
|
|
||||||
|
class CrashlyticsPrinter(private val logLevel: Int) : Printer {
|
||||||
|
/**
|
||||||
|
* Print log in new line.
|
||||||
|
*
|
||||||
|
* @param logLevel the level of log
|
||||||
|
* @param tag the tag of log
|
||||||
|
* @param msg the msg of log
|
||||||
|
*/
|
||||||
|
override fun println(logLevel: Int, tag: String?, msg: String?) {
|
||||||
|
if(logLevel >= this.logLevel) {
|
||||||
|
try {
|
||||||
|
Crashlytics.log(logLevel, tag, msg)
|
||||||
|
} catch (t: Throwable) {
|
||||||
|
// Crash in debug if shit like this happens
|
||||||
|
if(BuildConfig.DEBUG) throw t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user