Guest User

Untitled

a guest
Dec 19th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from configparser import ConfigParser
  3. import psycopg2
  4. import logging
  5. import time
  6. from psycopg2._psycopg import InternalError
  7. #################################################
  8. configParser = ConfigParser()
  9. configFilePath = r'app_settings.conf'
  10. configParser.read(configFilePath)
  11. ##########################################
  12. # Config parser parameters
  13. database = configParser.get('db', 'database')
  14. host = configParser.get('db', 'host')
  15. user = configParser.get('db', 'user')
  16. password = configParser.get('db', 'password')
  17. sslmode = configParser.get('db', 'sslmode')
  18. # linking unified logging class and connected it to the database log writer (Db handler)
  19. import Logger
  20. logger = Logger.Logger.initLogging(
  21. "LogDB",
  22. "LogDB.log"
  23. )
  24. #Logging handler for PostgreSQL
  25. class psqlHandler(logging.Handler):
  26. initial_sql = """CREATE TABLE IF NOT EXISTS log(
  27. Created text,
  28. Name text,
  29. LogLevel int,
  30. LogLevelName text,
  31. Message text,
  32. Module text,
  33. FuncName text,
  34. LineNo int,
  35. Exception text,
  36. Process int,
  37. Thread text,
  38. ThreadName text
  39. )"""
  40.  
  41. insertion_sql = """INSERT INTO log(
  42. created,
  43. Name,
  44. LogLevel,
  45. LogLevelName,
  46. Message,
  47. Module,
  48. FuncName,
  49. LineNo,
  50. Exception,
  51. Process,
  52. Thread,
  53. ThreadName)
  54. VALUES(
  55. %(created)s,
  56. %(name)s,
  57. %(levelno)s,
  58. %(levelname)s,
  59. %(message)s,
  60. %(module)s,
  61. %(funcName)s,
  62. %(lineno)s,
  63. %(exc_text)s,
  64. %(process)s,
  65. %(thread)s,
  66. %(threadName)s
  67. );"""
  68.  
  69. def connect(self):
  70. try:
  71. self.__connect = psycopg2.connect(
  72. database=self.__database,
  73. host = self.__host,
  74. user = self.__user,
  75. password = self.__password,
  76. sslmode="disable")
  77.  
  78. return True
  79. except:
  80. return False
  81.  
  82. def __init__(self, params):
  83.  
  84. if not params:
  85. raise Exception ("No database where to log ☻")
  86.  
  87. self.__database = params['database']
  88. self.__host = params['host']
  89. self.__user = params['user']
  90. self.__password = params['password']
  91.  
  92. self.__connect = None
  93.  
  94. if not self.connect():
  95. raise Exception ("Database connection error, no logging ☻")
  96.  
  97. logging.Handler.__init__(self)
  98.  
  99. self.__connect.cursor().execute(psqlHandler.initial_sql)
  100. self.__connect.commit()
  101. self.__connect.cursor().close()
  102.  
  103. def emit(self, record):
  104.  
  105. # Use default formatting:
  106. self.format(record)
  107.  
  108. if record.exc_info:
  109. #record.exc_text = logging.defaultFormatter.formatException(record.exc_info)
  110. record.exc_text = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
  111.  
  112. else:
  113. record.exc_text = ""
  114.  
  115. # Insert log record:
  116. try:
  117. #cur = self.__connect.cursor(cursor_factory=psycopg2.extras.DictCursor)
  118. cur = self.__connect.cursor()
  119. except:
  120. self.connect()
  121. cur = self.__connect.cursor()
  122. try:
  123. cur.execute(psqlHandler.insertion_sql, record.__dict__)
  124. except InternalError as ie:
  125. print(str(ie))
  126.  
  127. self.__connect.commit()
  128. self.__connect.cursor().close()
  129.  
  130. if __name__ == "__main__":
  131.  
  132. myh = psqlHandler({''
  133. 'host':"localhost",
  134. 'user':"postgres",
  135. 'password':"secret",
  136. 'database':"postgres"})
  137.  
  138. l = logging.getLogger("Snmp_Handler")
  139. l.setLevel(logging.DEBUG)
  140. l.addHandler(myh)
  141. l.info("Table was created...")
Add Comment
Please, Sign In to add comment