The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Successful build of WrkstrmLog, reference 3.0.0 (e7b51e), with Swift 6.2 for macOS (SPM) on 12 Nov 2025 08:02:24 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-26.0.0.app xcrun swift build --arch arm64

Build Log

========================================
RunAll
========================================
Builder version: 4.68.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/wrkstrm/WrkstrmLog.git
Reference: 3.0.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/wrkstrm/WrkstrmLog
 * tag               3.0.0      -> FETCH_HEAD
HEAD is now at e7b51eb Merge branch 'main' of https://github.com/wrkstrm/WrkstrmLog
Cloned https://github.com/wrkstrm/WrkstrmLog.git
Revision (git rev-parse @):
e7b51ebc2cd4aec074014196bebdb87de05e4270
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/wrkstrm/WrkstrmLog.git at 3.0.0
Fetching https://github.com/apple/swift-log.git
Fetching https://github.com/apple/swift-docc-plugin
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/2160] Fetching swift-docc-plugin
[174/6558] Fetching swift-docc-plugin, swift-log
[1405/10135] Fetching swift-docc-plugin, swift-log, swift-docc-symbolkit
Fetched https://github.com/apple/swift-log.git from cache (1.17s)
Fetched https://github.com/apple/swift-docc-plugin from cache (1.17s)
Computing version for https://github.com/apple/swift-log.git
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.17s)
Computed https://github.com/apple/swift-log.git at 1.6.4 (1.72s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.4.5 (2.18s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.68s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.6.4
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.4.5
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "wrkstrmlog",
      "name": "WrkstrmLog",
      "url": "https://github.com/wrkstrm/WrkstrmLog.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/WrkstrmLog",
      "dependencies": [
        {
          "identity": "swift-log",
          "name": "swift-log",
          "url": "https://github.com/apple/swift-log.git",
          "version": "1.6.4",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-log",
          "dependencies": [
          ]
        }
      ]
    }
  ]
}
Fetching https://github.com/wrkstrm/WrkstrmLog.git
[1/2230] Fetching wrkstrmlog
Fetched https://github.com/wrkstrm/WrkstrmLog.git from cache (0.94s)
Fetching https://github.com/apple/swift-log.git from cache
Fetched https://github.com/apple/swift-log.git from cache (0.43s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.6.4 (0.49s)
Creating working copy for https://github.com/wrkstrm/WrkstrmLog.git
Working copy of https://github.com/wrkstrm/WrkstrmLog.git resolved at 3.0.0 (e7b51eb)
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.6.4
warning: '.resolve-product-dependencies': dependency 'wrkstrmlog' is not used by any target
Found 1 product dependencies
  - swift-log
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.2
Building package at path:  $PWD
https://github.com/wrkstrm/WrkstrmLog.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.0.0.app xcrun swift build --arch arm64
[1/1] Compiling plugin Swift-DocC Preview
[2/2] Compiling plugin Swift-DocC
Building for debugging...
[2/5] Write sources
[4/5] Write swift-version-49B95AFC49DCD68C.txt
[6/10] Compiling Logging MetadataProvider.swift
[7/10] Compiling Logging LogHandler.swift
[8/10] Compiling Logging Locks.swift
[9/10] Emitting module Logging
[10/10] Compiling Logging Logging.swift
[11/31] Emitting module WrkstrmLog
[12/33] Compiling WrkstrmLog Platform.swift
[13/33] Compiling WrkstrmLog ProcessInfo+Xcode.swift
[14/33] Compiling WrkstrmLog Log+Levels.swift
[15/33] Compiling WrkstrmLog Log+Shared.swift
[16/33] Compiling WrkstrmLog DisabledLogBackend.swift
[17/33] Compiling WrkstrmLog FileLogBackend.swift
[18/33] Compiling WrkstrmLog OSLogBackend.swift
[19/33] Compiling WrkstrmLog PrintLogBackend.swift
[20/33] Compiling WrkstrmLog SwiftLogBackend.swift
[21/33] Compiling WrkstrmLog CommonLogContext.swift
[22/33] Compiling WrkstrmLog FatalErrorUtil.swift
[23/33] Compiling WrkstrmLog Level+Emoji.swift
[24/33] Compiling WrkstrmLog Log+CacheStorage.WASM.swift
[25/33] Compiling WrkstrmLog Log+CacheStorage.swift
[26/33] Compiling WrkstrmLog Level+OSLogType.swift
[27/33] Compiling WrkstrmLog Log+Cache.swift
[28/33] Compiling WrkstrmLog DecoratedBackend.swift
[29/33] Compiling WrkstrmLog FanoutLog.swift
[30/33] Compiling WrkstrmLog Log+Decorator.swift
[31/33] Compiling WrkstrmLog Log+Inject.swift
[32/33] Compiling WrkstrmLog Log.swift
[33/33] Compiling WrkstrmLog LogBackend.swift
Build complete! (14.71s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.4.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-docc-plugin"
    },
    {
      "identity" : "swift-log",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.6.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-log.git"
    }
  ],
  "manifest_display_name" : "WrkstrmLog",
  "name" : "WrkstrmLog",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "16.0"
    },
    {
      "name" : "macos",
      "version" : "13.0"
    },
    {
      "name" : "maccatalyst",
      "version" : "13.0"
    },
    {
      "name" : "tvos",
      "version" : "16.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    },
    {
      "name" : "watchos",
      "version" : "9.0"
    }
  ],
  "products" : [
    {
      "name" : "WrkstrmLog",
      "targets" : [
        "WrkstrmLog"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "WrkstrmLogTests",
      "module_type" : "SwiftTarget",
      "name" : "WrkstrmLogTests",
      "path" : "Tests/WrkstrmLogTests",
      "sources" : [
        "BackendsArrayTests.swift",
        "CacheConcurrencyTests.swift",
        "FileBackendTests.swift",
        "LevelExtensionsTests.swift",
        "LevelMaskTests.swift",
        "OSLoggerTests.swift",
        "ProcessInfoXcodeTests.swift",
        "WrkstrmLogTests.swift"
      ],
      "target_dependencies" : [
        "WrkstrmLog"
      ],
      "type" : "test"
    },
    {
      "c99name" : "WrkstrmLog",
      "module_type" : "SwiftTarget",
      "name" : "WrkstrmLog",
      "path" : "Sources/WrkstrmLog",
      "product_dependencies" : [
        "Logging"
      ],
      "product_memberships" : [
        "WrkstrmLog"
      ],
      "sources" : [
        "Backends/DisabledLogBackend.swift",
        "Backends/FileLogBackend.swift",
        "Backends/OSLogBackend.swift",
        "Backends/PrintLogBackend.swift",
        "Backends/SwiftLogBackend.swift",
        "CommonLogContext.swift",
        "DecoratedBackend.swift",
        "FanoutLog.swift",
        "FatalErrorUtil.swift",
        "Level+Emoji.swift",
        "Level+OSLogType.swift",
        "Log+Cache.swift",
        "Log+CacheStorage.WASM.swift",
        "Log+CacheStorage.swift",
        "Log+Decorator.swift",
        "Log+Inject.swift",
        "Log+Levels.swift",
        "Log+Shared.swift",
        "Log.swift",
        "LogBackend.swift",
        "Platform.swift",
        "ProcessInfo+Xcode.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.1"
}
✅  Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path:  $PWD/.docs/wrkstrm/wrkstrmlog/3.0.0
Repository:               wrkstrm/WrkstrmLog
Swift version used:       6.2
    .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.4.0"),
Target:                   WrkstrmLog
Extracting symbol information for 'WrkstrmLog'...
Finished extracting symbol information for 'WrkstrmLog'. (1.79s)
Building documentation for 'WrkstrmLog'...
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/ExposureLevels.tutorial:6:3-15:4
4  |   }
5  |
6  +   @Section(title: "Set a Global Level") {
7  +     Define the minimum level that should be visible across the application.
8  +     Configure the global level explicitly with `Log.globalExposureLevel`.
9  +
10 +     @ContentAndMedia {
11 +     ```swift
12 +     Log.globalExposureLevel = .warning
13 +     ```
14 +     }
15 +   }
16 |
17 |   @Section(title: "Clamp with Per-Logger Levels") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/ExposureLevels.tutorial:17:3-30:4
15 |   }
16 |
17 +   @Section(title: "Clamp with Per-Logger Levels") {
18 +     Each logger declares the highest level it may expose publicly, allowing
19 +     communities to share only critical or tracing data.
20 +
21 +     @ContentAndMedia {
22 +       @Image(source: "ExposureDiagram", alt: "Global exposure clamped by per-logger levels")
23 +
24 +     ```swift
25 +     let libraryLogger = Log(system: "Library", category: "Networking", maxExposureLevel: .debug)
26 +
27 +     Log.globalExposureLevel = .trace // emits up to .debug for libraryLogger
28 +     ```
29 +     }
30 +   }
31 | }
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/FileLogging.tutorial:6:3-30:4
4  |   }
5  |
6  +   @Section(title: "Create a Session Log File") {
7  +     Use `FileLogBackend` to append lines to a file. Pair it with the JSON decorator for NDJSON.
8  +
9  +     @ContentAndMedia {
10 +     ```swift
11 +     #if canImport(Foundation)
12 +     import Foundation
13 +     import WrkstrmLog
14 +
15 +     let logsDir = URL(fileURLWithPath: NSTemporaryDirectory())
16 +     let fileBackend = FileLogBackend(directory: logsDir, baseName: "app")
17 +
18 +     var sessionLog = Log(
19 +       system: "ExampleApp",
20 +       category: "session",
21 +       maxExposureLevel: .info,
22 +       backends: [fileBackend]
23 +     )
24 +     sessionLog.decorator = Log.Decorator.JSON()
25 +
26 +     sessionLog.info("Session started")
27 +     #endif
28 +     ```
29 +     }
30 +   }
31 |
32 |   @Section(title: "Enable Rotation (Daily/Size)") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/FileLogging.tutorial:32:3-56:4
30 |   }
31 |
32 +   @Section(title: "Enable Rotation (Daily/Size)") {
33 +     `FileLogBackend` can roll logs by day or after a size threshold.
34 +
35 +     @ContentAndMedia {
36 +     ```swift
37 +     #if canImport(Foundation)
38 +     import Foundation
39 +     import WrkstrmLog
40 +
41 +     let dir = URL(fileURLWithPath: NSTemporaryDirectory())
42 +     // Daily roll + ~5 MB size cap
43 +     let rotating = FileLogBackend(
44 +       directory: dir,
45 +       baseName: "example",
46 +       maxBytes: 5 * 1024 * 1024,
47 +       rollDaily: true
48 +     )
49 +
50 +     var rotatingLog = Log(system: "ExampleApp", category: "rotate", backends: [rotating])
51 +     rotatingLog.decorator = Log.Decorator.JSON()
52 +     rotatingLog.notice("File rotation active")
53 +     #endif
54 +     ```
55 +     }
56 +   }
57 |
58 |   @Section(title: "Fan Out to File + Console") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/FileLogging.tutorial:58:3-79:4
56 |   }
57 |
58 +   @Section(title: "Fan Out to File + Console") {
59 +     Combine a user-facing console log with a structured file log using `LogGroup`.
60 +
61 +     @ContentAndMedia {
62 +     ```swift
63 +     #if canImport(Foundation)
64 +     import Foundation
65 +     import WrkstrmLog
66 +
67 +     let dir = URL(fileURLWithPath: NSTemporaryDirectory())
68 +     let fileBackend = FileLogBackend(directory: dir, baseName: "example")
69 +
70 +     let userLog = Log(system: "ExampleApp", category: "ui", backends: [PrintLogBackend()])
71 +     var auditLog = Log(system: "ExampleApp", category: "audit", backends: [fileBackend])
72 +     auditLog.decorator = Log.Decorator.JSON()
73 +
74 +     let combined = LogGroup([userLog, auditLog])
75 +     combined.info("Launching…")
76 +     #endif
77 +     ```
78 +     }
79 +   }
80 | }
81 |
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:6:3-16:4
4  |   }
5  |
6  +   @Section(title: "Create a Logger") {
7  +     Instantiate a logger with a system, category, and optional `maxExposureLevel` to opt in to additional logs.
8  +
9  +     @ContentAndMedia {
10 +     ```swift
11 +     import WrkstrmLog
12 +
13 +     let logger = Log(system: "ExampleApp", category: "Networking", maxExposureLevel: .info)
14 +     ```
15 +     }
16 +   }
17 |
18 |   @Section(title: "Control Global Exposure") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:18:3-28:4
16 |   }
17 |
18 +   @Section(title: "Control Global Exposure") {
19 +     WrkstrmLog hides messages more verbose than `critical` by default. Raise
20 +     the global exposure level with `Log.globalExposureLevel` to view additional details.
21 +     Configure the global exposure level explicitly.
22 +
23 +     @ContentAndMedia {
24 +     ```swift
25 +     Log.globalExposureLevel = .debug
26 +     ```
27 +     }
28 +   }
29 |
30 |   @Section(title: "Choose Backends") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:30:3-40:4
28 |   }
29 |
30 +   @Section(title: "Choose Backends") {
31 +     Select the backend(s) appropriate for your platform or environment. When multiple are supplied,
32 +     index 0 is treated as the primary.
33 +
34 +     @ContentAndMedia {
35 +     ```swift
36 +     let osLogger = Log(system: "ExampleApp", category: "Startup", backends: [OSLogBackend()])
37 +     let printLogger = Log(system: "ExampleApp", category: "Startup", backends: [PrintLogBackend()])
38 +     ```
39 +     }
40 +   }
41 |
42 |   @Section(title: "Runtime Backend Selection") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:42:3-62:4
40 |   }
41 |
42 +   @Section(title: "Runtime Backend Selection") {
43 +     Adjust the active backend kinds at runtime. When multiple are set, index 0 is treated as
44 +     the primary.
45 +
46 +     @ContentAndMedia {
47 +     ```swift
48 +     // Set an ordered list of kinds
49 +     Log.Inject.setBackends([.os, .swift])
50 +
51 +     // Convenience: set a single kind
52 +     Log.Inject.setBackend(.os)
53 +
54 +     // Append/remove kinds
55 +     Log.Inject.appendBackend(.print)
56 +     Log.Inject.removeBackend(.swift)
57 +
58 +     // Clear custom selection; revert to platform default
59 +     Log.Inject.removeAllCustomBackends()
60 +     ```
61 +     }
62 +   }
63 |
64 |   @Section(title: "Record Messages") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:64:3-77:4
62 |   }
63 |
64 +   @Section(title: "Record Messages") {
65 +     Each logger provides methods for standard log levels.
66 +
67 +     @ContentAndMedia {
68 +     ```swift
69 +     logger.verbose("Request started")  // 🔍
70 +     logger.debug("Parsing response")   // 🐞
71 +     logger.info("Request progress")    // ℹ️
72 +     logger.notice("Request finished")  // 📝
73 +     logger.warning("Slow response")    // ⚠️
74 +     logger.error("Request failed: \(error)") // ❗
75 +     ```
76 +     }
77 +   }
78 |
79 |   @Section(title: "Understand Log Levels") {
warning: Missing 'Steps' child directive
The 'Section' directive must have exactly one 'Steps' child directive
  --> Tutorials/LoggingAPIs.tutorial:79:3-82:4
77 |   }
78 |
79 +   @Section(title: "Understand Log Levels") {
80 +     For a deeper explanation of each level and example messages, see
81 +     <doc:LogLevels>.
82 +   }
83 | }
Finished building documentation for 'WrkstrmLog' (0.27s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/wrkstrm/wrkstrmlog/3.0.0
Building for debugging...
[0/8] Write sources
[1/8] Write snippet-extract-tool-entitlement.plist
[2/8] Write sources
[4/8] Write swift-version-49B95AFC49DCD68C.txt
[6/53] Compiling SymbolKit GenericConstraint.swift
[7/53] Compiling SymbolKit GenericParameter.swift
[8/53] Compiling SymbolKit Generics.swift
[9/53] Compiling SymbolKit Namespace.swift
[10/57] Emitting module SymbolKit
[11/57] Compiling SymbolKit DeclarationFragments.swift
[12/57] Compiling SymbolKit Fragment.swift
[13/57] Compiling SymbolKit FragmentKind.swift
[14/57] Compiling SymbolKit FunctionParameter.swift
[15/57] Compiling SymbolKit FunctionSignature.swift
[16/57] Compiling SymbolKit Relationship.swift
[17/57] Compiling SymbolKit RelationshipKind.swift
[18/57] Compiling SymbolKit SourceOrigin.swift
[19/57] Compiling SymbolKit GenericConstraints.swift
[20/57] Compiling SymbolKit Swift.swift
[21/57] Compiling SymbolKit SourceRange.swift
[22/57] Compiling SymbolKit Metadata.swift
[23/57] Compiling SymbolKit Module.swift
[24/57] Compiling SymbolKit OperatingSystem.swift
[25/57] Compiling SymbolKit Platform.swift
[26/57] Compiling SymbolKit Mixin+Equals.swift
[27/57] Compiling SymbolKit Mixin+Hash.swift
[28/57] Compiling SymbolKit Mixin.swift
[29/57] Compiling SymbolKit LineList.swift
[30/57] Compiling SymbolKit Position.swift
[31/57] Compiling SymbolKit Names.swift
[32/57] Compiling SymbolKit SPI.swift
[33/57] Compiling SymbolKit Snippet.swift
[34/57] Compiling SymbolKit Extension.swift
[35/57] Compiling SymbolKit SemanticVersion.swift
[36/57] Compiling SymbolKit AccessControl.swift
[37/57] Compiling SymbolKit Availability.swift
[38/57] Compiling SymbolKit AvailabilityItem.swift
[39/57] Compiling SymbolKit Domain.swift
[40/57] Compiling SymbolKit Identifier.swift
[41/57] Compiling SymbolKit KindIdentifier.swift
[42/57] Compiling SymbolKit Location.swift
[43/57] Compiling SymbolKit Mutability.swift
[44/57] Compiling SymbolKit Symbol.swift
[45/57] Compiling SymbolKit SymbolKind.swift
[46/57] Compiling SymbolKit SymbolGraph.swift
[47/57] Compiling SymbolKit GraphCollector.swift
[48/57] Emitting module Snippets
[49/57] Compiling Snippets SnippetParser.swift
[50/57] Compiling Snippets Snippet.swift
[51/57] Compiling SymbolKit UnifiedSymbol+Encodable.swift
[52/57] Compiling SymbolKit UnifiedSymbol.swift
[53/57] Compiling SymbolKit UnifiedSymbolGraph+Encodable.swift
[54/57] Compiling SymbolKit UnifiedSymbolGraph.swift
[55/61] Compiling snippet_extract URL+Status.swift
[56/61] Compiling snippet_extract SymbolGraph+Snippet.swift
[57/61] Compiling snippet_extract SnippetBuildCommand.swift
[58/61] Emitting module snippet_extract
[58/61] Write Objects.LinkFileList
[59/61] Linking snippet-extract-tool
[60/61] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (2.87s)
Building for debugging...
[0/1] Write swift-version-49B95AFC49DCD68C.txt
Build of target: 'WrkstrmLog' complete! (0.21s)
     561
5	/Users/admin/builder/spi-builder-workspace/.docs/wrkstrm/wrkstrmlog/3.0.0
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/wrkstrm/wrkstrmlog/3.0.0
File count: 561
Doc size:   5.0MB
Preparing doc bundle ...
Uploading prod-wrkstrm-wrkstrmlog-3.0.0-840ca49f.zip to s3://spi-docs-inbox/prod-wrkstrm-wrkstrmlog-3.0.0-840ca49f.zip
Copying... [13%]
Copying... [20%]
Copying... [34%]
Copying... [40%]
Copying... [54%]
Copying... [61%]
Copying... [74%]
Copying... [81%]
Copying... [94%]
Copying... [100%]
Done.