home / skills / rshankras / claude-code-apple-skills / logging-setup
This skill replaces print statements with a structured Swift Logger setup, improving privacy, performance, and debugging across modules.
npx playbooks add skill rshankras/claude-code-apple-skills --skill logging-setupReview the files below or copy the command above to add this skill to your agents.
---
name: logging-setup
description: Generates structured logging infrastructure using os.log/Logger to replace print() statements. Use when user wants to add proper logging, replace print statements, or set up app logging.
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion]
---
# Logging Setup Generator
Replace print() statements with Apple's structured logging system (os.log/Logger) for better debugging, privacy controls, and Console.app integration.
## When This Skill Activates
Use this skill when the user:
- Asks to "add logging" or "set up logging"
- Wants to "replace print statements"
- Mentions "os.log", "Logger", or "structured logging"
- Asks about "debug logging" or "production logging"
- Wants to audit print() usage in their codebase
## Why Logger Over print()
| print() | Logger |
|---------|--------|
| Always executes | Debug logs compiled out in Release |
| No filtering | Filter by subsystem/category in Console.app |
| No privacy | .private, .public, .sensitive annotations |
| String interpolation always runs | Deferred evaluation (performance) |
| Not in Console.app | Full system integration |
## Pre-Generation Checks
### 1. Project Context Detection
- [ ] Check deployment target (Logger requires iOS 14+ / macOS 11+)
- [ ] Search for existing Logger/os.log usage
- [ ] Identify source file locations (Sources/, App/, etc.)
### 2. Conflict Detection
Search for existing logging:
```
Glob: **/*Logger*.swift
Grep: "import OSLog" or "os_log"
```
If found, ask user:
- Extend existing logging?
- Replace with new implementation?
- Create separate logger?
## Modes of Operation
### Mode 1: Audit
Find all print() statements and report:
```
Grep: print\s*\(
```
Report format:
- File:line - print statement
- Severity: Info/Warning/Error (based on context)
- Suggested Logger level
### Mode 2: Generate
Create logging infrastructure from scratch.
### Mode 3: Migrate
Convert existing print() to Logger with suggestions.
## Configuration Questions
Ask user via AskUserQuestion:
1. **Categories needed?**
- Network, Auth, UI, Data (defaults)
- Custom categories?
2. **Include migration helpers?**
- Extension on String for quick migration
- Temporary print-to-log bridge
## Generation Process
### Step 1: Create AppLogger.swift
Read template from `templates/AppLogger.swift` and customize:
- Set subsystem from Bundle.main.bundleIdentifier
- Add user-specified categories
- Include usage examples in comments
### Step 2: Determine File Location
Check project structure:
- If `Sources/` exists → `Sources/Logging/AppLogger.swift`
- If `App/` exists → `App/Logging/AppLogger.swift`
- Otherwise → `Logging/AppLogger.swift`
### Step 3: Provide Migration Guidance
Show examples of converting common print patterns:
```swift
// Before
print("User logged in: \(email)")
// After
AppLogger.auth.info("User logged in: \(email, privacy: .private)")
```
## Output Format
After generation, provide:
### Files Created
- `[Path]/Logging/AppLogger.swift`
### Integration Steps
1. Import in files: `import OSLog` (not needed if using AppLogger)
2. Replace print() calls with AppLogger.[category].[level]()
3. Add privacy annotations for sensitive data
### Privacy Annotations Guide
- `.public` - Safe to log (IDs, counts, non-sensitive)
- `.private` - Redacted in release (emails, names)
- `.sensitive` - Always redacted (passwords, tokens)
### Console.app Usage
1. Open Console.app
2. Filter by subsystem: `com.yourapp`
3. Filter by category: `Network`, `Auth`, etc.
### Testing Instructions
1. Add a test log: `AppLogger.general.debug("Test log")`
2. Run app, check Xcode console
3. Open Console.app, filter by your app's subsystem
## References
- **logger-patterns.md** - Best practices and privacy levels
- **migration-guide.md** - Converting print() to Logger
- **templates/AppLogger.swift** - Template file
This skill generates a structured logging infrastructure using Apple's os.log/Logger to replace print() statements. It helps teams add categorized, privacy-aware, and performant logging across Swift apps (iOS, macOS) and provides migration guidance from print().
The skill inspects the codebase for print() calls and any existing os.log/Logger usage, then offers audit results or generates a new AppLogger.swift with subsystem and categories. It can run in audit, generate, or migrate modes to report print locations, create a logging facade, or automatically convert print() calls to Logger invocations with privacy annotations.
Which deployment targets support Logger?
Logger requires iOS 14+/macOS 11+; check your deployment target before generating the logger.
Will migration break existing behavior?
No—Logger preserves runtime logging in Debug and defers costly interpolation; tests and an audit pass are recommended before wide replacement.