Winston: μ½˜μ†” 전솑이 디버그 μ½˜μ†”μ— 쓰지 μ•ŠμŒ

에 λ§Œλ“  2018λ…„ 12μ›” 06일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: winstonjs/winston

κ·€ν•˜μ˜ ν™˜κ²½μ— λŒ€ν•΄ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

  • _ winston 버전? _

    • [] winston@2

    • [x] winston@3

  • _ node -v 좜λ ₯ : v10.1.0
  • _ 운영 체제? _ Windows
  • _Language? _ TypeScript

무엇이 λ¬Έμ œμž…λ‹ˆκΉŒ?

κΈ°λ³Έ 제곡 μ½˜μ†” 전솑을 μ‚¬μš©ν•˜λ©΄ μ •μƒμ μœΌλ‘œ 싀행될 λ•Œ (예 : node ./dist/index.js ) μ½˜μ†”μ— κΈ°λ‘λ˜μ§€λ§Œ Visual Studio Codeμ—μ„œ 디버깅 ν•  λ•ŒλŠ” 디버그 μ½˜μ†”μ— κΈ°λ‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. console.log () / warn () / error ()에 λŒ€ν•œ ν‘œμ€€ ν˜ΈμΆœμ€ 디버그 μ½˜μ†”μ— κΈ°λ‘λ©λ‹ˆλ‹€.

λŒ€μ‹  μ–΄λ–€ 일이 일어날 κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆκΉŒ?

λͺ¨λ“  λ©”μ‹œμ§€κ°€ μ •μƒμ μœΌλ‘œ 싀행될 λ•Œ ν‘œμ€€ μ½˜μ†”μ— κΈ°λ‘λ˜λŠ” κ²ƒμ²˜λŸΌ 디버그 μ½˜μ†”μ— 기둝 될 κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

기타 정보

λ¬Έμ œλŠ” 전솑 κ΅¬ν˜„μ˜ log () λ©”μ„œλ“œμ—μ„œ _stderr.write () 및 _stdout.write ()λ₯Ό μ‚¬μš©ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. ν‘œμ€€ console.log () / warn () / error () ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λ„λ‘ 49, 62 및 77의 if 문의 쑰건을 false λ°”κΎΈλ©΄ 좜λ ₯이 μ½˜μ†” 좜λ ₯에 λ„λ‹¬ν•©λ‹ˆλ‹€. . λΆ„λͺ…νžˆ λ°”λžŒμ§ν•˜μ§€ μ•Šμ€ λΆ€μž‘μš©μ€ μ»€μŠ€ν…€ eol이 λ¬΄μ‹œλœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

bug help wanted important

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

방금이 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ μ•„μ£Ό κ°„λ‹¨ν•œ 아이디어λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. console.log , console.warn 및 console.error πŸ˜„

ν˜„μž¬ Winston은 [console._stderr] 및 [console._stdout]을 ν™•μΈν•˜κ³  있으며 μ΄λŸ¬ν•œ μŠ€νŠΈλ¦Όμ— 직접 μ“°λŠ” 것을 μ„ ν˜Έν•˜μ§€λ§Œ console.warn , console.error 및 console.log μ‚¬μš©μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. μ‚¬μš©ν•  μˆ˜μ—†λŠ” 경우 _stderr 및 _stdout )은 node.js의 μ „μ—­ μ½˜μ†” μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ [console] API의 μΌλΆ€λ‘œ λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©° μ—΄κ±° ν•  μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.

λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것보닀 Winstonμ—μ„œ 직접 μŠ€νŠΈλ¦Όμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμ˜ μž₯점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ‚˜λ₯Ό μœ„ν•΄, console μžλ°” 슀크립트 μ»¨ν…μŠ€νŠΈ μˆ˜λ‹¨μ— ꡬ체적으둜 console 객체, 일반적으둜 λ˜λŠ” μŠ€νŠΈλ¦Όμ— λŒ€ν•œ ν”„λ‘μ‹œλ‘œν•˜μ§€ "μ½˜μ†”". 방법이 항상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? 특히 Winston에 λ‚΄μž₯ 된 stream 전솑이 있기 λ•Œλ¬Έμ— "μ½˜μ†”"을 기본적으둜 둜컬 κ°œλ°œμ— μ ν•©ν•˜λ‹€κ³  ν•΄μ„ν•©λ‹ˆλ‹€.

