Skip to content

Commit d1c4b4f

Browse files
authored
Merge pull request #120 from Parsely/use_android_logging
Use `android.util.Log` for logging
2 parents dbb8f5e + a44209d commit d1c4b4f

File tree

12 files changed

+66
-53
lines changed

12 files changed

+66
-53
lines changed

parsely/src/main/java/com/parsely/parselyandroid/AdvertisementIdProvider.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.parsely.parselyandroid
33
import android.content.Context
44
import android.provider.Settings
55
import com.google.android.gms.ads.identifier.AdvertisingIdClient
6-
import com.parsely.parselyandroid.Logging.log
76
import kotlinx.coroutines.CoroutineScope
87
import kotlinx.coroutines.launch
98

@@ -19,7 +18,7 @@ internal class AdvertisementIdProvider(
1918
try {
2019
adKey = AdvertisingIdClient.getAdvertisingIdInfo(context).id
2120
} catch (e: Exception) {
22-
log("No Google play services or error!")
21+
Log.e("No Google play services or error!", e)
2322
}
2423
}
2524
}
@@ -41,7 +40,7 @@ internal class AndroidIdProvider(private val context: Context) : IdProvider {
4140
} catch (ex: Exception) {
4241
null
4342
}
44-
log(String.format("Android ID: %s", uuid))
43+
Log.d("Android ID: $uuid")
4544
return uuid
4645
}
4746
}

parsely/src/main/java/com/parsely/parselyandroid/DeviceInfoRepository.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.parsely.parselyandroid
22

33
import android.os.Build
4-
import com.parsely.parselyandroid.Logging.log
54

