· 7 years ago · Dec 20, 2018, 01:18 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 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...")