Split logs automatically every day

07/Sep/2013 · 2 minute read

Related resource(s):

“linuxcommand: logrotate”:http://linuxcommand.org/man_pages/logrotate8.html logrotate is designed to ease administration of systems that generate large numbers of log files. Normally, logrotate is run as a daily cron job.

Some important knowledges:

Assumption

  1. Your site is example.com
  2. The site is located in /var/www/example/
  3. Your site is deployed by Capistrano, so you can find your logs in /var/www/example/shared/log/
  4. Your static contents server is Nginx, and its logs are located in /var/www/example/shared/log/ and their names start with nginx_

How to do

1. Login your server

2. Make sure that “include /etc/logrotate.d” is existed in default config file and not commented:

You should be able to find the directive shown below, if not, append it manully.

3.Create new logrotate config files for your site’s logs

A. Create new rotate config file for application log:

Type following contents, and save.

B. Create new rotate config file for server log:

Type following contents, and save.

Attention: /var/run/nginx.pid is your nginx pid file path, but someone may use default nginx pid path(/opt/nginx/logs/nginx.pid). You have two solutions to solve this conflict:

A. Change /var/run/nginx.pid to /opt/nginx/logs/nginx.pid or other path you have defined in your nginx config file. B. Set your “pid” directive to expected path:

pid /var/run/nginx.pid;

in your nginx config file(such as, /opt/nginx/conf/nginx.conf), and then restart your server.

If the above work are all finished, everything done! You should remember to check if everything runs normally at other days.