Linux下自动分割Nginx日志文件(二)-----Cronolog

一,简介:cronolog 是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。当扩展文件名的变化,目前的文件是关闭,新开辟的。cronolog 旨在和一个Web服务器一起使用,如Apache,分割访问日志为每天或每月的日志。


二,特点:cronolog主要和Web服务器配置使用,特别是Apache服务器,Apache 默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。下面是与Apache配置的一些指令。


三,下载并安装cronolog:

1,下载cronolog程序

[root@localhost ~]#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 

2,解压tar包

[root@localhost ~]#tar zxvf cronolog-1.6.2.tar.gz

3,进入该目录并安装

[root@localhost ~]#cd cronolog-1.6.2

[root@localhost ~]#./configure --prefix=/usr/local/cronolog-1.6.2/

[root@localhost ~]#make

[root@localhost ~]#make install

[root@localhost ~]#which cronolog

即可安装完成


四,cronolog的简单使用:

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -V

cronolog version 1.6.2

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -h

usage: /usr/local/cronolog-1.6.2/sbin/cronolog [OPTIONS] logfile-spec


   -H NAME,   --hardlink=NAME maintain a hard link from NAME to current log

   -S NAME,   --symlink=NAME  maintain a symbolic link from NAME to current log

   -P NAME,   --prev-symlink=NAME  maintain a symbolic link from NAME to previous log

   -l NAME,   --link=NAME     same as -S/--symlink

   -h,        --help          print this help, then exit

   -p PERIOD, --period=PERIOD set the rotation period explicitly

   -d DELAY,  --delay=DELAY   set the rotation period delay

   -o,        --once-only     create single output log from template (not rotated)

   -x FILE,   --debug=FILE    write debug messages to FILE

                              ( or to standard error if FILE is "-")

   -a,        --american         American date formats

   -e,        --european         European date formats (default)

   -s,    --start-time=TIME   starting time

   -z TZ, --time-zone=TZ      use TZ for timezone

   -V,      --version         print version number, then exit

[root@localhost ~]# loggenerator | cronolog log_file_pattern

其中,loggenerator为产生log的程序,而log_file_pattern是日志文件的路径,可以在其中加入cronolog所支持的时间相关的pattern字符,如/www/log/%y/%m/%d/access.log。其pattern为%字符后跟一特殊字符,简述如下:
 


五,cronolog实战(一)----分割nginx日志

1,安装cronolog程序,前边有,省略。

2,创建一个命名管道

[root@localhost ~]#mkfifo  /usr/local/nginx/logs/access_log_pipe

3.配置nginx.conf文件

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http { 

    include       mime.types;  

    default_type  application/octet-stream;

    

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

                       access_log  /usr/local/nginx/logs/access_log_pipe;#(生产的日志写到管道文件里)

 4,测试写看是否有报错,无报错继续下一步。

[root@localhost ~]/usr/local/nginx/sbin/nginx -t 

5,输入一下命令在nginx重启前,

[root@localhost logs]#  nohup cat /usr/local/nginx/logs/access_log_pipe | nohup /usr/local/cronolog-1.6.2/sbin/cronolog /usr/local/nginx/logs/%Y%m%d/access_%Y%m%d%H.log &

[1] 15718

[root@localhost logs]# nohup: ignoring input and redirecting stderr to stdout

nohup: appending output to `nohup.out'


解析: /usr/local/nginx/logs/access_log_pipe(生产的日志文件写到管道里) | nohup /usr/local/cronolog-1.6.2/sbin/cronolog (cronolog程序的绝对路径) /usr/local/nginx/logs/%Y%m%d/access_%Y%m%d%H.log & (存放分割文件的路径以当时的时间点为文件夹)

6,查看是否有生产的其日志文件。

[root@localhost logs]# ll

total 38992

drwxr-xr-x. 2 root  root      4096 Nov 19 16:19 20151119



六,cronolog实战(二)----分割Apache日志

1,安装省略

2,修改apache配置文件

CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/access_log.%Y%m%d" combined

需要特别注意的是,这里的日志必须使用绝对路径,否则不会生成日志文件

3,将上面的 /usr/local/ /usr/local/apache2/logs/%m/access_log.%Y%m%d改为按月保存

 /usr/local/apache2/logs/%m/access_log.%Y%m%d

4,重启下Apache,即可看见生成的日志。


七,cronolog实战(三)----分割tomcat的catalina.out日志

1,下载cronolog程序

[root@localhost ~]#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 

2,解压tar包

[root@localhost ~]#tar zxvf cronolog-1.6.2.tar.gz

3,进入该目录并安装

[root@localhost ~]#cd cronolog-1.6.2

[root@localhost ~]#./configure --prefix=/usr/local/cronolog-1.6.2/

[root@localhost ~]#make

[root@localhost ~]#make install

[root@localhost ~]#which cronolog

/usr/local/sbin/cronolog


4,cronolog的简单使用:

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -V

cronolog version 1.6.2

[root@localhost ~]# /usr/local/cronolog-1.6.2/sbin/cronolog -h

usage: /usr/local/cronolog-1.6.2/sbin/cronolog [OPTIONS] logfile-spec


   -H NAME,   --hardlink=NAME maintain a hard link from NAME to current log

   -S NAME,   --symlink=NAME  maintain a symbolic link from NAME to current log

   -P NAME,   --prev-symlink=NAME  maintain a symbolic link from NAME to previous log

   -l NAME,   --link=NAME     same as -S/--symlink

   -h,        --help          print this help, then exit

   -p PERIOD, --period=PERIOD set the rotation period explicitly

   -d DELAY,  --delay=DELAY   set the rotation period delay

   -o,        --once-only     create single output log from template (not rotated)

   -x FILE,   --debug=FILE    write debug messages to FILE

                              ( or to standard error if FILE is "-")

   -a,        --american         American date formats

   -e,        --european         European date formats (default)

   -s,    --start-time=TIME   starting time

   -z TZ, --time-zone=TZ      use TZ for timezone

   -V,      --version         print version number, then exit

5,修改tomcat bin目录下的catalina.sh文件中的

  1. org.apache.catalina.startup.Bootstrap “$@” start  \  

  2. >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 

为:

  1. org.apache.catalina.startup.Bootstrap "$@" start  2>&1 \  

  2.     | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &  


touch “$CATALINA_BASE”/logs/catalina.out

这一行也可以注释掉

  shift

  touch "$CATALINA_OUT"


本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1714777

上一篇:钉短信、钉电话收费套餐


下一篇:[转]几个python 入门程序--例2( 如何将多个模块打包成一个模块)