On 01/25/2016 11:52 AM, Ramon Medeiros wrote:
Use logrotate to compress and keep 10 logs of 10MB
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
Changes:
v4:
Add wokd.in file at logrotate, adding the logic to change the logging dir if
it has been changed at wok.conf
v3:
Set log size to 10MB
Use WatchedFileHandler to avoid issues with python logging and logrotate
v2:
Add logrotate as dependency
Fix typo in Copyright
Makefile.am | 2 ++
contrib/DEBIAN/control.in | 1 +
contrib/Makefile.am | 1 +
contrib/wok.spec.fedora.in | 2 ++
contrib/wok.spec.suse.in | 2 ++
contrib/wokd.logrotate.in | 28 ++++++++++++++++++++++++++++
src/wok/config.py.in | 2 ++
src/wok/server.py | 29 ++++++++++++++++++++---------
8 files changed, 58 insertions(+), 9 deletions(-)
create mode 100644 contrib/wokd.logrotate.in
diff --git a/Makefile.am b/Makefile.am
index 278bda1..fb4db2c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -140,6 +140,8 @@ install-data-local:
mkdir -p $(DESTDIR)/etc/wok/
$(INSTALL_DATA) src/dhparams.pem $(DESTDIR)/etc/wok/dhparams.pem
touch $(DESTDIR)/etc/nginx/conf.d/wok.conf
+ mkdir -p $(DESTDIR)/etc/logrotate.d/
+ $(INSTALL_DATA) $(top_srcdir)/contrib/wokd.logrotate.in
$(DESTDIR)/etc/logrotate.d/wokd.in
uninstall-local:
@if test -f $(systemdsystemunitdir)/wokd.service; then \
diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in
index 1f39ad8..e585080 100644
--- a/contrib/DEBIAN/control.in
+++ b/contrib/DEBIAN/control.in
@@ -14,6 +14,7 @@ Depends: python-cherrypy3 (>= 3.2.0),
python-ldap,
python-psutil (>= 0.6.0),
fonts-font-awesome,
+ logrotate,
Please, update the docs/*-deps.md files to add the logrotate dependency.
texlive-fonts-extra
Build-Depends: xsltproc,
gettext,
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index ed4a006..036ec50 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -29,6 +29,7 @@ EXTRA_DIST = \
wokd-upstart.conf.debian \
wokd-upstart.conf.fedora \
make-deb.sh.in \
+ wokd.logrotate.in \
$(NULL)
make-deb.sh: make-deb.sh.in $(top_builddir)/config.status
diff --git a/contrib/wok.spec.fedora.in b/contrib/wok.spec.fedora.in
index 34b3ac3..612932d 100644
--- a/contrib/wok.spec.fedora.in
+++ b/contrib/wok.spec.fedora.in
@@ -19,6 +19,7 @@ Requires: python-ldap
Requires: python-psutil >= 0.6.0
Requires: fontawesome-fonts
Requires: open-sans-fonts
+Requires: logrotate
BuildRequires: gettext-devel
BuildRequires: libxslt
BuildRequires: openssl
@@ -116,6 +117,7 @@ rm -rf $RPM_BUILD_ROOT
%{_sysconfdir}/nginx/conf.d/wok.conf.in
%{_sysconfdir}/wok/wok.conf
%{_sysconfdir}/wok/
+%{_sysconfdir}/logrotate.d/wokd.in
%{_mandir}/man8/wokd.8.gz
%if 0%{?with_systemd}
diff --git a/contrib/wok.spec.suse.in b/contrib/wok.spec.suse.in
index 7fa660b..66c474b 100644
--- a/contrib/wok.spec.suse.in
+++ b/contrib/wok.spec.suse.in
@@ -20,6 +20,7 @@ Requires: nginx
Requires: python-psutil >= 0.6.0
Requires: fontawesome-fonts
Requires: google-opensans-fonts
+Requires: logrotate
BuildRequires: gettext-tools
BuildRequires: libxslt-tools
BuildRequires: openssl
@@ -94,6 +95,7 @@ rm -rf $RPM_BUILD_ROOT
%{_sysconfdir}/wok/
%{_sysconfdir}/nginx/conf.d/wok.conf.in
%{_sysconfdir}/nginx/conf.d/wok.conf
+%{_sysconfdir}/logrotate.d/wokd.in
%{_var}/lib/wok/
%{_localstatedir}/log/wok/*
%{_localstatedir}/log/wok/
diff --git a/contrib/wokd.logrotate.in b/contrib/wokd.logrotate.in
new file mode 100644
index 0000000..969167d
--- /dev/null
+++ b/contrib/wokd.logrotate.in
@@ -0,0 +1,28 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+${log_dir}/*log {
+ daily
+ nomail
+ maxsize 10M
+ rotate 10
+ nomissingok
+ compress
+}
+
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index c6b1db2..e46602d 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -83,6 +83,7 @@ class Paths(object):
self.src_dir = '@wokdir@'
self.plugins_dir = '@wokdir@/plugins'
self.mo_dir = '@prefix@/share/locale'
+ self.logrotate_dir =
"@sysconfdir(a)/logrotate.d/"
This path should be the same on those cases (installed or not), right?
else:
self.nginx_conf_dir = self.add_prefix('src/nginx')
self.state_dir = self.add_prefix('data')
@@ -91,6 +92,7 @@ class Paths(object):
self.src_dir = self.add_prefix('src/wok')
self.plugins_dir = self.add_prefix('src/wok/plugins')
self.mo_dir = self.add_prefix('mo')
+ self.logrotate_conf = ""
for font in FONT_FILES.keys():
paths = FONTS_PATH[font]
diff --git a/src/wok/server.py b/src/wok/server.py
index c2f6c65..f69d39d 100644
--- a/src/wok/server.py
+++ b/src/wok/server.py
@@ -25,16 +25,17 @@ import logging
import logging.handlers
import os
+from string import Template
from wok import auth
from wok import config
-from wok.config import WokConfig, PluginConfig
+from wok.config import config as configParser
+from wok.config import paths, PluginConfig, WokConfig
from wok.control import sub_nodes
from wok.model import model
from wok.proxy import start_proxy, terminate_proxy
from wok.root import WokRoot
from wok.utils import get_enabled_plugins, import_class
-
LOGGING_LEVEL = {"debug": logging.DEBUG,
"info": logging.INFO,
"warning": logging.WARNING,
@@ -99,24 +100,34 @@ class Server(object):
if dev_env:
cherrypy.log.screen = True
- # Create handler to rotate access log file
- h = logging.handlers.RotatingFileHandler(options.access_log, 'a',
- 10000000, 1000)
+ # Create handler to access log file
+ h = logging.handlers.WatchedFileHandler(options.access_log, 'a',
delay=1)
h.setLevel(logLevel)
h.setFormatter(cherrypy._cplogging.logfmt)
# Add access log file to cherrypy configuration
cherrypy.log.access_log.addHandler(h)
- # Create handler to rotate error log file
- h = logging.handlers.RotatingFileHandler(options.error_log, 'a',
- 10000000, 1000)
+ # Create handler to error log file
+ h = logging.handlers.WatchedFileHandler(options.error_log, 'a',
delay=1)
h.setLevel(logLevel)
h.setFormatter(cherrypy._cplogging.logfmt)
- # Add rotating log file to cherrypy configuration
+ # Add error log file to cherrypy configuration
cherrypy.log.error_log.addHandler(h)
+ # redefine logrotate configuration according to wok.conf
+ with open(os.path.join(paths.logrotate_dir, "wokd.in")) as template:
+ data = template.read()
+
+ data = Template(data)
+ data = data.safe_substitute(log_dir=configParser.get("logging",
"log_dir"))
+
+ # Write file to be used for nginx.
+ config_file = open(os.path.join(paths.logrotate_dir, "wokd"),
"w")
+ config_file.write(data)
+ config_file.close()
+
# Handling running mode
if not dev_env:
cherrypy.config.update({'environment': 'production'})