跳到主要内容
知仓学习社ZHICANG

logging-setup

Generates structured logging infrastructure using os.log/Logger to replace print() statements. Use when user wants to add proper logging, replace pr…

不碰外部(只输出文字)无严重或高危命中rshankras/claude-code-apple-skills

它会碰到什么

扫了多少3 个文本文件,15 KB
它会碰到什么不碰外部(只输出文字)
命中总数1 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

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?
  1. 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:

// 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

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。