VS CodeλŠ” ν•΄λ‹Ή 속성 (μ•„λ§ˆλ„ λ…Έλ“œμ—μ„œ μ‹€ν–‰ 쀑이기 λ•Œλ¬Έμ—)을 _have_ν•˜μ§€λ§Œ 디버그 μ½˜μ†”μ˜ κΈ°λ³Έ "capture"λŠ” "console"μž…λ‹ˆλ‹€. μ΄λŠ” μ•„λ§ˆλ„ console.log ν˜ΈμΆœμ— νŠΉλ³„νžˆ 후크λ₯Ό μ„€μΉ˜ν–ˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. , 슀트림 μžμ²΄κ°€ μ•„λ‹™λ‹ˆλ‹€. 즉 VS Codeκ°€ 좜λ ₯을 μƒμ„±ν•˜μ§€λ§Œ μΊ‘μ²˜ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 이 파일 κ³Ό κ΄€λ ¨

λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ–ΈκΈ‰ν–ˆλ“―μ΄, μ–΄λ–€ 좜λ ₯ VS Code 캑처λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ Winstonμ—μ„œ "μ½˜μ†”"전솑이 μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/index.js",
      // Capture "std" instead of "console"
      "outputCapture": "std"
    }
  ]
}

@ adi7ya 의 링크 된 쑰언을 λ”°λ₯΄λ©΄ VS CodeλŠ” console.log κ°€ 호좜 된 쀄을 좜λ ₯ν•©λ‹ˆλ‹€.이 쀄은 Winston을 호좜 ν•œ 곳이 μ•„λ‹ˆλΌ μž¬μ •μ˜ 된 log μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ•½κ°„λ§Œ 유용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  9 λŒ“κΈ€

더 λ§Žμ€ vscode λ²„κ·Έμ²˜λŸΌ λŠκ»΄μ§‘λ‹ˆλ‹€-μš°λ¦¬κ°€ κ·Έλ ‡κ²Œ μ„±κ³΅μ μœΌλ‘œ μ“Έ 수 μ—†λ‹€λ©΄ μ™œ κ·Έλ“€μ˜ 디버그 μ½˜μ†”μ— _stdout 와 같은 μ†Œν’ˆμ΄ μžˆμŠ΅λ‹ˆκΉŒ? λ¬Όλ‘ , vscode에 λŒ€ν•΄ μž‘λ™ν•˜λŠ” ν•΄κ²° 방법과 같은 μˆ˜μ • 된 전솑을 κ°€μ§ˆ 수 μžˆμ§€λ§Œ 이상적이지 μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 winstonμ—μ„œ μˆ˜μ •λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•˜λŠ” 경우 μ–΄λ–€ 아이디어도 자유둭게 제곡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. :)ν•˜μ§€λ§Œ winston이 vscodeμ—μ„œ μ‹€ν–‰ 쀑인지 ν™•μΈν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 였히렀 vscode의 μ½˜μ†”μ΄ 더 잘 μž‘λ™ν•΄μ•Όν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@sirockin vscode ν™•μž₯을 κ°œλ°œν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” vsodeμ—μ„œ λΉ„μŠ·ν•œ 문제 λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“  μ½˜μ†” 전솑에 λŒ€ν•œ 둜그 λ©”μ„œλ“œλ₯Ό μž¬μ • μ˜ν•˜μ—¬ μž‘λ™ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•΄μ•Όν•˜μ§€λ§Œ 더 λ§Žμ€ 쑰사가 ν•„μš”ν•©λ‹ˆλ‹€.

방금이 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ μ•„μ£Ό κ°„λ‹¨ν•œ 아이디어λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. console.log , console.warn 및 console.error πŸ˜„

ν˜„μž¬ Winston은 [console._stderr] 및 [console._stdout]을 ν™•μΈν•˜κ³  있으며 μ΄λŸ¬ν•œ μŠ€νŠΈλ¦Όμ— 직접 μ“°λŠ” 것을 μ„ ν˜Έν•˜μ§€λ§Œ console.warn , console.error 및 console.log μ‚¬μš©μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. μ‚¬μš©ν•  μˆ˜μ—†λŠ” 경우 _stderr 및 _stdout )은 node.js의 μ „μ—­ μ½˜μ†” μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ [console] API의 μΌλΆ€λ‘œ λ¬Έμ„œν™”λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©° μ—΄κ±° ν•  μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.

λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것보닀 Winstonμ—μ„œ 직접 μŠ€νŠΈλ¦Όμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμ˜ μž₯점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ‚˜λ₯Ό μœ„ν•΄, console μžλ°” 슀크립트 μ»¨ν…μŠ€νŠΈ μˆ˜λ‹¨μ— ꡬ체적으둜 console 객체, 일반적으둜 λ˜λŠ” μŠ€νŠΈλ¦Όμ— λŒ€ν•œ ν”„λ‘μ‹œλ‘œν•˜μ§€ "μ½˜μ†”". 방법이 항상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? 특히 Winston에 λ‚΄μž₯ 된 stream 전솑이 있기 λ•Œλ¬Έμ— "μ½˜μ†”"을 기본적으둜 둜컬 κ°œλ°œμ— μ ν•©ν•˜λ‹€κ³  ν•΄μ„ν•©λ‹ˆλ‹€.

