Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

#!/usr/bin/env python 

 

""" 

@file ion/services/coi/logger.py 

@author Michael Meisinger 

@brief service backend for logging. Plays nicely with logging package 

""" 

 

import logging 

from twisted.internet import defer 

 

from ion.core.process.process import ProcessFactory 

from ion.core.process.service_process import ServiceProcess, ServiceClient 

import ion.util.ionlog 

log = ion.util.ionlog.getLogger(__name__) 

 

logserv = logging.getLogger('logServer') 

 

class LoggerService(ServiceProcess): 

    """Logger service interface 

    """ 

 

    # Declaration of service 

    declare = ServiceProcess.service_declare( 

        name='logger', 

        version='0.1.0', 

        dependencies=[] 

    ) 

 

    def slc_init(self): 

        log.info("LoggingService initialized") 

 

    def op_config(self, content, headers, msg): 

        pass 

 

    @defer.inlineCallbacks 

    def op_logmsg(self, content, headers, msg): 

        level = content.get('level','info') 

        logmsg = content.get('msg','#NO MESSAGE#') 

 

        # need to do something reasonable with these soon 

        # lfrom = headers.get('sender','') 

        # ltime = content.get('logtime') 

 

        if level == 'debug': 

            logserv.debug(logmsg) 

        elif level == 'info': 

            logserv.info(logmsg) 

        elif level == 'warn': 

            logserv.warn(logmsg) 

        elif level == 'error': 

            logserv.error(logmsg) 

        elif level == 'critical': 

            logserv.critical(logmsg) 

        else: 

            log.error('Invalid log level: '+str(level)) 

        yield self.reply_ok(msg) 

 

 

class LoggerClient(ServiceClient): 

    """ 

    Class for client to sent log message to service 

    """ 

    def __init__(self, proc=None, **kwargs): 

        if not 'targetname' in kwargs: 

            kwargs['targetname'] = "logger" 

        ServiceClient.__init__(self, proc, **kwargs) 

 

    @defer.inlineCallbacks 

    def logmsg(self, level, msg, sender, logtime): 

        yield self._check_init() 

 

        # do we or don't we trust/care about client 

        # timestamps?  If not, the logtime isn't needed. 

 

        cont = { 

            'level':level, 

            'msg':msg, 

            'sender':sender, 

            'logtime':logtime 

        } 

        (content, headers, msg) = yield self.rpc_send('logmsg', cont) 

        log.info('Service reply: '+str(content)) 

 

        defer.returnValue(str(content)) 

 

# Spawn of the process using the module name 

factory = ProcessFactory(LoggerService)