jeudi 24 février 2011

Jython And logging

For one of my jython development, i like to write traces in logging files.
So i have wrote a simple little jython class to log :

import time
import java.lang.System  as  sys

class Logging:
    ERROR = 3
    WARNING = 2
    INFO = 1
    DEBUG = 0
    LEVEL = ['DEBUG  ', 'INFO   ', 'WARNING', 'ERROR  ']
    VALUELEVEL = "DEBUG = 0, INFO = 1, WARNING = 2, ERROR = 3"
   
    filename = "none"
    bprint2screen = 0
    bprint2file = 1
    level = 3

    def __init__(self, filename = "none", levelbyDefault = 3):
        self.level = levelbyDefault
        if filename == "none":
            self.bprint2file = 0
            self.bprint2screen = 1
        else:
            if 1 >= self.level:
                self.filename = filename
                file = open(self.filename,'w')
                file.write('[' + time.asctime() + '][' + self.LEVEL[level] + ']-------------------------------------------------------------------------------\n')
                file.write('[' + time.asctime() + '][' + self.LEVEL[level] + ']-')
                file.write('Create Object loggin\n')
                file.close()
       
   
    def __del__(self):
        self('Destroy Object loggin')
       
    def print(self,level, string):
        if int(level) >= int(self.level):
            if self.bprint2file == 1:
                file = open(self.filename,'a')
                file.write('[' + time.asctime() + '][' + self.LEVEL[level] + ']-')
                file.write(string + '\n')
                file.close()
            if self.bprint2screen == 1:
                print '[' + time.asctime() + '][' + self.LEVEL[level] + '] - ' + string
   
    def setPrint2Screen(self,bprint2screen):
        self.bprint2screen = bprint2screen
   
    def setPrint2File(self,bprint2file):
        self.bprint2file = bprint2file
       
    def setLevel(self,level):
        self.level = level
   
    def setFileName(self,filename):
        if filename != "none":
            self.filename = filename
            self.bprint2file = 1
            self.bprint2screen = 0
       


sample to use it :

#add Script Jy Path to Systeme
sys.path.append("/probtp_outils/was/jython/")
#Import File where log class is defined
scriptname = "ListeDataSource.jy"


levelLog = 0 #DEBUG
pathLog = "/tmp/logs.log"

#Logging For Debug
log = classLogging.Logging()
log.setLevel(levelLog)
log.setFileName(pathLog)
 
log.print(log.INFO,"logs Information bla bla bla")
log.print(log.DEBUG,"Debug Informations, bla bla")