VS CodeλŠ” ν•΄λ‹Ή 속성 (μ•„λ§ˆλ„ λ…Έλ“œμ—μ„œ μ‹€ν–‰ 쀑이기 λ•Œλ¬Έμ—)을 _have_ν•˜μ§€λ§Œ 디버그 μ½˜μ†”μ˜ κΈ°λ³Έ "capture"λŠ” "console"μž…λ‹ˆλ‹€. μ΄λŠ” μ•„λ§ˆλ„ console.log ν˜ΈμΆœμ— νŠΉλ³„νžˆ 후크λ₯Ό μ„€μΉ˜ν–ˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. , 슀트림 μžμ²΄κ°€ μ•„λ‹™λ‹ˆλ‹€. 즉 VS Codeκ°€ 좜λ ₯을 μƒμ„±ν•˜μ§€λ§Œ μΊ‘μ²˜ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 이 파일 κ³Ό κ΄€λ ¨

λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ–ΈκΈ‰ν–ˆλ“―μ΄, μ–΄λ–€ 좜λ ₯ VS Code 캑처λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ Winstonμ—μ„œ "μ½˜μ†”"전솑이 μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/index.js",
      // Capture "std" instead of "console"
      "outputCapture": "std"
    }
  ]
}

@ adi7ya 의 링크 된 쑰언을 λ”°λ₯΄λ©΄ VS CodeλŠ” console.log κ°€ 호좜 된 쀄을 좜λ ₯ν•©λ‹ˆλ‹€.이 쀄은 Winston을 호좜 ν•œ 곳이 μ•„λ‹ˆλΌ μž¬μ •μ˜ 된 log μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ•½κ°„λ§Œ 유용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

VS Code μ‚¬λžŒλ“€κ³Ό ν•¨κ»˜ μ½˜μ†” 전솑 좜λ ₯에 ν•„μš”ν•œ vsc 섀정을 ν•  수 μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ 기본값을 μΊ‘μ²˜ν•©λ‹ˆλ‹€ : https://github.com/Microsoft/vscode/issues/69959 . 그렇지 μ•ŠμœΌλ©΄ ν•„μš”ν•œ vsc μ„€μ • 변경이 λ‚΄ μ˜κ²¬μ—μ„œ λ§ν¬λ©λ‹ˆλ‹€. ^^ν•˜μ§€λ§Œ μ½˜μ†” 전솑에 λŒ€ν•œ μœ νš¨ν•œ μ§ˆλ¬Έμž…λ‹ˆλ‹€. μΈκΈ°μžˆλŠ” λ§Žμ€ νŽΈμ§‘μžκ°€ 기본적으둜 "μ˜¬λ°”λ₯Έ"μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ μ½˜μ†” 전솑 cc @indexzero 의 λ™μž‘μ„ λ³€κ²½ν•΄μ•Όν•©λ‹ˆλ‹€.

이것은 λ˜ν•œ λ‚˜λ₯Ό λ¬Όμ—ˆκ³  @victorandree와 더 많이 λ™μ˜ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ΄ μœ μš©ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 경우 ν˜„μž¬ λ‚΄ λͺ©μ μ„ μœ„ν•΄ 맀우 λ² μ–΄ λ³Έ 전솑을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

import winston from "winston";
import Transport from "winston-transport";

const { MESSAGE } = require("triple-beam");
const level = process.env.LOG_LEVEL || "info";

class SimpleConsoleTransport extends Transport {
  log = (info: any, callback: any) => {
    setImmediate(() => this.emit("logged", info));

    console.log(info[MESSAGE]);

    if (callback) {
      callback();
    }
  };
}

export const logger = winston.createLogger({
  level,
  defaultMeta: {},
  transports: [new SimpleConsoleTransport()]
});

# 1836μ—μ„œμ΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ‚΄ μ œμ•ˆμ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.

λ˜ν•œμ΄ λ¬Έμ œκ°€ λ°œμƒν–ˆμœΌλ©° VSCode와 κ΄€λ ¨λœ κ²ƒμœΌλ‘œ 보이지 μ•ŠμŠ΅λ‹ˆλ‹€. node --inspect λ₯Ό μ‹€ν–‰ ν•œ λ‹€μŒ chrome://inspect Chromeμ—μ„œ μ—°κ²°ν•˜λ©΄ console.log/etc 호좜 만 ν‘œμ‹œλ©λ‹ˆλ‹€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