65
internal interface DeviceInfoRepository{
76
fun collectDeviceInfo(): Map<String, String>
@@ -25,7 +24,7 @@ internal open class AndroidDeviceInfoRepository(
2524
dInfo["parsely_site_uuid"] = parselySiteUuid
2625
dInfo["manufacturer"] = Build.MANUFACTURER
2726
dInfo["os"] = "android"
28-
dInfo["os_version"] = String.format("%d", Build.VERSION.SDK_INT)
27+
dInfo["os_version"] = Build.VERSION.SDK_INT.toString()
2928

3029
return dInfo
3130
}
@@ -35,12 +34,12 @@ internal open class AndroidDeviceInfoRepository(
3534
val adKey = advertisementIdProvider.provide()
3635
val androidId = androidIdProvider.provide()
3736

38-
log("adkey is: %s, uuid is %s", adKey, androidId)
37+
Log.d("adkey is: $adKey, uuid is $androidId")
3938

4039
return if (adKey != null) {
4140
adKey
4241
} else {
43-
log("falling back to device uuid")
42+
Log.d("falling back to device uuid")
4443
androidId .orEmpty()
4544
}
4645
}

parsely/src/main/java/com/parsely/parselyandroid/EngagementManager.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.parsely.parselyandroid
22

3-
import com.parsely.parselyandroid.Logging.log
43
import kotlinx.coroutines.CoroutineScope
54
import kotlinx.coroutines.Job
65
import kotlinx.coroutines.delay
@@ -62,7 +61,7 @@ internal class EngagementManager(
6261
val event: MutableMap<String, Any> = HashMap(
6362
baseEvent
6463
)
65-
log(String.format("Enqueuing %s event.", event["action"]))
64+
Log.d("Enqueuing ${event["action"]} event.")
6665

6766
// Update `ts` for the event since it's happening right now.
6867
val baseEventData = (event["data"] as Map<String, Any>?)!!

parsely/src/main/java/com/parsely/parselyandroid/EventsBuilder.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.parsely.parselyandroid
22

3-
import com.parsely.parselyandroid.Logging.log
4-
53
internal class EventsBuilder(
64
private val deviceInfoRepository: DeviceInfoRepository,
75
private val initializationSiteId: String,
@@ -27,7 +25,7 @@ internal class EventsBuilder(
2725
uuid: String,
2826
siteIdSource: SiteIdSource,
2927
): Map<String, Any> {
30-
log("buildEvent called for %s/%s", action, url)
28+
Log.d("buildEvent called for $action/$url")
3129

3230
// Main event info
3331
val event: MutableMap<String, Any> = HashMap()

parsely/src/main/java/com/parsely/parselyandroid/FlushQueue.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.parsely.parselyandroid
22

33
import com.parsely.parselyandroid.JsonSerializer.toParselyEventsPayload
4-
import com.parsely.parselyandroid.Logging.log
54
import kotlinx.coroutines.CoroutineScope
65
import kotlinx.coroutines.launch
76
import kotlinx.coroutines.sync.Mutex
@@ -19,7 +18,7 @@ internal class FlushQueue(
1918

2019
operator fun invoke(skipSendingEvents: Boolean) {
2120
if (!connectivityStatusProvider.isReachable()) {
22-
log("Network unreachable. Not flushing.")
21+
Log.d("Network unreachable. Not flushing.")
2322
return
2423
}
2524
scope.launch {
@@ -33,22 +32,21 @@ internal class FlushQueue(
3332

3433
val jsonPayload = toParselyEventsPayload(eventsToSend)
3534
if (skipSendingEvents) {
36-
log("Debug mode on. Not sending to Parse.ly. Otherwise, would sent ${eventsToSend.size} events: $jsonPayload")
35+
Log.d("Debug mode on. Not sending to Parse.ly. Otherwise, would sent ${eventsToSend.size} events: $jsonPayload")
3736
repository.remove(eventsToSend)
3837
return@launch
3938
}
40-
log("Sending request with %d events", eventsToSend.size)
41-
log("POST Data %s", jsonPayload)
42-
log("Requested %s", ParselyTrackerInternal.ROOT_URL)
39+
Log.d("Sending request with ${eventsToSend.size} events")
40+
Log.d("POST Data $jsonPayload")
41+
Log.d("Requested ${ParselyTrackerInternal.ROOT_URL}")
4342
restClient.send(jsonPayload)
4443
.fold(
4544
onSuccess = {
46-
log("Pixel request success")
45+
Log.i("Pixel request success")
4746
repository.remove(eventsToSend)
4847
},
4948
onFailure = {
50-
log("Pixel request exception")
51-
log(it.toString())
49+
Log.e("Pixel request exception", it)
5250
}
5351
)
5452
}

parsely/src/main/java/com/parsely/parselyandroid/InMemoryBuffer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.parsely.parselyandroid
22

3-
import com.parsely.parselyandroid.Logging.log
43
import kotlin.time.Duration.Companion.seconds
54
import kotlinx.coroutines.CoroutineScope
65
import kotlinx.coroutines.delay
@@ -23,7 +22,7 @@ internal class InMemoryBuffer(
2322
while (isActive) {
2423
mutex.withLock {
2524
if (buffer.isNotEmpty()) {
26-
log("Persisting ${buffer.size} events")
25+
Log.d("Persisting ${buffer.size} events")
2726
localStorageRepository.insertEvents(buffer)
2827
buffer.clear()
2928
}
@@ -36,7 +35,7 @@ internal class InMemoryBuffer(
3635
fun add(event: Map<String, Any>) {
3736
coroutineScope.launch {
3837
mutex.withLock {
39-
log("Event added to buffer")
38+
Log.d("Event added to buffer")
4039
buffer.add(event)
4140
onEventAddedListener()
4241
}

parsely/src/main/java/com/parsely/parselyandroid/LocalStorageRepository.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.parsely.parselyandroid
22

33
import android.content.Context
4-
import com.parsely.parselyandroid.Logging.log
54
import java.io.EOFException
65
import java.io.FileNotFoundException
76
import java.io.ObjectInputStream
@@ -35,7 +34,7 @@ internal class LocalStorageRepository(private val context: Context) : QueueRepos
3534
oos.close()
3635
fos.close()
3736
} catch (ex: Exception) {
38-
log("Exception thrown during queue serialization: %s", ex.toString())
37+
Log.e("Exception thrown during queue serialization", ex)
3938
}
4039
}
4140

@@ -53,10 +52,7 @@ internal class LocalStorageRepository(private val context: Context) : QueueRepos
5352
} catch (ex: FileNotFoundException) {
5453
// Nothing to do here. Means there was no saved queue.
5554
} catch (ex: Exception) {
56-
log(
57-
"Exception thrown during queue deserialization: %s",
58-
ex.toString()
59-
)
55+
Log.e("Exception thrown during queue deserialization", ex)
6056
}
6157
return storedQueue
6258
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.parsely.parselyandroid
2+
3+
import android.util.Log as AndroidLog
4+
5+
internal object AndroidLogWrapper : Log {
6+
7+
private const val TAG = "Parsely"
8+
9+
override fun i(message: String) {
10+
AndroidLog.i(TAG, message)
11+
}
12+
13+
override fun d(message: String) {
14+
AndroidLog.d(TAG, message)
15+
}
16+
17+
override fun e(message: String, throwable: Throwable?) {
18+
AndroidLog.e(TAG, message, throwable)
19+
}
20+
}
21+
22+
internal interface Log {
23+
fun i(message: String)
24+
fun d(message: String)
25+
fun e(message: String, throwable: Throwable?)
26+
27+
companion object {
28+
var instance: Log = AndroidLogWrapper
29+
30+
fun i(message: String) = instance.i(message)
31+
fun d(message: String) = instance.d(message)
32+
fun e(message: String, throwable: Throwable? = null) = instance.e(message, throwable)
33+
}
34+
}

parsely/src/main/java/com/parsely/parselyandroid/Logging.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

parsely/src/main/java/com/parsely/parselyandroid/ParselyTrackerInternal.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal class ParselyTrackerInternal internal constructor(
4444
inMemoryBuffer = InMemoryBuffer(sdkScope, localStorageRepository) {
4545
if (!flushTimerIsActive()) {
4646
startFlushTimer()
47-
Logging.log("Flush flushTimer set to %ds", flushManager.intervalMillis / 1000)
47+
Log.d("Flush flushTimer set to ${flushManager.intervalMillis / 1000}")
4848
}
4949
}
5050
flushQueue = FlushQueue(
@@ -92,7 +92,7 @@ internal class ParselyTrackerInternal internal constructor(
9292
siteIdSource: SiteIdSource,
9393
) {
9494
if (url.isBlank()) {
95-
Logging.log("url cannot be empty")
95+
Log.e("url cannot be empty")
9696
return
9797
}
9898

@@ -119,12 +119,12 @@ internal class ParselyTrackerInternal internal constructor(
119119
siteIdSource: SiteIdSource,
120120
) {
121121
if (url.isBlank()) {
122-
Logging.log("url cannot be empty")
122+
Log.e("url cannot be empty")
123123
return
124124
}
125125
val pageViewUuid = lastPageviewUuid
126126
if (pageViewUuid == null) {
127-
Logging.log("engagement session cannot start without calling trackPageview first")
127+
Log.e("engagement session cannot start without calling trackPageview first")
128128
return
129129
}
130130

@@ -147,7 +147,7 @@ internal class ParselyTrackerInternal internal constructor(
147147
override fun stopEngagement() {
148148
engagementManager?.let {
149149
it.stop()
150-
Logging.log("Engagement session has been stopped")
150+
Log.d("Engagement session has been stopped")
151151
}
152152
engagementManager = null
153153
}
@@ -160,7 +160,7 @@ internal class ParselyTrackerInternal internal constructor(
160160
siteIdSource: SiteIdSource,
161161
) {
162162
if (url.isBlank()) {
163-
Logging.log("url cannot be empty")
163+
Log.e("url cannot be empty")
164164
return
165165
}
166166

parsely/src/test/java/com/parsely/parselyandroid/EventsBuilderTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ internal class EventsBuilderTest {
1818
TEST_SITE_ID,
1919
clock
2020
)
21+
Log.instance = FakeLog
2122
}
2223

2324
@Test
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.parsely.parselyandroid
2+
3+
internal object FakeLog : Log {
4+
override fun i(message: String) = println(message)
5+
override fun d(message: String) = println(message)
6+
override fun e(message: String, throwable: Throwable?) = println(message + throwable?.message)
7+
}

0 commit comments

Comments
 (0)