@e2/core
v1.2.20
Published
Enterprise Application Framework
Downloads
176
Readme
Enterprise Application Framework
What is this?
- [x] Read configuration from
conf/settings.yaml - [x] Merge configuration from
conf/${NODE_ENV}.yaml,conf/${NODE_ENV}.local.yamland environment variables. (if have) - [x] Merge configuration from
data/settings.json(only when DATA_DIR was defined ) - [x] Print merged configuration on application start
- [x] Do not print sensitive configuration name with
_URL,_KEY,_PASSWORD,_SECRETor_TOKENpostfix - [x] Auto create missing dir if the configuration name ends with
_DIR. (e.g. LOG_DIR folder) - [x] Configuration with
_DIRor_FILEwill resolve to absolute path automatically - [x] Provide a
app.settingsobject for application to access the final configuration - [x] Provide a
app.loggerobject for application to use, available transporters: Console, File or Webhook - [x] Provide nested error object
Exceptionwhich will concat all the stacktrace for nested errors - [x] When transporter itself got errors. It will automatically fallback to another available transporter
- [x] Trap linux signals
SIGHUP,SIGINT,SIGQUIT,SIGTERM - [x] Log nodejs process events
uncaughtException - [x] Provide universal application event
beforeExit,exiting,exit - [x] The original log called on failed transporter will logged using fallback logger
Why doing this?
- Because the things above is required for most enterprise applications. It should be shared across projects.
- It's very important. But it's not as important as application logic. It can save your time to bootstrap a new project.
- The same structure will make DevOps happy when doing deployment/monitoring on many projects. It should be standardized.
- Together with Agent Framework; it can be automatically inject into other classes when required. It should be easy to use.
Installation
npm install @e2/core --saveOR
yarn add @e2/coreShow me the code
// TypeScript 2.2+
import { Application } from '@e2/core';
// enable config, logger support
const app = new Application(); // default, same with `Application({ confDir: 'conf', root: process.cwd() })`
// or
const app = new Application({ confDir: 'settings' }); // if your configuration folder is not 'conf'
// or
const app = new Application({ confDir: 'settings', root: '/usr/share/myapp' }); // if your root folder is not current working folder
console.log(app.settings);
app.logger.info('Hi, I am agent stack'); // the log will be automatically save in `LOG_DIR` folder // Node 6+
var Application = require('@e2/core').Application;
// enable config, logger support
var app = new Application(); // default, same with `Application({ confDir: 'conf', root: process.cwd() })`
// or
var app = new Application({ confDir: 'settings' }); // if your configuration folder is not 'conf'
// or
var app = new Application({ confDir: 'settings', root: '/usr/share/myapp' }); // if your root folder is not current working folder
console.log(app.settings);
app.logger.info('Hi, I am agent stack'); // the log will be automatically save in `LOG_DIR` folder
Others
How do I rotate log files?
Consider we output our logs to /usr/share/myapp/logs/agent.log
We would rotate our log files with logrotate, by adding the following to /etc/logrotate.d/myapp:
/usr/share/myapp/logs/agent.log {
su root
daily
rotate 7
delaycompress
compress
notifempty
missingok
copytruncate
}