· 7 years ago · Dec 20, 2018, 01:00 AM
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 #formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
113 #fh.setFormatter(formatter)
114 else:
115 record.exc_text = ""
116
117 # Insert log record:
118 try:
119 #cur = self.__connect.cursor(cursor_factory=psycopg2.extras.DictCursor)
120 cur = self.__connect.cursor()
121 except:
122 self.connect()
123 cur = self.__connect.cursor()
124 try:
125 cur.execute(psqlHandler.insertion_sql, record.__dict__)
126 except InternalError as ie:
127 print(str(ie))
128
129 self.__connect.commit()
130 self.__connect.cursor().close()
131
132 if __name__ == "__main__":
133
134 myh = psqlHandler({''
135 'host':"localhost",
136 'user':"postgres",
137 'password':"5",
138 'database':"postgres"})
139
140 l = logging.getLogger("Snmp_Handler")
141 l.setLevel(logging.DEBUG)
142 l.addHandler(myh)
143 l.info("Table was created...")