Geen omschrijving
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

log-display.component.html 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <div class="log-container">
  2. <!-- 日志头部控制 -->
  3. <div class="log-header">
  4. <h3 class="text-lg font-semibold">系统日志</h3>
  5. <div class="log-controls">
  6. <mat-form-field appearance="outline" class="level-filter">
  7. <mat-label>日志级别</mat-label>
  8. <mat-select [(ngModel)]="selectedLevel" (selectionChange)="applyFilters()">
  9. <mat-option value="all">全部</mat-option>
  10. <mat-option value="debug">调试</mat-option>
  11. <mat-option value="info">信息</mat-option>
  12. <mat-option value="warn">警告</mat-option>
  13. <mat-option value="error">错误</mat-option>
  14. </mat-select>
  15. </mat-form-field>
  16. <mat-form-field appearance="outline" class="session-filter" *ngIf="availableSessions.length > 0">
  17. <mat-label>会话过滤</mat-label>
  18. <mat-select [(ngModel)]="selectedSessionId" (selectionChange)="applyFilters()">
  19. <mat-option value="all">全部会话</mat-option>
  20. <mat-option *ngFor="let session of availableSessions" [value]="session.id">
  21. {{ session.title }}
  22. </mat-option>
  23. </mat-select>
  24. </mat-form-field>
  25. <div class="log-actions">
  26. <button mat-icon-button (click)="toggleAutoScroll()" matTooltip="自动滚动">
  27. <mat-icon>{{ autoScroll ? 'pause' : 'play_arrow' }}</mat-icon>
  28. </button>
  29. <button mat-icon-button (click)="clearLogs()" matTooltip="清空日志">
  30. <mat-icon>delete_sweep</mat-icon>
  31. </button>
  32. <button mat-icon-button (click)="togglePause()" matTooltip="{{ isPaused ? '继续' : '暂停' }}">
  33. <mat-icon>{{ isPaused ? 'play_arrow' : 'pause' }}</mat-icon>
  34. </button>
  35. </div>
  36. </div>
  37. </div>
  38. <!-- 日志内容区域 -->
  39. <div class="log-content" #logContent>
  40. <div *ngFor="let log of filteredLogs" class="log-entry" [class]="'log-level-' + log.level">
  41. <div class="log-timestamp">{{ log.timestamp | date:'HH:mm:ss' }}</div>
  42. <div class="log-level" [class]="'level-' + log.level">
  43. {{ getLevelLabel(log.level) }}
  44. </div>
  45. <div class="log-message">{{ log.message }}</div>
  46. <div class="log-session" *ngIf="log.sessionID">
  47. <mat-icon class="session-icon">chat</mat-icon>
  48. {{ getSessionTitle(log.sessionID) }}
  49. </div>
  50. </div>
  51. <div *ngIf="filteredLogs.length === 0" class="empty-logs">
  52. <mat-icon>info</mat-icon>
  53. <p>暂无日志数据</p>
  54. </div>
  55. </div>
  56. <!-- 状态栏 -->
  57. <div class="log-status">
  58. <span>日志数量: {{ filteredLogs.length }} / {{ allLogs.length }}</span>
  59. <span *ngIf="selectedSessionId !== 'all'"> | 已过滤会话</span>
  60. <span *ngIf="selectedLevel !== 'all'"> | 级别: {{ selectedLevel }}</span>
  61. <span *ngIf="isPaused" class="paused-indicator"> | 已暂停</span>
  62. </div>
  63. </div>