精华内容
下载资源
问答
  • 程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别。我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线上运行一个月后...
  • Linux脚本定时切割日志文件

    千次阅读 2018-10-14 17:30:02
    测试环境的日志没有定时切割,时间久了,文件比较大,不方便搜索查找。所以尝试写了下脚本。...echo `date '+%Y-%m-%d %H:%M:%S'`'初始化切割日志文件为:'$monitor_file >> /app/logs/split/split.lo...

     测试环境的日志没有定时切割,时间久了,文件比较大,不方便搜索查找。所以尝试写了下脚本。

    1.脚本如下:

    #!/bin/sh
    log_dir='/app/logs/split'
    monitor_file=$1
    echo `date '+%Y-%m-%d %H:%M:%S'`'初始化切割日志文件为:'$monitor_file >> /app/logs/split/split.log
    if [ ! $1 ]
    then
        echo `date '+%Y-%m-%d %H:%M:%S'`'输入参数为空,使用默认路径:/app/wktrait/apache-tomcat-8.5.29/logs/catalina.out' >> /app/logs/split/split.log
        monitor_file=/app/XXX/apache-tomcat-8.5.29/logs/catalina.out #tomcat目录下的catalina.out文件的绝对路径
    fi
    log_name=`basename $monitor_file`
    echo `date '+%Y-%m-%d %H:%M:%S'`'切割文件名称为:'$log_name   >> /app/logs/split/split.log
    file_size=`du $monitor_file | awk '{print $1}'`
    echo `date '+%Y-%m-%d %H:%M:%S'`'切割文件大小为:'$file_size   >> /app/logs/split/split.log
    if [ $file_size -ge 1024000 ]
    then
        echo `date '+%Y-%m-%d %H:%M:%S'`'文件大小大于 1024000 开始切割'   >> /app/logs/split/split.log
        if [ ! -d $log_dir ]
        then
            echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割路径不存在,新建....'  >> /app/logs/split/split.log
            mkdir /app/logs/split  #创建保存切割文件目录,这个路径可以自行修改,保存到你想要的目录
        fi
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始切割日志....'  >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始切割日志....'
        cp  $monitor_file  /app/logs/split/$log_name-`date +%Y%m%d%H%M%S`.log #保存日志文件
        echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割完成。'   >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'日志切割完成。'
        echo `date '+%Y-%m-%d-%H:%M:%S'`'文件切割' >> /app/logs/split/split.log #记录切割日志
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始清空源文件...' >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'开始清空源文件...'
        echo "" > $monitor_file  #清空tomcat的log/catalina.out文件内容
        echo `date '+%Y-%m-%d %H:%M:%S'`'清空源文件完成。'  >> /app/logs/split/split.log
        echo `date '+%Y-%m-%d %H:%M:%S'`'清空源文件完成。'
    fi
    

     脚本基本能实现切割功能,下一步就是定时了。网上搜索的是用的。

    2. 用 crontab -e 编辑定时器代码

       输入  crontab -e  命令在打开的窗口填写如下定时任务

        */1 * * * *  sh /app/script/splitLog.sh  /app/XXX/apache-tomcat-8.5.29/logs/catalina.out

        然后保存退出。

    参考链接:  https://www.jb51.net/article/97116.htm

    同时放上一个定时的介绍: https://www.cnblogs.com/mingforyou/p/3930636.html

     

     

    展开全文
  • # split命令用于切割文件 # -b SIZE: SIZE is an integer and optional unit (example: 10M is 10*1024*1024). Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000). # -d -a 4表示...
    #!/bin/bash 
    
    # 获取前一天的日期
    suffix=`date -d "-1 day" "+%Y%m%d"` 
    
    # split命令用于切割文件
    # -b SIZE: SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).
    # -d -a 4表示文件后缀是4位(比如0000,0001)。
    split -b 10M -d -a 4 /var/log/my_exe.log /var/log/something/log_${suffix}_
    
    # 清空原文件
    cat /dev/null > my_exe.log
    
    展开全文
  • Linux 使用 logrotate 来切割日志文件

    千次阅读 2018-01-23 11:01:16
    Linux 使用 logrotate 来切割日志文件 日志是了解服务运行状态的重要依据,但是输出的日志久了,日志就会变得非常大,甚至上百兆,会占用机器上面所有的存储空间。 Linux 自带的日志分割命令 logrotate ,...

    Linux 使用 logrotate 来切割日志文件

    日志是了解服务运行状态的重要依据,但是输出的日志久了,日志就会变得非常大,甚至上百兆,会占用机器上面所有的存储空间。

    Linux 自带的日志分割命令  logrotate ,可以按照时间、月、周分割日志,在日志的尾部灵活加上当前日期。

     

    1:切割 nginx 的配置文件实例

    /var/log/nginx/*log {

     create 0644 nginx nginx

     daily //按天切割日志文件

     rotate 10 //保留最新的 10 分日志文件,超过数量就会删除

     missingok //忽略不存在的文件

     notifempty //不分割空文件

     compress //对文件进行压缩

     olddir/data/nginx_logs/days 

     sharedscripts

     postrotate

    // 文件切割之后执行的命令

      /bin/kill-USR1 `cat/run/nginx.pid 2>/dev/null` 2>/dev/null||true

     endscript

    }

     

    logrotate 配置项详解:

    compress                                   通过gzip 压缩转储以后的日志

    nocompress                                不做gzip压缩处理

    copytruncate                              用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。

    nocopytruncate                           备份日志文件不过不截断

    create mode owner group             轮转时指定创建新文件的属性,如create 0777 nobody nobody

    nocreate                                    不建立新的日志文件

    delaycompress                           compress 一起使用时,转储的日志文件到下一次转储时才压缩

    nodelaycompress                        覆盖 delaycompress 选项,转储同时压缩。

    missingok                                 如果日志丢失,不报错继续滚动下一个日志

    10 errors address                           专储时的错误信息发送到指定的Email 地址

    11 ifempty                                    即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。

    12 notifempty                               当日志文件为空时,不进行轮转

    13 mail address                             把转储的日志文件发送到指定的E-mail 地址

    14 nomail                                     转储时不发送日志文件

    15 olddir directory                         转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

    16 noolddir                                   转储后的日志文件和当前日志文件放在同一个目录下

    17 sharedscripts                           运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本

    18 prerotate                                 logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行

    19 postrotate                               logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行

    20 daily                                       指定转储周期为每天

    21 weekly                                    指定转储周期为每周

    22 monthly                                  指定转储周期为每月

    23 rotate count                            指定日志文件删除之前转储的次数,指没有备份,指保留个备份

    24 dateext                                  使用当期日期作为命名格式

    25 dateformat .%s                       配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数

    26 size(minsize) log-size            当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)KB (sizek)MB(sizem).

    27 当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)

    28 size = 5 或 size 5 >= 5 个字节就转储)

    29 size = 100k 或 size 100k

    30 size = 100M 或 size 100M

     

    2:如何启动 logrotate 的配置文件

     

    2.1 在 /etc/logrotate.d 目录下创建分割日志的配置文件 vpaas

     

    /opt/nohup.out {

            size 1k 

    dateext

    create

    copytruncate

    }

     

    /opt/nohup.out : 将要被切割的日志文件

    dateext :  切割后的日志文件以当前日期结尾

    size:  切割日志文件的大小为 1 k

     

    2.2 启动日志文件

        logrotate -f /etc/logrotate.d/vpaas 

    展开全文
  • 关于日志这个东西的存在,主要是为了记录发生...但是输出一下这种方法却一直被使用,特别是一些偶发性问题,调试工具很难捕捉到他们,这时候往往需要将中间过程输出到日志文件中,这些日志文件就是我们分析问题的基础。

    前言

    关于日志这个东西的存在,主要是为了记录发生的事情,编程的过程中也常常用到,记得我们在刚刚学习编程的时候,常常会出现程序错误,这时候就需要输出一下,其实这个输出也是日志的一种体现,随着编程水平的提升,各种调试工具和方法渐渐进入我们的视线,但是输出一下这种方法却一直被使用,特别是一些偶发性问题,调试工具很难捕捉到他们,这时候往往需要将中间过程输出到日志文件中,这些日志文件就是我们分析问题的基础。

    随着程序规模的渐渐扩大,出现问题时需要打印的日志也越来越多,最近就出现这样一个情况,游戏程序总是莫名的崩溃,看代码找不到问题的原因,所以采用了打印日志文件的方法,有时候大约跑半天就能出现崩溃,日志文件大概600M,Windows系统自带的记事本很难打开,但是使用Notepad++等几秒钟是可以看到内容的。

    比较变态的是最近一次跑了2天才崩溃,导出日志文件发现大概有3G,这次使用Notepad++打开时也卡死了,使用sublime打开时进度卡在了80%左右,据说非常强大的GVim打开文件时也毫无反应了,这就尴尬了,崩溃之前的日志内容就在文件中,可是我们却看不见。

    问题出现

    问题很明显摆在这了,文件由于太大无法看到其中的内容,得想个办法。很直接的一个想法就进入了脑海,把文件拆开成几份,这样每个文件缩小了就可以看到了啊,所以我们找到了一个解决问题的办法,接下来使用Python来简单写一下切分文件。

    分割日志文件

    按照文件大小分割

    分割文件的规则需要先确定一下,可以很简单的按照文件大小分割,一个源文件大小为10M的日志文件,可以切分成10个大小为1M的日志文件,分割的大小不用太绝对,每一份近似相等就可以,整体思路就是先获得源文件的大小,然后计算出分割结束每个文件的大小,接着不断从源文件中读内容,往目标文件中写内容,达到之前计算的字节大小时,再生成新的目标文件,简单代码如下:

    import os
    
    DATA_LEN_PER_READ  = 1024 * 1024
    
    def split_file_by_size(file_name, parts=3):
        file_size = os.path.getsize(file_name)
        per_file_size = file_size//parts
        file_size_list = []
    
        for x in range(parts-1):
            file_size_list.append(per_file_size)
        file_size_list.append(file_size-per_file_size*(parts-1))
    
        output_file, ext = os.path.splitext(file_name)
        with open(file_name, 'rb') as rfile:
            for n in range(parts):
                with open('{0}_part{1}{2}'.format(output_file, n+1, ext), 'wb') as wfile:
                    read_size = 0
                    while read_size < file_size_list[n]:
                        want_read = min(DATA_LEN_PER_READ, file_size_list[n] - read_size)
                        wfile.write(rfile.read(want_read))
                        read_size += want_read
    

    按照文件行数分割

    以上按照文件大小分割的日志文件有一点小问题,不能保证行是完整的,当遇到汉字这种占用多字节的字符,甚至都不能保证汉字是完整的,所以我们可以换一个思路,尝试使用按照行数分割,整体思路就是先获得文件的行数,然后计算出分割结束每个文件的行数,接着不断从源文件中一行行读内容,往目标文件中一行行写内容,达到之前计算的文件行数时,再生成新的目标文件,简单代码如下:

    import os
    
    def get_file_line_count(file_name):
        line_count = 0
        for index, line in enumerate(open(file_name, 'r')):
            line_count += 1
        return line_count
    
    def split_file_by_line(file_name, parts=3):
        total_line = get_file_line_count(file_name)
        per_file_line = total_line//parts
        file_line_list = []
    
        for x in range(parts-1):
            file_line_list.append(per_file_line)
        file_line_list.append(total_line-per_file_line*(parts-1))
    
        output_file, ext = os.path.splitext(file_name)
        with open(file_name, 'rb') as rfile:
            for n in range(parts):
                with open('{0}_part{1}{2}'.format(output_file, n+1, ext), 'wb') as wfile:
                    read_line = 0
                    while read_line < file_line_list[n]:
                        wfile.write(rfile.readline())
                        read_line += 1
    

    获取日志文件尾部内容

    对于分析奔溃这类问题,出现问题的日志往往就在最后几行,所以没有必要非得打开整个日志文件,也不一定需要将整个文件分割成几部分,只需将日志文件的最后一部分读出来写到新的文件中供我们分析就可以了,这时候开头几个字符的不完整也是可以接受的,所以没必要按行读取,只需按照经验,从尾部截取指定字节大小的内容就可以了,比如我们的日志,最后有用的部分也就10M左右,一般的文本文件就都能打开了。

    代码思路就是先打开文件,然后将读指针定位到尾部往前10M左右,然后读取所有内容保存到新的文件中,简单的代码示例如下:

    import os
    
    def tailslice(file_name, data_size= 1024):
        output_file, ext = os.path.splitext(file_name)
        with open(file_name, 'rb') as rfile:
            rfile.seek(-data_size, 2)
            with open('{0}_tail{1}'.format(output_file, ext), 'wb') as wfile:
                wfile.write(rfile.read())
    

    总结

    1. 有时候要问题需要变通一下,如果一个文件大到打不开的地步,我们就把它分割成可以接受的范围
    2. 当文件中的内容只有一部分可用时,我们完全可以不分割,直接取出可用部分即可。

    代码传送门

    1. 分割超大日志文件
    2. 获取日志文件尾部内容
    展开全文
  • split可以用来切割一个日志文件,这样便于处理日志。比如有一个12G的日志,需要删除某一行数据,知道行号,但用sed和vi比较慢, 就可以先用 split 切割 ,然后再删除那行,最后再重组合   二.使用说明 ...
  • Logrotate实现每小时切割日志文件

    千次阅读 2020-05-09 18:05:53
    Logrotate实现每小时切割日志文件一、Logrotate背景介绍1.1 安装 一、Logrotate背景介绍 logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据...
  • 在工作中可能会需要对nginx的日志实现自动分割,自己写了一个函数,大家如果觉得可以的话: 可以直接复制保存修改一下nginxPATH和 /opt/nginx/...#参数解释:$2 切割日志文件名称:access正确日志 error错误日志,...
  • 该项目的功能是将一个大的文件切割成多个小文件,采用了主线程与子线程之间通信(MFC的PostMessage方法)
  • 方法一:vi /etc/crontabhtml方法二:crontab -elinux系统定时任务配置文件:nginxSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/1 0 * * * /home/logs/Document/rotate_nginx_log.sh# For ...
  • 鉴于在调试logback和log4j的文件切割一直无法成功,随性用shell写个脚本用来切割tomcat下的日志文件(大家如果有在logback或log4j使用文件切割成功的话,可以留下使用方式,先谢谢了) 1:废话少说,直接贴上脚本: #...
  • <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 项目名称 -->...property name="projectname" value="project"/>...-- 日志存放路径 -->...-- 日志输出格式 [%thread.
  • linux上切割日志文件

    千次阅读 2018-02-09 16:41:55
    最近系统上线后日志量剧增,需要按照日期每天定时将日志切割后保留7天。参照了网上资料写了以下切割代码:#!/bin/sh function rotate() { logs_path=$1 echo Rotating Log: $1 cp ${logs_path} ${logs_path}.$...
  • windows nginx 按天切割日志
  • Knife4File,日志切割工具,解压即用,适用查看、切割超大日志,本人亲测,切割20G日志。总之,不好用,你打我。
  • 最近看到网站的日志每天都在增大,而且数据没有及时的切割查每日天的数据也不方便,接下来吾爱编程为大家介绍一下Linux下nginx日志文件自动切割删除,有需要的小伙伴可以参考一下: 1、编写shell脚本qiege.sh: ...
  • 现有的日志都会存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于查看,所以我们可以通过把这个大的日志文件切割为多份不 同的小文件作为日志,切割规则可以以天为单位...
  • logrotate切割日志文件

    千次阅读 2015-07-28 23:22:36
    logrotate是linux上自带的强大的日志管理工具,通过logrotate可以进行日志的定期切割、压缩、备份等。 logrotate的配置文件位置在/etc/logrotate.conf中,自定义配置文件位于.../root/test/test.log #日志文件路径
  • 自定义配置的地址 /etc/logrotate.d //里面存放的是已经配置的文件 直接上例子: /root/.forever/*.log { daily //代表每天循环一次 missingok // rotate 5 //比如你每天分割一次,到第六天会把第一天的替换掉 ...
  • Linux 切割大log日志

    千次阅读 2019-02-18 16:21:10
    文章目录前言方法一 head命令Sample方法二 tail命令Sample方法三 sed命令Sample方法四 split命令 ...在此记录几种方式来切分日志。 方法一 head命令 head 命令是用来获取文本文件的开始n行。 Sample head -10000 j...
  • WINDOWS下切割LOG工具,中文版,可自定义切割大小,支持WIN10,
  •     info debug 级别的日志输出到 /path/log/demo.log     warn error .... 级别的日志输出到 /path/log/demo_error.log     日志自动按小时分割 最多保留7天的日志 依赖的第三方包github地址     ...
  • 这是一个apache日志目录,可以看到access_log和error_log占用空间过大 我们使用 split -b 10G access_log 命令来切割它提示如下 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210412175628997.png split:...
  • 日志切割

    千次阅读 2019-04-05 18:47:15
    其中Logrotate支持按时间和大小来自动切分,以防止日志文件太大。 真正内容:当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志. 配置...
  • linux文件分割(将大的日志文件分割成小的)linux下文件分割可以通过split命令来实现,可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现,非常简单。在Linux下用split进行文件分割:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,328
精华内容 9,731
关键字:

切割日志文件