Skip to content

Commit 798ffef

Browse files
committed
implement SqliteAdapter.logger
1 parent 0d871b0 commit 798ffef

4 files changed

Lines changed: 55 additions & 12 deletions

File tree

jest.setup.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
require('dotenv').config();
22
const { JsonLogger } = require('@themost/json-logger');
33
const { TraceUtils } = require('@themost/common');
4+
5+
if (typeof JsonLogger.prototype.setLogLevel !== 'function') {
6+
Object.assign(JsonLogger.prototype, {
7+
/**
8+
* @param {string} level
9+
*/
10+
setLogLevel(level) {
11+
const logLevel = [ 'error', 'warn', 'info', 'verbose', 'debug' ].indexOf(level);
12+
if (logLevel > -1) {
13+
this.level = logLevel;
14+
}
15+
}
16+
})
17+
}
18+
419
process.env.NODE_ENV = 'development';
520
TraceUtils.useLogger(new JsonLogger({
621
format: 'raw'

spec/TestApplication.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import {DataApplication, DataConfigurationStrategy, DataCacheStrategy, DataConte
33
import { createInstance } from '../src';
44

55
const testConnectionOptions = {
6-
'database': 'spec/db/local.db'
6+
'database': 'spec/db/local.db',
7+
'logLevel': 'debug'
78
};
89

910

src/SqliteAdapter.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11

22
// MOST Web Framework Codename Zero Gravity Copyright (c) 2017-2022, THEMOST LP
3-
import { DataAdapterBase, DataAdapterIndexes, DataAdapterMigration, DataAdapterTable, DataAdapterView } from '@themost/common';
3+
import { DataAdapterBase, DataAdapterIndexes, DataAdapterMigration, DataAdapterTable, DataAdapterView, TraceLogger } from '@themost/common';
44
import { QueryExpression, SqlFormatter } from '@themost/query';
55
import {AsyncSeriesEventEmitter} from '@themost/events';
66

77
export declare class SqliteAdapter implements DataAdapterBase {
88
executing: AsyncSeriesEventEmitter<{target: SqliteAdapter, query: (string|QueryExpression), params?: unknown[]}>;
99
executed: AsyncSeriesEventEmitter<{target: SqliteAdapter, query: (string|QueryExpression), params?: unknown[], results: uknown[]}>;
1010

11-
constructor(options: { database: string, extensions?: { [key: string]: string }, retry?: number, retryInterval?: number });
11+
logger: TraceLogger;
12+
13+
constructor(options: { database: string, extensions?: { [key: string]: string }, retry?: number, retryInterval?: number, logLevel?: 'error' | 'warn' | 'info' | 'verbose' | 'debug' });
1214
rawConnection?: any;
1315
options?: { database: string, extensions?: { [key: string]: string }, retry?: number, retryInterval?: number };
1416
selectIdentityAsync(entity: string, attribute: string): Promise<any>;

src/SqliteAdapter.js

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,29 @@ function onReceivingJsonObject(event) {
6363
}
6464
}
6565

66+
/**
67+
*
68+
* @returns {import('@themost/common').TraceLogger}
69+
*/
70+
function createLogger() {
71+
if (typeof TraceUtils.newLogger === 'function') {
72+
return TraceUtils.newLogger();
73+
}
74+
const [loggerProperty] = Object.getOwnPropertySymbols(TraceUtils);
75+
const logger = TraceUtils[loggerProperty];
76+
const newLogger = Object.create(TraceUtils[loggerProperty]);
77+
newLogger.options = Object.assign({}, logger.options);
78+
return newLogger;
79+
}
80+
6681

6782
class SqliteAdapter {
6883
/**
6984
* @param {*} options
7085
*/
7186
constructor(options) {
7287
/**
73-
* @type {{database: string,retry: number=,retryInterval: number=}}
88+
* @type {{database: string,retry: number=,retryInterval: number=,logLevel:string=}}
7489
*/
7590
this.options = options || { database: ':memory:' };
7691
// set defaults
@@ -88,7 +103,18 @@ class SqliteAdapter {
88103
this.executed = new AsyncSeriesEventEmitter();
89104

90105
this.executed.subscribe(onReceivingJsonObject);
91-
106+
/**
107+
* @type {import('@themost/common').TraceLogger}
108+
*/
109+
this.logger = createLogger();
110+
// stage 2: use log level from connection options, if any
111+
if (typeof this.options.logLevel === 'string' && this.options.logLevel.length) {
112+
if (typeof this.logger.level === 'function') {
113+
this.logger.level(this.options.logLevel);
114+
} else if (typeof this.logger.setLogLevel === 'function') {
115+
this.logger.setLogLevel(this.options.logLevel);
116+
}
117+
}
92118
}
93119
open(callback) {
94120
const self = this;
@@ -147,8 +173,8 @@ class SqliteAdapter {
147173
}
148174
}
149175
catch (err) {
150-
TraceUtils.log('An error occurred while closing database.');
151-
TraceUtils.log(err);
176+
this.logger.warn('An error occurred while closing database.');
177+
this.logger.warn(err);
152178
//call callback without error
153179
callback();
154180
}
@@ -1153,8 +1179,7 @@ class SqliteAdapter {
11531179
}
11541180
else {
11551181
//log statement (optional)
1156-
if (process.env.NODE_ENV === 'development')
1157-
TraceUtils.log(sprintf('SQL:%s, Parameters:%s', sql, JSON.stringify(values)));
1182+
self.logger.debug(`SQL:${sql}, Parameters:${JSON.stringify(values)}`);
11581183
//prepare statement - the traditional way
11591184
const prepared = self.prepare(sql, values);
11601185
let fn;
@@ -1173,7 +1198,7 @@ class SqliteAdapter {
11731198
if (err.code === 'SQLITE_BUSY') {
11741199
const shouldRetry = typeof self.options.retry === 'number' && self.options.retry > 0;
11751200
if (shouldRetry === false) {
1176-
TraceUtils.error(`SQL Error: ${prepared}`);
1201+
self.logger.error(`SQL Error: ${prepared}`);
11771202
return callback(err);
11781203
}
11791204
const retry = self.options.retry;
@@ -1196,7 +1221,7 @@ class SqliteAdapter {
11961221
}
11971222
// retry
11981223
callback.retry += retryInterval;
1199-
TraceUtils.warn(`'SQL Error:${prepared}. Retrying in ${callback.retry} ms.'`);
1224+
self.logger.warn(`'SQL Error:${prepared}. Retrying in ${callback.retry} ms.'`);
12001225
return setTimeout(function () {
12011226
self.execute(query, values, callback);
12021227
}, callback.retry);
@@ -1205,7 +1230,7 @@ class SqliteAdapter {
12051230
if (Object.prototype.hasOwnProperty.call(callback, 'retry')) {
12061231
delete callback.retry;
12071232
}
1208-
TraceUtils.error(`SQL Error: ${prepared}`);
1233+
self.logger.error(`SQL Error: ${prepared}`);
12091234
callback(err);
12101235
}
12111236
else {

0 commit comments

Comments
 (0)