使用Python自动创建logrotate配置文件

2018-02-27 10:51:33来源:https://www.coderecord.cn/use-python-creat-logrotate-config-作者:IOS开发学习博客人点击

分享

默认情况下,Apache的所有网站的log文件都存在相同目录下,比如默认的:/var/log/apache2。然后logrotate定期去转储,然后会生成很多很多很多文件。。


如果需要查看某个网站的error文件或者access文件,会很麻烦,看得你眼花。


为了能更好的管理Apache Httpd产生的日志文件,在配置虚拟主机时对需要对每个网站的日志文件都做详细的分类。


简单的说,每个网站的log文件存放地址都使用以网站名称加端口(80或443)的目录下。比如:


##############本站的80端口虚拟主机
<VirtualHost *:80>
ServerAdmin email@qq.com
DocumentRoot "/var/www/html/wp"
ServerName coderecord.cn
ServerAlias *.coderecord.cn devonios.com www.devonios.com
ErrorLog ${APACHE_LOG_DIR}/coderecord_80/coderecord.error.log
CustomLog ${APACHE_LOG_DIR}/coderecord_80/coderecord.access.log combined
</VirtualHost>
############## 本站的443端口虚拟主机
<VirtualHost *:443>
SSLEngine on
ServerAdmin email@qq.com
DocumentRoot "/var/www/html/wp"
ServerName www.coderecord.cn
ErrorLog ${APACHE_LOG_DIR}/coderecord_443/coderecord_443.error.log
CustomLog ${APACHE_LOG_DIR}/coderecord_443/coderecord_443.access.log combined
SSLCertificateFile /etc/apache2/cert/www.coderecord.cn/public.pem
SSLCertificateKeyFile/etc/apache2/cert/www.coderecord.cn/21498787654678.key
SSLCertificateChainFile/etc/apache2/cert/www.coderecord.cn/chain.pem
<FilesMatch "/.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
</VirtualHost>

实际的目录存放样子:



这样一来,每个网站的日志,都非常清楚了。


现在我们希望logrotate能对这些目录下的log文件做自动归档,可以看到这里有很多目录。


logrotate程序会自动读取/etc/logrotate.d目录下所有文件的配置,默认只有一个apache2文件,如果把每个目录的配置都写在一个文件里,那就更乱了。


如果能分成一个网站一个文件,即根据log下的目录来配置,log下有几个目录,/etc/logrotate.d下就有几个配置文件,那就很清楚了,修改时也很方便。


所以,本文的重点来了,使用python脚本自动读取log目录下有哪些目录,然后使用目录名称自动创建配置文件,代码如下:


# -*- coding: utf-8 -*-
import os
logpath = "/var/www/logs/"
def get_content():
with open("/opt/tool/new_logrotate_config.txt","r") as f:
data = f.read()
return data
tempdata = get_content()
for file in os.listdir(logpath):
file_path = os.path.join(logpath, file)
logfile = "/etc/logrotate.d/site_%s" % file
if os.path.isdir(file_path) and not(os.path.exists(logfile)):
currentdata = tempdata
currentdata = currentdata.replace("{dirpath}",file_path)
with open(logfile,"w+") as w:
w.write(currentdata)
print("成功创建logrotate配置文件:%s" % logfile)

代码中用到了一个模版文件:new_logrotate_config.txt,这个文件保存了logrotate的默认配置(根据需要自行修改配置),内容如下:


{dirpath}/*.log {
weekly
#monthly
#daily
missingok
rotate 4
nocompress
#compress
#delaycompress
notifempty
dateext
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then /
/etc/init.d/apache2 reload > /dev/null; /
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then /
run-parts /etc/logrotate.d/httpd-prerotate; /
fi; /
endscript
}

其中第一行的目录位置使用了{dirpath}字符串,这样好在python中替换。


最后的结果:



麻麻再也不用担心我管理不好日志文件咯。


微信扫一扫

第七城市微信公众平台