Skip to content

Commit 0457fb0

Browse files
Merge pull request #14837 from woocommerce/issue/woomob-1449-crash-due-to-encrypted-logs-writing
Prevent crash when creating or adding logs to file
2 parents 07545c3 + b6e83ab commit 0457fb0

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/util/crashlogging/EncryptedLogsFileProvider.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@ class EncryptedLogsFileProvider @Inject constructor(
1010
private val wooLog: WooLog,
1111
private val dispatchers: CoroutineDispatchers
1212
) {
13-
suspend fun provide(): File {
13+
suspend fun provide(): File? {
1414
return withContext(dispatchers.io) {
15-
val logs = wooLog.getCurrentLogEntries().take(LOG_ENTRIES_LIMIT)
16-
17-
File.createTempFile("log", "").apply {
18-
appendText(logs.joinToString("\n"))
19-
}
15+
runCatching {
16+
val logs = wooLog.getCurrentLogEntries().take(LOG_ENTRIES_LIMIT)
17+
File.createTempFile("log", "").apply {
18+
appendText(logs.joinToString("\n"))
19+
}
20+
}.onFailure { exception ->
21+
WooLog.e(WooLog.T.UTILS, "Could not create log file: ${exception.message}")
22+
}.getOrNull()
2023
}
2124
}
2225

WooCommerce/src/main/kotlin/com/woocommerce/android/util/crashlogging/EnqueueSendingEncryptedLogs.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,23 @@ class EnqueueSendingEncryptedLogs @Inject constructor(
2121
eventLevel: EventLevel
2222
) {
2323
if (eventLevel == FATAL) {
24-
val logs = runBlocking { encryptedLogsFileProvider.provide() }
25-
encryptedLogging.enqueueSendingEncryptedLogs(
26-
uuid = uuid,
27-
file = logs,
28-
shouldUploadImmediately = false
29-
)
30-
} else {
31-
appCoroutineScope.launch {
24+
runBlocking { encryptedLogsFileProvider.provide() }?.let { logs ->
3225
encryptedLogging.enqueueSendingEncryptedLogs(
3326
uuid = uuid,
34-
file = encryptedLogsFileProvider.provide(),
35-
shouldUploadImmediately = networkStatus.isConnected()
27+
file = logs,
28+
shouldUploadImmediately = false
3629
)
3730
}
31+
} else {
32+
appCoroutineScope.launch {
33+
encryptedLogsFileProvider.provide()?.let { logs ->
34+
encryptedLogging.enqueueSendingEncryptedLogs(
35+
uuid = uuid,
36+
file = logs,
37+
shouldUploadImmediately = networkStatus.isConnected()
38+
)
39+
}
40+
}
3841
}
3942
}
4043
}

0 commit comments

Comments
 (0)