TIL (Today I Learned) - iOS ๋กœ๊น…(Logging)๊ณผ OSLog ๐Ÿ“ฑ

jeongmuyametteยท2024๋…„ 11์›” 21์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
4/72
post-thumbnail

TIL (Today I Learned) - iOS ๋กœ๊น…(Logging)๊ณผ OSLog ๐Ÿ“ฑ

๋กœ๊น…์ด๋ž€? ๐Ÿค”

์•ฑ์ด ์ž์‹ ์˜ ์ผ๊ธฐ์žฅ์„ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค! ์•ฑ์—์„œ ์ผ์–ด๋‚˜๋Š” ๋ชจ๋“  ์ผ๋“ค์„ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ด์š”.

OSLog๋ž€? ๐ŸŽ

Apple์ด ๋งŒ๋“  ํŠน๋ณ„ํ•œ ์ผ๊ธฐ์žฅ ์‹œ์Šคํ…œ์ด์—์š”! iOS, macOS ๋“ฑ Apple ๊ธฐ๊ธฐ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๊ธฐ๋ก์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

OSLog์˜ ํŠน๋ณ„ํ•œ ์  โญ๏ธ

  1. ์„ฑ๋Šฅ์ด ์ข‹์•„์š” ๐Ÿš€

    • ๊ธฐ๋ก์„ ๋น ๋ฅด๊ฒŒ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•จ
  2. ์•ˆ์ „ํ•ด์š” ๐Ÿ”’

    • ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋”ฐ๋กœ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Œ
    • ๊ฐœ์ธ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌ
  3. ์ฐพ๊ธฐ ์‰ฌ์›Œ์š” ๐Ÿ”

    • Console.app์—์„œ ์‰ฝ๊ฒŒ ํ™•์ธ ๊ฐ€๋Šฅ
    • ์›ํ•˜๋Š” ๊ธฐ๋ก๋งŒ ๊ณจ๋ผ์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ

OSLog ์‚ฌ์šฉ๋ฒ• โœ๏ธ

import OSLog

// ์ผ๊ธฐ์žฅ ๋งŒ๋“ค๊ธฐ
let logger = Logger(subsystem: "com.myapp", category: "์ผ์ƒ")

// ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๊ธฐ๋กํ•˜๊ธฐ
logger.info("ํ‰๋ฒ”ํ•œ ํ•˜๋ฃจ์˜€์–ด์š”")     // ์ผ๋ฐ˜์ ์ธ ์ •๋ณด
logger.debug("ํŠน๋ณ„ํ•œ ์ผ์ด ์žˆ์—ˆ์–ด์š”")  // ์ž์„ธํ•œ ์ •๋ณด
logger.notice("์กฐ๊ธˆ ๊ฑฑ์ •๋˜๋Š” ์ผ์ด...")// ์ฃผ์˜ํ•  ์ผ
logger.error("ํฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์–ด์š”!")   // ๋ฌธ์ œ ์ƒํ™ฉ

// ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธํ•˜๊ธฐ
logger.log("์‚ฌ์šฉ์ž \(name, privacy: .private) ๋กœ๊ทธ์ธ") // ๋น„๋ฐ€ ์ •๋ณด
logger.log("์•ฑ ๋ฒ„์ „: \(version, privacy: .public)")  // ๊ณต๊ฐœ ์ •๋ณด

๋กœ๊ทธ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿ‘€

  1. Xcode Console ๐Ÿ‘จโ€๐Ÿ’ป

    • ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฐ”๋กœ ํ™•์ธ
  2. Console.app ๐Ÿ–ฅ

    • Mac์—์„œ ์ž์„ธํžˆ ๋ถ„์„
  3. ๊ธฐ๊ธฐ ๋กœ๊ทธ ๐Ÿ“ฑ

    • ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ ํ™•์ธ

