lllog.py

Go to the documentation of this file.
00001 """\
00002 @file lllog.py
00003 @brief Logging for event processing
00004 
00005 $LicenseInfo:firstyear=2008&license=mit$
00006 
00007 Copyright (c) 2008, Linden Research, Inc.
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 $/LicenseInfo$
00027 """
00028 
00029 from indra.base.llsd import format_notation
00030 
00031 try:
00032     import syslog
00033 except ImportError:
00034     # Windows
00035     import sys
00036 
00037     class syslog(object):
00038         _logfp = sys.stderr
00039 
00040         def syslog(msg):
00041             _logfp.write(msg)
00042             if not msg.endswith('\n'):
00043                 _logfp.write('\n')
00044 
00045         syslog = staticmethod(syslog)
00046 
00047 class Logger(object):
00048     def __init__(self, name='indra'):
00049         self._sequence = 0
00050         try:
00051             syslog.openlog(name, syslog.LOG_CONS | syslog.LOG_PID,
00052                            syslog.LOG_LOCAL0)
00053         except AttributeError:
00054             # No syslog module on Windows
00055             pass
00056 
00057     def next(self):
00058         self._sequence += 1
00059         return self._sequence
00060 
00061     def log(self, msg, llsd):
00062         payload = 'LLLOGMESSAGE (%d) %s %s' % (self.next(), msg,
00063                                                format_notation(llsd))
00064         syslog.syslog(payload)
00065 
00066 _logger = None
00067 
00068 def log(msg, llsd):
00069     global _logger
00070     if _logger is None:
00071         _logger = Logger()
00072     _logger.log(msg, llsd)

Generated on Fri May 16 08:31:53 2008 for SecondLife by  doxygen 1.5.5