shell脚本,保留多个web程序三天的debug、error、info、warn日志,其他均删除
时间: 2023-07-10 18:04:40 浏览: 45
可以使用以下脚本来实现:
```bash
#!/bin/bash
# 设置日志目录和保留时间
log_dir="/var/log/web"
keep_days=3
# 删除除了debug、error、info、warn之外的日志文件
find $log_dir -type f -mtime +$keep_days ! -name "*debug.log" ! -name "*error.log" ! -name "*info.log" ! -name "*warn.log" -delete
# 对于debug、error、info、warn日志文件,根据修改时间删去旧的
find $log_dir -type f \( -name "*debug.log" -o -name "*error.log" -o -name "*info.log" -o -name "*warn.log" \) -mtime +$keep_days -delete
```
这个脚本会首先删除除了debug、error、info、warn之外的日志文件,然后对于debug、error、info、warn日志文件,根据修改时间删去旧的。注意需要根据实际情况修改`log_dir`和`keep_days`变量的值。
相关问题
shell脚本,保留多个web程序三天的error、info、warn日志,其他均删除
可以使用 `find` 命令来进行文件查找和删除操作,结合 `-mtime` 参数可以指定查找和删除的时间范围。
假设日志文件都存放在 `/var/log/web` 目录下,且每个程序的日志文件名格式为 `program_name.log`,那么可以使用以下脚本来实现:
```shell
#!/bin/bash
LOG_DIR=/var/log/web
THRESHOLD_DAYS=3
for log_file in $LOG_DIR/*.log; do
# 获取文件名和程序名
file_name=$(basename $log_file)
program_name=${file_name%%.*}
# 保留指定级别的日志
for level in error info warn; do
find $LOG_DIR -name "$program_name.*.$level" -mtime -$THRESHOLD_DAYS -type f -exec echo "Keeping {}" \;
done
# 删除其它级别的日志
find $LOG_DIR -name "$program_name.*" ! -name "*.error" ! -name "*.info" ! -name "*.warn" -mtime +$THRESHOLD_DAYS -type f -delete -exec echo "Deleting {}" \;
done
```
这里使用了 `basename` 命令来获取日志文件名,然后使用 `${file_name%%.*}` 来获取程序名。接着使用 `find` 在目录中查找指定级别的日志,使用 `-mtime -$THRESHOLD_DAYS` 参数表示只保留三天内的日志,将找到的日志文件输出到控制台。然后再使用 `find` 删除其它级别的日志,使用 `! -name` 参数来排除指定的文件名,同时使用 `-mtime +$THRESHOLD_DAYS` 参数表示删除三天前的日志文件,将删除的日志文件输出到控制台。
注意,为了安全起见,建议在测试通过后再将 `-delete` 参数添加到 `find` 命令中来实际删除日志文件。
debug,info,warn,error
这四个词都是日志级别(log level),用于指示日志信息的重要程度和严重程度。一般来说,日志级别从低到高分别是 debug,info,warn,error。
1. debug:用于输出程序运行过程中的详细信息,通常只有在调试程序时才需要输出该级别的日志信息。
2. info:用于输出程序正常运行过程中的信息,例如程序启动信息、请求处理信息等。
3. warn:用于输出程序运行过程中的警告信息,例如程序使用了过时的方法、参数等。
4. error:用于输出程序运行过程中的错误信息,例如程序抛出了异常、请求处理失败等。
在实际应用中,可以根据需要设置日志级别,只输出需要的信息,避免日志信息过多影响程序性能。