๋กœ๊น…์ด ํ•„์š”ํ•œ ์ด์œ  ๐Ÿ’ก

  1. ๋ฌธ์ œ ํ•ด๊ฒฐ์‚ฌ ๐Ÿ”

    • ์•ฑ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์›์ธ ์ฐพ๊ธฐ
    • ๋ฒ„๊ทธ ์ˆ˜์ •ํ•  ๋•Œ ๋„์›€๋จ
  2. ๊ฑด๊ฐ• ์ฒดํฌ โš•๏ธ

    • ์•ฑ์ด ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ
    • ์‚ฌ์šฉ์ž๋“ค์ด ๋ถˆํŽธํ•ดํ•˜๋Š” ๋ถ€๋ถ„ ๋ฐœ๊ฒฌ
  3. ๊ธฐ์–ต ์ €์žฅ์†Œ ๐Ÿ—‚

    • ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ก
    • ๋‚˜์ค‘์— ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ํžˆ์Šคํ† ๋ฆฌ ์ €์žฅ

์‹ค์ƒํ™œ ๋น„์œ  ์˜ˆ์‹œ ๐ŸŒŸ

  • ๐Ÿ“” ํ•™์ƒ์˜ ์ผ๊ธฐ์žฅ
  • ๐Ÿฅ ๋ณ‘์› ์ง„๋ฃŒ ๊ธฐ๋ก๋ถ€
  • โœˆ๏ธ ๋น„ํ–‰๊ธฐ ๋ธ”๋ž™๋ฐ•์Šค
  • ๐Ÿ“š ์„ ์ƒ๋‹˜์˜ ์ถœ์„๋ถ€

๋กœ๊ทธ ๋ ˆ๋ฒจ ์ข…๋ฅ˜ ๐Ÿ“Š

  1. Info: ํ‰๋ฒ”ํ•œ ์ผ์ƒ ๊ธฐ๋ก ๐Ÿ“
  2. Debug: ์ž์„ธํ•œ ์ •๋ณด ๊ธฐ๋ก ๐Ÿ”
  3. Notice: ์ฃผ์˜ํ•  ๋งŒํ•œ ์ผ โš ๏ธ
  4. Error: ๋ฌธ์ œ ์ƒํ™ฉ โŒ
  5. Fault: ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ ๐Ÿšจ

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ ๐Ÿ’ป

class ๊ฒŒ์ž„๋งค๋‹ˆ์ € {
    let logger = Logger(subsystem: "com.mygame", category: "๊ฒŒ์ž„")
    
    func ๊ฒŒ์ž„์‹œ์ž‘() {
        logger.info("๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜์—ˆ์–ด์š”!")
        
        if ์ธํ„ฐ๋„ท์—ฐ๊ฒฐ์•ˆ๋จ {
            logger.error("์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•ด์š” ๐Ÿ˜ข")
            return
        }
        
        logger.notice("๋ชจ๋“  ์ค€๋น„ ์™„๋ฃŒ! ๐Ÿ‘")
    }
}

์˜ค๋Š˜์˜ ๋ฐฐ์›€ ์š”์•ฝ โœจ

  • ์•ฑ๋„ ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ์ผ๊ธฐ(๋กœ๊ทธ)๋ฅผ ์“ด๋‹ค
  • OSLog๋Š” Apple์˜ ํŠน๋ณ„ํ•œ ๋กœ๊น… ์‹œ์Šคํ…œ
  • ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๊ธฐ๋ก ๋ฐฉ๋ฒ• ์ œ๊ณต
  • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ง€์›

๋‹ค์Œ์— ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ ๐Ÿ“š

  • ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ๋ฐฉ๋ฒ•
  • ๋กœ๊ทธ ์ €์žฅ ๊ด€๋ฆฌ
  • ํšจ์œจ์ ์ธ ๋กœ๊น… ์ „๋žต
  • OSLog ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

#iOS #Swift #Logging #OSLog #TIL #๊ฐœ๋ฐœ๊ณต๋ถ€

์ด๋ ‡๊ฒŒ OSLog๊นŒ์ง€ ํฌํ•จํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด์•˜์–ด์š”! ๐Ÿ“ฑ๐Ÿ’ช

profile
์–‘์ •๋ฌด

0๊ฐœ์˜ ๋Œ“๊ธ€