Skip to content
This repository was archived by the owner on Jan 20, 2021. It is now read-only.

Commit d4461b8

Browse files
Julian KahnertJulian Kahnert
authored andcommitted
Sentry breadcrumb logger added
1 parent d986535 commit d4461b8

File tree

5 files changed

+70
-13
lines changed

5 files changed

+70
-13
lines changed

ArchiveCore/Package.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ let package = Package(
2828
.package(url: "https://github.com/WeTransfer/Diagnostics", from: "1.8.0"),
2929
// .package(url: "https://github.com/tikhop/TPInAppReceipt", from: "3.0.2"),
3030
.package(url: "https://github.com/tikhop/TPInAppReceipt", .branch("master")),
31-
.package(url: "https://github.com/shaps80/GraphicsRenderer", from: "1.4.4")
31+
.package(url: "https://github.com/shaps80/GraphicsRenderer", from: "1.4.4"),
32+
.package(name: "Sentry", url: "https://github.com/getsentry/sentry-cocoa", from: "6.1.3")
3233
],
3334
targets: [
3435
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
@@ -56,7 +57,8 @@ let package = Package(
5657
.target(name: "ArchiveSharedConstants",
5758
dependencies: [
5859
.product(name: "Logging", package: "swift-log"),
59-
"SwiftUIX"
60+
"SwiftUIX",
61+
"Sentry"
6062
]),
6163
.testTarget(name: "ArchiveBackendTests",
6264
dependencies: [

ArchiveCore/Sources/ArchiveBackend/ArchiveStore.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public final class ArchiveStore: ObservableObject, ArchiveStoreAPI, Log {
258258
log.info("Found \(documents.count) documents.")
259259
self.state = .live
260260
DispatchQueue.global(qos: .background).async {
261-
self.saveDocuments()
261+
self.save(documents)
262262
}
263263
}
264264

@@ -311,7 +311,7 @@ public final class ArchiveStore: ObservableObject, ArchiveStoreAPI, Log {
311311
}
312312
}
313313

314-
private func saveDocuments() {
314+
private func save(_ documents: [Document]) {
315315

316316
if fileManager.fileExists(atPath: Self.savePath.path) {
317317
try? fileManager.removeItem(at: Self.savePath)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//
2+
// SentryBreadcrumbLogger.swift
3+
//
4+
//
5+
// Created by Julian Kahnert on 19.01.21.
6+
//
7+
8+
import Logging
9+
import Sentry
10+
11+
public struct SentryBreadcrumbLogger: LogHandler {
12+
public var metadata: Logger.Metadata
13+
public var logLevel: Logger.Level = .info
14+
15+
public init(metadata: Logger.Metadata, logLevel: Logger.Level = .info) {
16+
self.metadata = metadata
17+
self.logLevel = logLevel
18+
}
19+
20+
public subscript(metadataKey metadataKey: String) -> Logger.Metadata.Value? {
21+
get {
22+
return self.metadata[metadataKey]
23+
}
24+
set {
25+
self.metadata[metadataKey] = newValue
26+
}
27+
}
28+
29+
public func log(level: Logger.Level, message: Logger.Message, metadata: Logger.Metadata? = nil, file: String = #file, function: String = #function, line: UInt = #line) {
30+
guard level >= logLevel else { return }
31+
32+
let sentryLevel: SentryLevel
33+
switch level {
34+
case .debug, .trace, .notice:
35+
sentryLevel = .debug
36+
case .info:
37+
sentryLevel = .info
38+
case .warning:
39+
sentryLevel = .warning
40+
case .error:
41+
sentryLevel = .error
42+
case .critical:
43+
sentryLevel = .fatal
44+
}
45+
46+
let crumb = Breadcrumb()
47+
crumb.level = sentryLevel
48+
crumb.category = "\(file) \(function):\(line)"
49+
crumb.message = message.description
50+
crumb.timestamp = Date()
51+
SentrySDK.addBreadcrumb(crumb: crumb)
52+
}
53+
}

PDFArchiver.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Shared/PDFArchiverApp.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,11 @@ struct PDFArchiverApp: App, Log {
106106
}
107107

108108
LoggingSystem.bootstrap { label in
109+
let logLevel: Logger.Level = AppEnvironment.get() == .production ? .info : .trace
109110
var sysLogger = StreamLogHandler.standardOutput(label: label)
110-
sysLogger.logLevel = AppEnvironment.get() == .production ? .info : .trace
111-
return sysLogger
111+
sysLogger.logLevel = logLevel
112+
let sentryLogger = SentryBreadcrumbLogger(metadata: [:], logLevel: logLevel)
113+
return MultiplexLogHandler([sysLogger, sentryLogger])
112114
}
113115

114116
DispatchQueue.global().async {

0 commit comments

Comments
 (0)