class RunLog extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
this.logFiles = [];
this.expandedLogs = new Set();
this.logDir = '/log'; // 直接设置日志目录路径
}
connectedCallback() {
this.render();
this.setupEventListeners();
this.loadLogFileList();
}
render() {
this.shadowRoot.innerHTML = `
加载中...
';
// 模拟从文件读取内容
this.fetchLogContent(logPath).then(content => {
// 构建不含空白的HTML结构
let html = '';
if (!content || content.length === 0) {
html += '
日志为空
';
} else {
// 解析日志内容并应用样式
content.forEach(line => {
let className = 'log-message';
// 根据日志级别添加相应的类
if (line.includes('[INFO]')) {
className += ' info';
} else if (line.includes('[WARNING]')) {
className += ' warning';
} else if (line.includes('[ERROR]')) {
className += ' error';
}
html += `
${line}
`;
});
}
html += '
';
contentElement.innerHTML = html;
// 设置过滤器事件
const filterElements = contentElement.querySelectorAll('.log-filter');
filterElements.forEach(filter => {
filter.addEventListener('click', () => {
// 移除所有活动状态
filterElements.forEach(f => f.classList.remove('active'));
// 添加活动状态到当前过滤器
filter.classList.add('active');
const level = filter.getAttribute('data-level');
const messagesContainer = contentElement.querySelector('.log-content-messages');
this.filterLogContent(messagesContainer, level);
});
});
}).catch(error => {
contentElement.innerHTML = `