-
-
Notifications
You must be signed in to change notification settings - Fork 372
Add beforeSendLog callback to SentryOptions
#5678
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 7 commits
Commits
Show all changes
34 commits
Select commit
Hold shift + click to select a range
b491448
Add beforeSendLog with mutable log class
denrase 4799ae8
add pr to changelog
denrase d0afa5a
remove xcode created folder recovered references
denrase 0c6509a
Merge branch 'main' into feat/structured-logs-before-send
denrase c440e7f
make public api
denrase 181cfb8
Merge branch 'main' into feat/structured-logs-before-send
denrase 780341e
add docs
denrase f904584
Merge branch 'main' into feat/structured-logs-before-send
denrase 58fe518
Merge branch 'main' into feat/structured-logs-before-send
denrase 399fa55
Change `SentryLog` to NSObject, make public and remove the wrapper cl…
denrase 1661c2f
make public api
denrase c9c5c71
don’t force unwrap value
denrase a5a9d98
Merge branch 'main' into feat/structured-logs-before-send
denrase 08beca0
fix cl
denrase 579aa99
Merge branch 'main' into feat/structured-logs-before-send
denrase 43001c0
update changelog
denrase b034d88
fix tests, generate public api
denrase 777d8bb
Fix SMP issue with dynamic fallback for SPM builds
denrase f6e9001
Merge branch 'main' into feat/structured-logs-before-send
denrase 2844982
remove open
denrase 4e22c52
make typealias public
denrase 4aa1fa9
add docs for logs
denrase 736ff34
recreate api
denrase 0c82fca
male log final and codabple package private
denrase 3beece2
Merge branch 'main' into feat/structured-logs-before-send
denrase ae88b04
bump diffMax
denrase c1db59e
Merge branch 'main' into feat/structured-logs-before-send
denrase 354250e
Merge branch 'main' into feat/structured-logs-before-send
denrase 6321376
Merge branch 'main' into feat/structured-logs-before-send
denrase e05bbc5
revert diffmax
denrase 0a6a7b7
Merge branch 'main' into feat/structured-logs-before-send
denrase b3944d8
fix cl
denrase 038ab02
fix swift dynamic call extension
denrase 5a0f736
Merge branch 'main' into feat/structured-logs-before-send
denrase File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| /** | ||
| * A mutable wrapper for use in `beforeSendLog` callbacks. | ||
| * | ||
| * The internal log structure is immutable for thread safety and data integrity in the SDK pipeline. | ||
| * `MutableSentryLog` provides a mutable interface for user modifications in callbacks. | ||
| */ | ||
| @objcMembers | ||
| public class MutableSentryLog: NSObject { | ||
denrase marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| public var timestamp: Date | ||
| public var traceId: SentryId | ||
| public var level: MutableSentryLogLevel { | ||
| didSet { | ||
| // Automatically update severity number when level changes | ||
| self.severityNumber = NSNumber(value: level.toSeverityNumber()) | ||
| } | ||
| } | ||
| public var body: String | ||
| public var attributes: [String: Any] | ||
| public var severityNumber: NSNumber? | ||
|
|
||
| init(log: SentryLog) { | ||
| self.timestamp = log.timestamp | ||
| self.traceId = log.traceId | ||
| self.level = MutableSentryLogLevel.from(log.level) | ||
| self.body = log.body | ||
| self.attributes = log.attributes.mapValues { $0.value } | ||
| self.severityNumber = log.severityNumber.map { NSNumber(value: $0) } | ||
| super.init() | ||
| } | ||
|
|
||
| func toSentryLog() -> SentryLog { | ||
| let sentryAttributes = attributes.mapValues { SentryLog.Attribute(value: $0) } | ||
|
|
||
| return SentryLog( | ||
| timestamp: timestamp, | ||
| traceId: traceId, | ||
| level: level.toLevel(), | ||
| body: body, | ||
| attributes: sentryAttributes, | ||
| severityNumber: severityNumber?.intValue | ||
| ) | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| @_implementationOnly import _SentryPrivate | ||
| import Foundation | ||
|
|
||
| @objc | ||
| public enum MutableSentryLogLevel: Int { | ||
denrase marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| case trace | ||
| case debug | ||
| case info | ||
| case warn | ||
| case error | ||
| case fatal | ||
|
|
||
| // Convert from Swift SentryLog.Level | ||
| internal static func from(_ level: SentryLog.Level) -> MutableSentryLogLevel { | ||
| switch level { | ||
| case .trace: return .trace | ||
| case .debug: return .debug | ||
| case .info: return .info | ||
| case .warn: return .warn | ||
| case .error: return .error | ||
| case .fatal: return .fatal | ||
| } | ||
| } | ||
|
|
||
| // Convert to Swift SentryLog.Level | ||
| internal func toLevel() -> SentryLog.Level { | ||
| switch self { | ||
| case .trace: return .trace | ||
| case .debug: return .debug | ||
| case .info: return .info | ||
| case .warn: return .warn | ||
| case .error: return .error | ||
| case .fatal: return .fatal | ||
| @unknown default: return .error | ||
| } | ||
| } | ||
|
|
||
| // Docs: https://develop.sentry.dev/sdk/telemetry/logs/#log-severity-number | ||
| internal func toSeverityNumber() -> Int { | ||
| switch self { | ||
denrase marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| case .trace: return 1 | ||
| case .debug: return 5 | ||
| case .info: return 9 | ||
| case .warn: return 13 | ||
| case .error: return 17 | ||
| case .fatal: return 21 | ||
| @unknown default: return 17 // Default to error level | ||
| } | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| @_spi(Private) @testable import Sentry | ||
| @_spi(Private) import SentryTestUtils | ||
| import XCTest | ||
|
|
||
| final class MutableSentryLogLevelTests: XCTestCase { | ||
|
|
||
| // MARK: - MutableSentryLogLevel Tests | ||
|
|
||
| func testMutableSentryLogLevel_FromLevel_AllCases() { | ||
| let testCases: [(SentryLog.Level, MutableSentryLogLevel)] = [ | ||
| (.trace, .trace), | ||
| (.debug, .debug), | ||
| (.info, .info), | ||
| (.warn, .warn), | ||
| (.error, .error), | ||
| (.fatal, .fatal) | ||
| ] | ||
|
|
||
| for (swiftLevel, expectedMutableLevel) in testCases { | ||
| let actualMutableLevel = MutableSentryLogLevel.from(swiftLevel) | ||
| XCTAssertEqual(actualMutableLevel, expectedMutableLevel, | ||
| "Converting \(swiftLevel) should result in \(expectedMutableLevel)") | ||
| } | ||
| } | ||
|
|
||
| func testMutableSentryLogLevel_ToLevel_AllCases() { | ||
| let testCases: [(MutableSentryLogLevel, SentryLog.Level)] = [ | ||
| (.trace, .trace), | ||
| (.debug, .debug), | ||
| (.info, .info), | ||
| (.warn, .warn), | ||
| (.error, .error), | ||
| (.fatal, .fatal) | ||
| ] | ||
|
|
||
| for (mutableLevel, expectedSwiftLevel) in testCases { | ||
| let actualSwiftLevel = mutableLevel.toLevel() | ||
| XCTAssertEqual(actualSwiftLevel, expectedSwiftLevel, | ||
| "Converting \(mutableLevel) should result in \(expectedSwiftLevel)") | ||
| } | ||
| } | ||
| } |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.