log collector
에러 로깅, 사용자 정보 저장.
init database table
테이블 셋팅이 먼저 필요하다. 두개의 테이블 error_reports와 user_trackings이 필요 하면 아래의 방법으로 만들 수 있다. 테이블 명은 변경이 가능하나, 컬럼은 변경이 불가능하다. 기본 테이블 명은 error_reports, user_trackings
스크립트
import { initTable } from 'log-collector' const testConfig = { dbProperties:{ host: 'xxxx', dialect: 'mysql', username: 'xxxx', password: 'xxxx', }, slackProperties: { url: 'xxxx', }, slackOn: true, dbOn: true,}; try{ await initTable(testConfig); await initUserTrackingTable(testConfig, 'some table name'); // 테이블 네임} catch (error) { console.error(error);}
spec: /src/utils/test/initTable.spec.ts
sql
-- auto-generated definition ( id bigint auto_increment primary key, error_type varchar(25) default 'server_error' null, name varchar(25) null, message varchar(50) null, code varchar(50) null, errno varchar(50) null, syscall varchar(50) null, hostname varchar(50) null, status int(3) unsigned null, status_text varchar(25) null, req_url varchar(300) null, req_query varchar(300) null, req_body varchar(300) null, req_method varchar(6) null, req_status int(3) unsigned null, req_res_data varchar(300) null, user_id varchar(25) null, user_name varchar(100) null, user_department varchar(100) null, createTimestamp datetime not null) collate = utf8_unicode_ci; -- auto-generated definition ( id bigint auto_increment primary key, display_name varchar(100) null, action_name varchar(50) null, operation int(1) unsigned null, params json null, createTimestamp datetime not null) collate = utf8_unicode_ci;
how to use
error report
초기화 과정 필요. 이후 에러 리포팅.
es7 초기화
import ErrorReportor from 'log-collector' const config = { slackOn: true, dbOn: true, dbProperties:{ // db info host: 'db host', dialect: 'mysql', // only mysql support username: 'xxx', password: 'xxx', }, slackProperties: { // slack info url: 'webhook url', }, };const reportor = await ErrorReporter.getInstance(config); // singletonconst error = { type: 'client-error', name: 'some error', ...}; // see error formatreportor.procesError(error);
es5 - express
/*** initialize - props*/let errorReporter; { try const ErrorReporter = errorCatchNoticedefault const config = dbOn: true slackOn: true dbProperties: host: 'xxxxxx' dialect: 'mysql' username: 'xxx' password: 'xxx' slackProperties: url: confslackurl ; ErrorReporter catch error console; } ; /*** initialize - sequalize*/let errorReporter; { try const ErrorReporter = errorCatchNoticedefault const config = dbOn: true slackOn: true slackProperties: url: confslackurl sequelize: sequelize // sequelize 인스턴스 ; ErrorReporter catch error console; }
주요 config instance
에러 리포트
/*** error handle*/app;
process;
주요 ErrorInfo instance
cf: src/test/ErrorReporter.spec.ts cf: src/test/ErrorReporter.dbOff.spec.ts
메서드
async procesError( error ); // 에러 처리
getSequalize(); // 시퀄라이즈 얻기
isInitialize() // 초기화 확인 - 크게 의미는 없음 . 테스트용으로 제작
user tracking
초기화
test.skip('initialize db - by sequalize', async () => {
const sequelize = new Sequelize(dbProperties);
const userTracker = await UserTracker.getInstance({
sequelize,
});
expect(userTracker.isInitialize()).toBe(true);
userTracker.close();
});
유저 트랙킹
test('save user tracking', async () => {
const userTracker = await UserTracker.getInstance(configByDbproperties);
console.log(dbTester);
const before = await dbTester.getCount4UserTraking();
await userTracker.save({
displayName: 'test1',
actionName: 'action1',
operation: Operation.Insert,
params: { param1: 'p1', param2: 'p2' },
});
await userTracker.save({
displayName: 'test1',
actionName: 'action1',
operation: Operation.Delete,
params: { param1: 'bb', param2: 'ab' },
});
await userTracker.save({
displayName: 'test1',
actionName: 'action1',
operation: Operation.Update,
params: { param1: 'temp', param2: 'ok' },
});
const after = await dbTester.getCount4UserTraking();
expect((before + 3)).toBe(after);
});
주요 interface
/** * 사용자 오퍼레이션 - javascript 의 경우 순서대로 insert=>1,update=>2,delete=>3,select=>4,merge=>5 */ /** * 액션 */
메서드
async procesError( error ); // 에러 처리
getSequalize(); // 시퀄라이즈 얻기
isInitialize() // 초기화 확인 - 크게 의미는 없음 . 테스트용으로 제작
cf: src/test/UserTracking.spec.ts