@dtails/logger-backend
v1.3.0
Published
A logging library for Node.js, with optional support for storing logs in DB and S3
Downloads
255
Readme
Log Server
Logging solution for node.js
Features
- During local development the logs written to the console
- Auto written to Amazon S3 by day
- Life time config for Amazon S3
- Able to config to turn on/off by log level
- Sentry included
Installation
npm install @dtails/logger-backend
Create table logs in the database
knex.schema.createTable('logs', table => {
table.increments('id')
table.dateTime('created_at').defaultTo(knex.fn.now())
table.string('log_level')
table.text('data')
table.primary(['id']);
})
Create Logs model with objection js https://vincit.github.io/objection.js/
import { Model } from 'objection';
import Knex from 'knex';
const knex = Knex({
client: 'pg',
connection: process.env.DATABASE_URL
});
Model.knex(knex);
export default class Logs extends Model {
static get tableName() {
return 'logs';
}
}
ENV configuration
LOG_LEVEL=DEBUG,ERROR,WARN,INFO
LOG_S3_LIFECYCLE=10
LOG_FILE_NAME=logs-backend
AWS_ACCESS_KEY_ID=[AWS_ACCESS_KEY_ID]
AWS_SECRET_ACCESS_KEY=[AWS_SECRET_ACCESS_KEY]
AWS_REGION=[AWS_REGION]
AWS_BUCKET_NAME=[AWS_BUCKET_NAME]
SENTRY_DSN=[SENTRY_DSN]
Schedule for S3 Upload / Delete
Create a scheduled jobs and config it in the Heroku (1 time per day, Any time)
import Logger from '@dtails/logger-backend';
import Logs from './models/logs.js';
const logger = new Logger(Logs);
logger.syncLogToS3();
// Remove that if you don't want remove logs in the s3
logger.deleteOldLogs();
Usage/Examples
import Logger from '@dtails/logger-backend';
import Logs from './models/logs.js';
function TestLogger() {
const logger = new Logger(Logs);
// Debug log
logger.log('Test Debug');
// Error log
logger.error('Test Error');
// Warning log
logger.warn('Test Warning');
// Info log
logger.info('Test Info');
// Log with variables
const data = 'Test Data';
logger.log(`A message with data: ${data}`)
// Log with object
const sampleObject1 = {
name: 'John',
age: 30,
cars: {
car1: 'Ford',
car2: 'BMW',
car3: 'Fiat'
}
};
const someObject2 = {a: true};
logger.log('Please also log as console.log does in relation to objects', sampleObject1, someObject2);
// Log error
try {
errorTest = new Error('Test Error');
} catch (error) {
logger.error(error);
}
}