首页 > 系统相关 >Shell 把日志记录按天切割到不同的文件【转】

Shell 把日志记录按天切割到不同的文件【转】

时间:2022-11-28 12:47:03浏览次数:48  
标签:文件 Shell echo 按天 文件夹 日志

#!/bin/bash

#文件夹不存在,则创建,参数从$1开始
createFolder(){
    if [ ! -d $1 ]; then
        mkdir -p $1 #创建文件夹: -p 递归创建文件夹
        chmod -R 777 $1 # -R 递归给文件夹最大权限0777
    fi
}

#文件不存在,则创建,参数从$1开始
createFile(){
    if [ ! -f $1 ]; then
        touch $1 #创建文件
        chmod -R 777 $1 # -R 递归给文件最大权限0777
    fi
}

#把英文的月份转为数字
monthToNumber(){
    case $1 in
        "Jan") 
            echo "01"
        ;;
        "Feb") 
            echo "02"
        ;;
        "Mar") 
            echo "03"
        ;;
        "Apr") 
            echo "04"
        ;;
        "May") 
            echo "05"
        ;;
        "Jun") 
            echo "06"
        ;;
        "Jul") 
            echo "07"
        ;;
        "Aug") 
            echo "08"
        ;;
        "Sep") 
            echo "09"
        ;;
        "Oct") 
            echo "10"
        ;;
        "Nov") 
            echo "11"
        ;;
        "Dec") 
            echo "12"
        ;;
        *)
            echo "00" #default选项:异常月份,返回00
        ;;
    esac
    return $? #返回结果
}

rootFolder=/www/test/split #定义日志拆分文件夹根目录

todayDay=$(date -d "now" +%Y-%m-%d) #获取当前日期:年月

#:<<EOF 多行注释START
#逐行读取文件中的内容
cat /www/test/test.log | while read line
do
    #正则匹配字符串: [24/Apr/2020:10:32:26 +0800]
    # grep -o : 只输出符合 RE 的字符串. (gnu 新版独有, 不见得所有版本都支持.)
    logTime=`echo $line|grep -o '\[[0-9]\{2\}\/[A-Za-z]\{1,\}\/[0-9]\{4\}:[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\s\{1\}+[0-9]\{4\}\]'`  #日志记录的时间
    if [ ! -n "$logTime" ]; then
        continue #匹配失败,进入下一个循环,读取下一行数据
    fi
    
    #根据正则匹配出的$logTime,截取出年月日
    year=`echo ${logTime:8:4}`  #字符串截取 年
    monthEnglish=`echo ${logTime:4:3}` #字符串截取 月
    month=$(monthToNumber $monthEnglish) # 英文月份转为数字
    day=`echo ${logTime:1:2}`  #字符串截取 日
    
    touchFile=test-$year-$month-$day.log #test-2020-04-04.log 拆分的文件名定义
    splitFile=$rootFolder/$touchFile #拼接日志存放的位置
    
    #如果是今天的日志,则不记录
    todayFile=$splitFolder/test-$todayDay.log #定义今天的日志文件名
    if [ "$splitFile" = "$todayFile" ]; then
        #echo $todayFile
        break #已经读到了今天的日志了,不记录,直接跳出循环
    fi
    
    createFolder $rootFolder #文件夹不存在时,创建文件夹
    
    createFile $splitFile #文件不存在时,创建文件
    
    echo $line>>$splitFile # 文件内容追加
    
    #exit 0 #程序退出操作
done
#EOF 多行注释END

转自

(41条消息) Shell 把日志记录按天切割到不同的文件_夏已微凉、的博客-CSDN博客
https://blog.csdn.net/qq_36025814/article/details/109102049

 

标签:文件,Shell,echo,按天,文件夹,日志
From: https://www.cnblogs.com/paul8339/p/16931868.html

相关文章

  • 搭建单机日志服务 es+logstash+kibana+eshead
    1安装网上很多,第一次安装直接去官网下载es+logstash+kibanaeshead2结果展示+说明一 精准搜索想要的数据  二指定搜索时间范围内的所有数据   三......
  • .Net 6 配置日志
    前言  .Net6与之前的配置有点不一样了记录下日志配置方式。当前日志以Serilog为例,.Net6的日志由内置的Logger获取,然后可以交给Serilog|NLog等框架处理,框架通过他......
  • vivo大数据日志采集Agent设计实践
    作者:vivo互联网存储技术团队-QiuSidi在企业大数据体系建设过程中,数据采集是其中的首要环节。然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的需求......
  • vivo大数据日志采集Agent设计实践
    作者:vivo互联网存储技术团队-QiuSidi在企业大数据体系建设过程中,数据采集是其中的首要环节。然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(二)条件日志宏
    目录CLOG_IF宏宏展开Info日志宏CLOG_IF(xxx,INFO,xxx)Trace日志宏CLOG_IF(xxx,TRACE,xxx)Debug日志宏CLOG_IF(xxx,DEBUG,xxx)Fatal日志宏CLOG_IF(xxx,FATA......
  • “一站式”家校服务系统---开发日志2
    202210-27一、教务中心业务1、班级管理1.1、学生管理1.1.1、前端项目布置复制逆向生成代码中,将src/views/modules/edu/下的文件全部复制粘贴到以下位置  1.1.2......
  • Shell入门
    一、Shell是什么Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(二)其他基本日志宏
    目录CPLOG宏宏展开Info日志宏CPLOG(INFO,xxx)Trace日志宏CPLOG(TRACE,XXX)Debug日志宏CPLOG(DEBUG,XXX)Fatal日志宏CPLOG(FATAL,XXX)Error日志宏CPLOG(ERRO......
  • LLM 日志采集
    @[TOC](Logstash+MQ日志采集)需求场景logback+MQ+Logstash采集多台服务(下文用生产端代替)的日志数据,汇总到一台服务器(下文用消费端代替)中。实现1.RabbitMQ将日志消息发布......
  • spdlog日志库源码:registry类
    目录registry类意义registry类实现registry数据成员registry函数成员构造与析构单例模式全局注册表initialize_logger初始化logger对象全局格式器预置日志等级flush日志等......