· 7 years ago · Dec 20, 2018, 12:54 AM
1# -*- coding: utf-8 -*-
2from configparser import ConfigParser
3import psycopg2
4import logging
5import time
6from psycopg2._psycopg import InternalError
7#################################################
8configParser = ConfigParser()
9configFilePath = r'app_settings.conf'
10configParser.read(configFilePath)
11##########################################
12# Config parser parameters
13database = configParser.get('db', 'database')
14host = configParser.get('db', 'host')
15user = configParser.get('db', 'user')
16password = configParser.get('db', 'password')
17sslmode = configParser.get('db', 'sslmode')
18# linking unified logging class and connected it to the database log writer (Db handler)
19import Logger
20logger = Logger.Logger.initLogging(
21 "LogDB",
22 "LogDB.log"
23)
24#Logging handler for PostgreSQL
25class 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
132if __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...")