mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-17 06:20:23 +00:00
85 lines
2.6 KiB
CoffeeScript
85 lines
2.6 KiB
CoffeeScript
|
|
# Logging
|
|
# =======
|
|
# A Helper to handle the logging throughout the application. It uses
|
|
# [bunyan](https://github.com/trentm/node-bunyan) which allows for different streams
|
|
# to be attached to different log levels. [bunyan](https://github.com/trentm/node-bunyan)
|
|
# creates JSON entries for each log action. The bunyan module can then be used as a
|
|
# CLI to pretty print these logs, e.g.:
|
|
|
|
# `node myapp.js | bunyan`
|
|
|
|
# **Loads Modules:**
|
|
|
|
# - Node.js Module: [fs](http://nodejs.org/api/fs.html) and [path](http://nodejs.org/api/path.html)
|
|
fs = require 'fs'
|
|
path = require 'path'
|
|
|
|
# - External Module: [bunyan](https://github.com/trentm/node-bunyan)
|
|
bunyan = require 'bunyan'
|
|
|
|
###
|
|
Returns a bunyan logger according to the given arguments.
|
|
|
|
@public getLogger( *args* )
|
|
@param {Object} args
|
|
###
|
|
exports.getLogger = ( args ) =>
|
|
emptylog =
|
|
trace: () ->
|
|
debug: () ->
|
|
info: () ->
|
|
warn: () ->
|
|
error: () ->
|
|
fatal: () ->
|
|
# `args` holds the configuration settings for the logging, see either CLI arguments
|
|
# in [webapi-eca](webapi-eca.html) or the configuration parameters in [config](config.html).
|
|
args = args ? {}
|
|
# We need to check for string 'true' also since the cliArgs passed to
|
|
# the event-poller will be strings
|
|
if args.nolog is true or args.nolog is 'true'
|
|
# if the user doesn't want to have a log at all (e.g. during tests), it can be omitted with
|
|
# the nolog flag
|
|
emptylog
|
|
else
|
|
try
|
|
opt =
|
|
name: "webapi-eca"
|
|
# if we are in development mode, we also add information about where the call came from
|
|
# this should be turned off in productive mode since it slows down the logging.
|
|
if args['mode'] is 'development'
|
|
opt.src = true
|
|
# if there's a custom path defined for the log, we adopt the setting.
|
|
if args['file-path']
|
|
@logPath = path.resolve args['file-path']
|
|
else
|
|
@logPath = path.resolve __dirname, '..', 'logs', 'server.log'
|
|
|
|
# We try to write a temp file in the same folder to check if the log can be written
|
|
try
|
|
fs.writeFileSync @logPath + '.temp', 'temp'
|
|
fs.unlinkSync @logPath + '.temp'
|
|
catch e
|
|
console.error "Log folder '#{ @logPath }' is not writable"
|
|
return emptylog
|
|
|
|
# We attach two streams, one for the I/O and one for the log file.
|
|
# The log levels are defined per stream according to the CLI args or the configuration.
|
|
opt.streams = [
|
|
{
|
|
level: args['io-level']
|
|
stream: process.stdout
|
|
},
|
|
{
|
|
level: args['file-level']
|
|
path: @logPath
|
|
}
|
|
]
|
|
# Finally we create the bunyan logger and return it
|
|
bunyan.createLogger opt
|
|
|
|
# If something goes wrong we print the error and return an empty logger.
|
|
catch e
|
|
console.error e
|
|
emptylog
|
|
|