#typescript #visual-studio-code
#typescript #visual-studio-code
Вопрос:
Каков стандартный способ записи инструкций ведения журнала в расширении VSCode в файл?
Я чувствую, что в работе есть какая-то парадигма, которую я упускаю… Я могу найти множество способов сделать консольный журнал более полезным для отладки моего расширения (каналы, библиотеки, такие как typescript-logging), но я не вижу никаких методов для создания файла журнала для моего расширения.
Разве это не обычная практика? Если у пользователя моего расширения возникает проблема, это самый простой способ для них отправить мне диагностику, чтобы сохранить журнал консоли, который они могут увидеть, открыв инструменты разработчика?
Спасибо за любые предложения
Комментарии:
1. Расширения получают папку logPath, которой они владеют и в которую могут записывать журналы. Что касается того, как вы на самом деле записываете туда файл и что вы пишете, вы можете использовать любую библиотеку ведения журнала, которую вы хотите, или просто использовать Node API. github.com/Microsoft/vscode/blob /…
Ответ №1:
Для тех, кто пытается решить ту же проблему и ищет предложения, я в конечном итоге выбралwinston.js который предоставляет типы для typescript.
Я определил регистратор следующим образом:
const logger: winston.Logger = winston.createLogger({
level: 'debug',
format: winston.format.combine(
winston.format.simple(),
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new winston.transports.File({
level: 'info',
dirname: logFileDir,
filename: logFileName
}),
new winston.transports.File({
level: 'debug',
dirname: logFileDir,
filename: debugLogFileName
}),
]
});
export logger;
И затем я могу вызвать logger.info("whatever")
из другого места в моем коде и записать его в указанные файлы журнала.
Вы также можете записать журналы на консоль, добавив Console
транспорт, но будьте осторожны с этой ошибкой, которая предотвращает отображение журналов в «Консоли отладки» VSCode. Это обходное решение решило эту проблему для меня.