Skip to content

Conversation

@denrase
Copy link
Collaborator

@denrase denrase commented Sep 25, 2025

📜 Description

The Sentry swift-log integration.

Setup

  • Adds SentrySwiftLog as a target to Sentry target
  • Adds SentrySwiftLog to Package.swift
  • Add a sample call to the iOS15-SwiftUi app so you can play around with it

Implementation

  • Adds SentryLogHandler
  • sentry-log metadata is mapped to attributes and prefixed with swift-log
  • Other parameters of the log function are set as attributes and

Discussion

Here vs Own Repo

Added the integration to this repo, because it is easier for us to maintain.

On the swift-log repo integrations section is linking to the swift package index with search term swift-log. So for visibility, we'd need to have a separate swift-log-sentry repo.

https://github.com/apple/swift-log?tab=readme-ov-file#available-log-handler-backends
https://swiftpackageindex.com/search?query=swift-log

Distribution

Only distributed through SPM, as swift-log dropped support for CocoaPods. Also, we'll not be able to distribute this as a binary, as swift-log is not supporting that.

Module was not compiled with library evolution support; using it means binary compatibility for can't be guaranteed

💡 Motivation and Context

Closes #5372

💚 How did you test it?

Unit Tests
Sample App

📝 Checklist

You have to check all boxes before merging:

  • I added tests to verify the changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • Review from the native team if needed.
  • No breaking change or entry added to the changelog.
  • No breaking change for hybrid SDKs or communicated to hybrid SDKs.

@codecov
Copy link

codecov bot commented Sep 25, 2025

❌ 4 Tests Failed:

Tests completed Failed Passed Skipped
3920 4 3916 27
View the top 3 failed test(s) by shortest run time
iOS_SwiftUI_UITests.FeedbackUITests::testWidgetDisplayInSwiftUIApp
Stack Traces | 0s run time
.../iOS-SwiftUI/iOS-SwiftUI-UITests/FeedbackUITests.swift:11 - Failed to get background assertion for target app with pid 75661: Timed out while acquiring background assertion.
iOS_SwiftUI_UITests.LaunchUITests::testCaptureErrorReturnsValidId
Stack Traces | 0s run time
.../iOS-SwiftUI/iOS-SwiftUI-UITests/LaunchUITests.swift:91 - Failed to get background assertion for target app with pid 75707: Timed out while acquiring background assertion.
iOS_SwiftUI_UITests.LaunchUITests::testNoNewTransactionForSecondCallToBody
Stack Traces | 0s run time
.../iOS-SwiftUI/iOS-SwiftUI-UITests/LaunchUITests.swift:91 - Failed to get background assertion for target app with pid 75935: Timed out while acquiring background assertion.
iOS_SwiftUI_UITests.LaunchUITests::testTransactionSpan
Stack Traces | 0s run time
.../iOS-SwiftUI/iOS-SwiftUI-UITests/LaunchUITests.swift:91 - Failed to get background assertion for target app with pid 76234: Timed out while acquiring background assertion.

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 25, 2025

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1229.77 ms 1269.93 ms 40.17 ms
Size 23.75 KiB 1023.82 KiB 1000.07 KiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
9264ee8 1233.15 ms 1250.02 ms 16.87 ms
d72784d 1214.31 ms 1241.35 ms 27.04 ms
8da82b4 1220.08 ms 1248.24 ms 28.16 ms
43597ba 1214.88 ms 1243.52 ms 28.65 ms
3cdbc22 1231.63 ms 1251.06 ms 19.43 ms
bbe6658 1221.00 ms 1248.51 ms 27.51 ms
00d9740 1223.53 ms 1249.75 ms 26.22 ms
3067c23 1230.48 ms 1257.90 ms 27.42 ms
cc7f629 1226.00 ms 1245.51 ms 19.51 ms
748df9d 1231.63 ms 1259.47 ms 27.84 ms

App size

