Skip to main content
Sink๋Š” ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•  ๋Œ€์ƒ์„, Filter๋Š” ์–ด๋–ค ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. sonamu.config.ts์˜ logging ์˜ต์…˜์—์„œ ์ปค์Šคํ…€ sink์™€ filter๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Sink๋ž€?

Sink๋Š” ๋กœ๊ทธ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ:
  • ์ฝ˜์†” (ํ„ฐ๋ฏธ๋„)
  • ํŒŒ์ผ
  • ์™ธ๋ถ€ ๋กœ๊น… ์„œ๋น„์Šค (Sentry, Datadog ๋“ฑ)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

Sink๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๋กœ๊ทธ๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ณณ์— ๊ธฐ๋ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: 1. ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง (์ฝ˜์†”)
2. ์˜๊ตฌ ๋ณด๊ด€ (ํŒŒ์ผ)
3. ์—๋Ÿฌ ์•Œ๋ฆผ (์™ธ๋ถ€ ์„œ๋น„์Šค)
4. ํ†ต๊ณ„ ๋ถ„์„ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)

์—ฌ๋Ÿฌ Sink ๋™์‹œ ์‚ฌ์šฉ

ํ•œ ๋กœ๊ทธ๋ฅผ ์—ฌ๋Ÿฌ Sink์— ๋™์‹œ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
์žฅ์ :
  • ์‹ค์‹œ๊ฐ„ ํ™•์ธ (console)
  • ์˜๊ตฌ ๋ณด๊ด€ (file)
  • ์ฆ‰์‹œ ์•Œ๋ฆผ (sentry)

Filter๋ž€?

Filter๋Š” ๋กœ๊ทธ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ:
  • ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ๋งŒ
  • ํŠน์ • ๋ ˆ๋ฒจ ์ด์ƒ๋งŒ
  • ํŠน์ • URL ํŒจํ„ด๋งŒ
  • ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ

Filter๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋‹ค ๊ธฐ๋กํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค: 1. ์„ฑ๋Šฅ ์ €ํ•˜
2. ๋””์Šคํฌ ๊ณต๊ฐ„ ๋‚ญ๋น„
3. ๊ฐ€๋…์„ฑ ์ €ํ•˜

Filter ์‚ฌ์šฉ ์˜ˆ์‹œ

Sink vs Filter ์ฐจ์ด์ 

๋‘ ๊ฐœ๋…์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

Sink๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ

1. ์ƒˆ๋กœ์šด ์ถœ๋ ฅ ๋Œ€์ƒ์ด ํ•„์š”ํ•  ๋•Œ
2. ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๊ธฐ๋กํ•  ๋•Œ
3. ์—ฌ๋Ÿฌ ๊ณณ์— ๋™์‹œ ๊ธฐ๋กํ•  ๋•Œ

Filter๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ

1. ํŠน์ • ์กฐ๊ฑด์˜ ๋กœ๊ทธ๋งŒ ํ•„์š”ํ•  ๋•Œ
2. ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
3. Sink๋ณ„๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ๋ฅผ ๋ณด๋‚ด๊ณ  ์‹ถ์„ ๋•Œ

Sinks ์„ค์ • ์ƒ์„ธ

sinks ์˜ต์…˜

logging.sinks์— ์ปค์Šคํ…€ Sink๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: Record<string, Sink>
"fastify-console" ์ด๋ฆ„์€ Sonamu๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ Sink์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ Sink๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

์ฝ˜์†” Sink

ํ„ฐ๋ฏธ๋„์— ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ Sink

ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ Sink

Node.js ์ŠคํŠธ๋ฆผ์— ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ Sink

์ง์ ‘ Sink๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Filters ์„ค์ •

filters ์˜ต์…˜

๋กœ๊ทธ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: Record<string, FilterLike>
"fastify-console" ์ด๋ฆ„์€ Sonamu๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ Filter์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ Filter๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

URL ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ

๋ ˆ๋ฒจ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ

์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ

ํ”„๋กœํผํ‹ฐ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ

์‹ค์ „ ์˜ˆ์‹œ

๊ฐœ๋ฐœ vs ํ”„๋กœ๋•์…˜

๋‹ค์ค‘ Sink & Filter

์™ธ๋ถ€ ์„œ๋น„์Šค ํ†ตํ•ฉ

URL ํŒจํ„ด๋ณ„ ๋กœ๊น…

LogRecord ๊ตฌ์กฐ

Filter์™€ ์ปค์Šคํ…€ Sink์—์„œ ์‚ฌ์šฉํ•˜๋Š” LogRecord ํƒ€์ž…:
์ฃผ์š” ํ”„๋กœํผํ‹ฐ:
  • category: ๋กœ๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ (์˜ˆ: ["fastify"])
  • level: ๋กœ๊ทธ ๋ ˆ๋ฒจ ("debug" | "info" | "warning" | "error" | "fatal")
  • message: ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ๋ฐฐ์—ด
  • timestamp: ๋กœ๊ทธ ๋ฐœ์ƒ ์‹œ๊ฐ„
  • properties: ์ถ”๊ฐ€ ์ •๋ณด (Fastify์˜ ๊ฒฝ์šฐ req, res ๋“ฑ)
Fastify์˜ properties:

์ฃผ์˜์‚ฌํ•ญ

1. Sink ์ด๋ฆ„ ์ถฉ๋Œ

2. Filter ์„ฑ๋Šฅ

3. ๋น„๋™๊ธฐ Sink

4. Filter๋Š” ๋™๊ธฐ๋งŒ

๋‹ค์Œ ๋‹จ๊ณ„

์นดํ…Œ๊ณ ๋ฆฌ ๋กœ๊น…

์นดํ…Œ๊ณ ๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”

Fastify ๋กœ๊น…

HTTP ์š”์ฒญ/์‘๋‹ต ๋กœ๊น…์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์„ธ์š”

LogTape ์„ค์ •

๊ธฐ๋ณธ ๋กœ๊น… ์„ค์ •๊ณผ ๊ฐœ๋…์„ ํ•™์Šตํ•˜์„ธ์š”

LogTape ๊ณต์‹ ๋ฌธ์„œ

LogTape์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๊ณผ API๋ฅผ ํ™•์ธํ•˜์„ธ์š”