log.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import * as monaco from 'monaco-editor'
  2. export const LOG_LANGUAGE_ID = 'log'
  3. export function registerLogLanguage() {
  4. monaco.languages.register({ id: LOG_LANGUAGE_ID })
  5. monaco.languages.setMonarchTokensProvider(LOG_LANGUAGE_ID, {
  6. tokenizer: {
  7. root: [
  8. // 时间戳
  9. [/\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?/, 'log.timestamp'],
  10. // level
  11. [/\b(\[INFO\]|\[Info\]|\[info\]|\[I\])\b/, 'log.info'],
  12. [/\b(\[WARN\]|\[Warn\]|\[warn\]|\[WARNING\]|\[W\])\b/, 'log.warn'],
  13. [/\b(\[ERROR\]|\[Error\]|\[error\]|\[E\])\b/, 'log.error'],
  14. [/\b(\[DEBUG\]|\[Debug\]|\[debug\]|\[D\])\b/, 'log.debug'],
  15. // 数字
  16. [/\b\d+\b/, 'number'],
  17. // 路径
  18. [/(\/[a-zA-Z0-9._-]+)+/, 'string']
  19. ]
  20. }
  21. })
  22. // 悬浮提示(可选)
  23. monaco.languages.registerHoverProvider(LOG_LANGUAGE_ID, {
  24. provideHover(model, position) {
  25. const word = model.getWordAtPosition(position)
  26. if (!word) return null
  27. if (word.word.toUpperCase() === 'ERROR') {
  28. return {
  29. contents: [{ value: '**ERROR** 日志级别' }]
  30. }
  31. }
  32. return null
  33. }
  34. })
  35. }