From a02c8f99839f82751ab64d772f8f881869372720 Mon Sep 17 00:00:00 2001 From: helmutm Date: Fri, 31 Oct 2008 16:50:09 +0000 Subject: [PATCH] add logging to a file as basis for recording read access git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2962 fd906abe-77d9-0310-91a1-e0d9ade77398 --- tracking/README.txt | 24 +++++++++++++++++ tracking/logfile.py | 64 +++++++++++++++++++++++++++++++++++++++++++++ tracking/tests.py | 4 +++ 3 files changed, 92 insertions(+) create mode 100644 tracking/logfile.py diff --git a/tracking/README.txt b/tracking/README.txt index b8c73b3..81cab68 100644 --- a/tracking/README.txt +++ b/tracking/README.txt @@ -140,3 +140,27 @@ Tracking Views >>> from cybertools.tracking.browser import TrackingStorageView + +Track Read Access via a Log File +================================ + + >>> import os + >>> from cybertools.tracking.tests import testDir + >>> from cybertools.tracking.logfile import Logger + + >>> logfile = os.path.join(testDir, 'test.log') + >>> logger = Logger('test', logfile) + + >>> logger.log('Test message #1') + >>> logger.log('Test message #2') + + >>> logger.doRollover() + >>> logger.log('Test message #3') + + +Fin de partie +============= + + >>> for fn in os.listdir(testDir): + ... if '.log' in fn: + ... os.unlink(os.path.join(testDir, fn)) diff --git a/tracking/logfile.py b/tracking/logfile.py new file mode 100644 index 0000000..f024ac2 --- /dev/null +++ b/tracking/logfile.py @@ -0,0 +1,64 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Track user interactions by writing to a log file, loading the log at +certain times collecting analysis results in a real tracking storage. + +$Id$ +""" + +import logging +import os + + +class Logger(object): + + handler = None + + def __init__(self, logname, logfile, logformat='%(asctime)s;%(message)s', + **kw): + self.logname = logname + self.logfile = logfile + self.logformat = logformat + self.params = kw + self.setup() + + def setup(self): + directory = os.path.dirname(self.logfile) + if not os.path.exists(directory): + os.makedirs(directory) + logger = logging.getLogger(self.logname) + self.handler = logging.handlers.RotatingFileHandler(self.logfile, + backupCount=self.params.get('backupCount', 5), + encoding='UTF-8') + formatter = logging.Formatter(self.logformat) + self.handler.setFormatter(formatter) + if not logger.handlers: + logger.addHandler(self.handler) + logger.setLevel(logging.INFO) + + def log(self, message): + logging.getLogger(self.logname).info(message) + + def doRollover(self): + if self.handler is not None: + self.handler.doRollover() + + +loggers = {} diff --git a/tracking/tests.py b/tracking/tests.py index d0a6bb1..153a8a8 100755 --- a/tracking/tests.py +++ b/tracking/tests.py @@ -1,9 +1,13 @@ # $Id$ import unittest, doctest +import os from zope.testing.doctestunit import DocFileSuite +testDir = os.path.join(os.path.dirname(__file__), 'testdata') + + class Test(unittest.TestCase): "Basic tests for the loops.track package."