Revision Plain With Sentry Diff
9264ee8 23.75 KiB 913.09 KiB 889.34 KiB
d72784d 23.75 KiB 988.01 KiB 964.27 KiB
8da82b4 23.75 KiB 913.63 KiB 889.88 KiB
43597ba 23.75 KiB 880.32 KiB 856.58 KiB
3cdbc22 23.75 KiB 928.14 KiB 904.40 KiB
bbe6658 23.75 KiB 908.02 KiB 884.27 KiB
00d9740 23.75 KiB 938.32 KiB 914.57 KiB
3067c23 23.75 KiB 928.15 KiB 904.40 KiB
cc7f629 23.75 KiB 878.48 KiB 854.73 KiB
748df9d 23.75 KiB 902.48 KiB 878.74 KiB

Previous results on branch: denrase/swift-log-sentry-poc

Startup times

Revision Plain With Sentry Diff
b52b178 1227.86 ms 1255.65 ms 27.79 ms
f23a1b4 1226.17 ms 1264.55 ms 38.38 ms
0fd08ab 1225.14 ms 1256.49 ms 31.35 ms
53379e0 1231.19 ms 1269.38 ms 38.20 ms
2bd1339 1223.22 ms 1248.85 ms 25.64 ms

App size

Revision Plain With Sentry Diff
b52b178 23.75 KiB 989.97 KiB 966.22 KiB
f23a1b4 23.75 KiB 1.01 MiB 1016.14 KiB
0fd08ab 23.75 KiB 995.43 KiB 971.68 KiB
53379e0 23.75 KiB 1.00 MiB 1002.40 KiB
2bd1339 23.75 KiB 1.01 MiB 1006.48 KiB

@denrase denrase changed the title Structured Logs: swift-log Integration Structured Logs: Add SentrySwiftLog Integration Sep 30, 2025
@denrase denrase marked this pull request as ready for review October 1, 2025 13:25
@denrase denrase requested a review from itaybre as a code owner October 1, 2025 13:26
cursor[bot]

This comment was marked as outdated.

cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

@itaybre itaybre left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, just a small comment

Comment on lines +53 to +56
# Clean up orphaned commas and fix syntax
sed -i '' '/^[[:space:]]*,$/d' $PACKAGE_FILE
sed -i '' 's/name: "Sentry\(-.*\)\?"$/name: "Sentry\1",/g' $PACKAGE_FILE
sed -i '' 's/platforms: \[\.iOS(\.v11), \.macOS(\.v10_13), \.tvOS(\.v11), \.watchOS(\.v4)\]$/platforms: [.iOS(.v11), .macOS(.v10_13), .tvOS(.v11), .watchOS(.v4)],/g' $PACKAGE_FILE
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this trying to do?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One of the CI jobs is replacing dependencies with local build artefacts. This broke, as swift-log was added to our Package.swift. This code fixes those issues.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this only happen because of swift-log or should we do the fix in a separate PR?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only because of swift-log dependency added in our Package.swift

@denrase denrase requested a review from itaybre October 13, 2025 14:31
.library(name: "SentrySwiftUI", targets: ["Sentry", "SentrySwiftUI", "SentryCppHelper"]),
.library(name: "SentryDistribution", targets: ["SentryDistribution"])
.library(name: "SentryDistribution", targets: ["SentryDistribution"]),
.library(name: "SentrySwiftLog", targets: ["Sentry", "SentrySwiftLog"])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

m: I don't fully understand why this is another target. Is this only here because swift-log is a new dependency? Shouldn't we add it as a dependency to Sentry instead?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intent was to only pull in the dependency for users that actually are using swift-log, but then again, I am not sure how this would behave if a user is not using SentrySwiftLog target. Will check.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, there is a proposal that was partially adopted:

https://github.com/swiftlang/swift-evolution/blob/main/proposals/0226-package-manager-target-based-dep-resolution.md

I created a sample app with a similar setup. While SPM will always resolve the dependency, it will bot be linked/build if it is not required by the target.

So this setup works as expected.

@denrase denrase requested a review from philprime October 22, 2025 13:10
cursor[bot]

This comment was marked as outdated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Log Integration: swift-log

4 participants