本文目录导读:

我来教你编写一个日志高亮展示脚本,包含多个实用版本:
基础Python版本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""日志高亮展示脚本 - 基础版"""
import re
import sys
from datetime import datetime
# 颜色定义
class Colors:
RESET = '\033[0m'
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
MAGENTA = '\033[95m'
CYAN = '\033[96m'
WHITE = '\033[97m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def highlight_log_line(line):
"""高亮单行日志"""
# 定义日志级别及其颜色
level_colors = {
'ERROR': Colors.RED,
'WARN': Colors.YELLOW,
'WARNING': Colors.YELLOW,
'INFO': Colors.GREEN,
'DEBUG': Colors.CYAN,
'TRACE': Colors.BLUE,
'FATAL': Colors.MAGENTA + Colors.BOLD,
}
# 检查日志级别
for level, color in level_colors.items():
if level in line.upper():
line = line.replace(level, f"{color}{level}{Colors.RESET}")
break
# 高亮IP地址
ip_pattern = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
line = re.sub(ip_pattern, lambda m: f"{Colors.CYAN}{m.group()}{Colors.RESET}", line)
# 高亮时间戳
if re.match(r'\d{4}-\d{2}-\d{2}', line):
line = f"{Colors.BLUE}{line}{Colors.RESET}"
# 高亮URL
url_pattern = r'https?://[^\s]+'
line = re.sub(url_pattern, lambda m: f"{Colors.UNDERLINE}{Colors.GREEN}{m.group()}{Colors.RESET}", line)
return line
def main():
"""主函数"""
# 从文件读取或标准输入
if len(sys.argv) > 1:
try:
with open(sys.argv[1], 'r') as f:
for line in f:
print(highlight_log_line(line.rstrip()))
except FileNotFoundError:
print(f"错误: 文件 '{sys.argv[1]}' 不存在")
sys.exit(1)
else:
# 从标准输入读取
try:
for line in sys.stdin:
print(highlight_log_line(line.rstrip()))
except KeyboardInterrupt:
sys.exit(0)
if __name__ == "__main__":
main()
增强版 - 支持搜索和过滤
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""日志高亮展示脚本 - 增强版"""
import argparse
import re
import sys
from datetime import datetime
class LogHighlighter:
"""日志高亮器"""
COLORS = {
'RED': '\033[91m',
'GREEN': '\033[92m',
'YELLOW': '\033[93m',
'BLUE': '\033[94m',
'MAGENTA': '\033[95m',
'CYAN': '\033[96m',
'WHITE': '\033[97m',
'BOLD': '\033[1m',
'UNDERLINE': '\033[4m',
'RESET': '\033[0m'
}
def __init__(self, search_term=None, show_errors=False, tail=False):
self.search_term = search_term
self.show_errors = show_errors
self.tail = tail
def highlight(self, line):
"""高亮日志行"""
if not line.strip():
return line
# 搜索过滤
if self.search_term and self.search_term not in line:
return None
# 错误过滤
if not self.show_errors:
if 'ERROR' in line.upper() and self.search_term is None:
return None
# 应用高亮
highlighted = self._apply_highlights(line)
return highlighted
def _apply_highlights(self, line):
"""应用各种高亮规则"""
# 级别高亮
level_highlights = {
'ERROR': 'RED',
'WARNING': 'YELLOW',
'INFO': 'GREEN',
'DEBUG': 'CYAN',
'FATAL': 'MAGENTA',
'CRITICAL': 'RED'
}
for level, color in level_highlights.items():
if level in line.upper():
line = line.replace(
level,
f"{self.COLORS[color]}{self.COLORS['BOLD']}{level}{self.COLORS['RESET']}"
)
# IP地址高亮
ip_pattern = r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
line = re.sub(
ip_pattern,
lambda m: f"{self.COLORS['CYAN']}{m.group()}{self.COLORS['RESET']}",
line
)
# URL高亮
url_pattern = r'https?://[^\s]+'
line = re.sub(
url_pattern,
lambda m: f"{self.COLORS['UNDERLINE']}{self.COLORS['GREEN']}{m.group()}{self.COLORS['RESET']}",
line
)
return line
def main():
parser = argparse.ArgumentParser(description='日志高亮展示工具')
parser.add_argument('file', nargs='?', help='日志文件路径')
parser.add_argument('-s', '--search', help='搜索关键词')
parser.add_argument('-e', '--errors', action='store_true', help='只显示错误日志')
parser.add_argument('-t', '--tail', action='store_true', help='持续监控模式')
args = parser.parse_args()
highlighter = LogHighlighter(
search_term=args.search,
show_errors=args.errors,
tail=args.tail
)
# 处理输入
try:
if args.file:
with open(args.file, 'r') as f:
content = f.readlines()
else:
content = sys.stdin.readlines()
for line in content:
result = highlighter.highlight(line.rstrip())
if result is not None:
print(result)
except KeyboardInterrupt:
sys.exit(0)
except FileNotFoundError:
print(f"错误: 文件 '{args.file}' 不存在")
sys.exit(1)
if __name__ == "__main__":
main()
Shell脚本版本
#!/bin/bash
# 日志高亮展示脚本 - Shell版
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color
highlight_log() {
while IFS= read -r line; do
# 高亮日志级别
if echo "$line" | grep -qi "ERROR\|FATAL"; then
line=$(echo "$line" | sed "s/ERROR\|FATAL/${BOLD}${RED}&${NC}/gI")
elif echo "$line" | grep -qi "WARN\|WARNING"; then
line=$(echo "$line" | sed "s/WARN\|WARNING/${YELLOW}&${NC}/gI")
elif echo "$line" | grep -qi "INFO"; then
line=$(echo "$line" | sed "s/INFO/${GREEN}&${NC}/gI")
elif echo "$line" | grep -qi "DEBUG"; then
line=$(echo "$line" | sed "s/DEBUG/${CYAN}&${NC}/gI")
fi
# 高亮IP地址
line=$(echo "$line" | sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/'${CYAN}'&'${NC}'/g')
# 高亮时间戳
line=$(echo "$line" | sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/'${BLUE}'&'${NC}'/g')
echo -e "$line"
done
}
# 使用示例
if [ -n "$1" ]; then
if [ -f "$1" ]; then
cat "$1" | highlight_log
else
echo "文件不存在: $1"
exit 1
fi
else
# 从标准输入读取
highlight_log
fi
使用示例
# 1. 使用Python脚本 python log_highlighter.py app.log python log_highlighter.py app.log -s "error" -e # 只搜索错误 cat app.log | python log_highlighter.py -t # 持续监控 # 2. 使用Shell脚本 chmod +x log_highlighter.sh ./log_highlighter.sh app.log tail -f app.log | ./log_highlighter.sh # 3. 直接管道使用 tail -f /var/log/syslog | python log_highlighter.py
高级功能版本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""高级日志高亮工具 - 支持配置文件"""
import json
import re
import sys
from pathlib import Path
class AdvancedLogHighlighter:
def __init__(self, config_file=None):
self.config = self.load_config(config_file)
self.colors = self.config.get('colors', {})
def load_config(self, config_file):
"""加载配置文件"""
default_config = {
"colors": {
"ERROR": {"color": "red", "bold": True},
"WARNING": {"color": "yellow", "bold": False},
"INFO": {"color": "green", "bold": False},
"DEBUG": {"color": "gray", "bold": False}
},
"patterns": [
{"pattern": r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', "color": "cyan"},
{"pattern": r'https?://[^\s]+', "color": "blue", "underline": True},
{"pattern": r'\[.*?\]', "color": "magenta"}
]
}
if config_file and Path(config_file).exists():
with open(config_file, 'r') as f:
user_config = json.load(f)
# 合并配置
default_config.update(user_config)
return default_config
# 使用示例的配置文件 log_highlighter_config.json
"""
{
"colors": {
"CUSTOM": {"color": "purple", "bold": true}
},
"patterns": [
{"pattern": "transaction_id=[0-9]+", "color": "yellow"},
{"pattern": "user_[a-z]+", "color": "green", "bold": true}
]
}
"""
安装和使用建议
-
保存脚本:将脚本保存为
log_highlighter.py或log_highlighter.sh -
添加执行权限:
chmod +x log_highlighter.py
-
创建别名(在 ~/.bashrc 中添加):
alias logh='python /path/to/log_highlighter.py' alias loght='tail -f /var/log/syslog | python /path/to/log_highlighter.py'
-
日常使用:
logh app.log tail -f app.log | logh logh app.log -s "ERROR" -e # 只显示错误日志
这些脚本提供了从简单到复杂的多种选择,你可以根据实际需求选择或定制使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播