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
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
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)