use bunyan

This commit is contained in:
jysperm
2014-11-27 01:15:41 +08:00
parent a15c0565bc
commit 2322d2cc7b
8 changed files with 63 additions and 25 deletions

View File

@@ -5,9 +5,11 @@ global.app = exports
app.libs =
_: require 'underscore'
async: require 'async'
bunyan: require 'bunyan'
bodyParser: require 'body-parser'
child_process: require 'child_process'
cookieParser: require 'cookie-parser'
expressBunyanLogger: require 'express-bunyan-logger'
csrf: require 'csrf'
crypto: require 'crypto'
depd: require 'depd'
@@ -17,7 +19,6 @@ app.libs =
harp: require 'harp'
jade: require 'jade'
markdown: require('markdown').markdown
middlewareInjector: require 'middleware-injector'
moment: require 'moment-timezone'
mongoose: require 'mongoose'
morgan: require 'morgan'
@@ -35,20 +36,25 @@ app.libs =
ObjectId: (require 'mongoose').Schema.Types.ObjectId
Mixed: (require 'mongoose').Schema.Types.Mixed
{cookieParser, crypto, bodyParser, depd, express, fs, harp, middlewareInjector, mongoose} = exports.libs
{bunyan, cookieParser, crypto, bodyParser, depd, express, fs, harp, mongoose} = exports.libs
{morgan, nodemailer, path, redis, _} = exports.libs
app.logger = do ->
unless process.env.NODE_ENV == 'test'
return console
return {
log: ->
error: console.error
}
app.package = require './package'
app.deprecate = depd 'rootpanel'
app.utils = require './core/utils'
app.bunyanMongo = new app.utils.bunyanMongo()
app.logger = bunyan.createLogger
name: app.package.name
streams: [
type: 'raw'
level: 'info'
stream: app.bunyanMongo
,
level: process.env.LOG_LEVEL ? 'debug'
stream: process.stdout
]
do ->
config_path = path.join __dirname, 'config.coffee'
@@ -79,7 +85,6 @@ app.express = express()
app.config = config
app.db = require './core/db'
app.utils = require './core/utils'
app.cache = require './core/cache'
app.i18n = require './core/i18n'
app.pluggable = require './core/pluggable'
@@ -98,15 +103,12 @@ app.billing = require './core/billing'
app.middleware = require './core/middleware'
app.notification = require './core/notification'
unless process.env.NODE_ENV == 'test'
app.express.use morgan 'dev'
app.express.use bodyParser.json()
app.express.use cookieParser()
app.express.use middlewareInjector
app.express.use app.middleware.errorHandling
app.express.use app.middleware.session()
app.express.use app.middleware.logger()
app.express.use app.middleware.errorHandling
app.express.use app.middleware.csrf()
app.express.use app.middleware.authenticate
app.express.use app.middleware.accountHelpers
@@ -141,7 +143,7 @@ exports.start = _.once ->
app.pluggable.selectHook(null, 'app.started').forEach (hook) ->
hook.action()
app.logger.log "RootPanel start at #{config.web.listen}"
app.logger.info "RootPanel start at #{config.web.listen}"
unless module.parent
exports.start()

View File

@@ -14,7 +14,16 @@ mongoose.connection.on 'error', (err) ->
console.error err if err
mongoose.connection.on 'connected', ->
cOption = mongoose.connection.db.collection 'options'
db = mongoose.connection.db
db.createCollection 'logs',
capped: true
size: 32 * 1024 * 1024
, (err, cLogs) ->
app.bunyanMongo.collection = cLogs
app.bunyanMongo.dequeueCachedRecords()
cOption = db.collection 'options'
cOption.findOne
key: 'db_version'

View File

@@ -1,5 +1,5 @@
{config} = app
{_, expressSession, redisStore, path, fs, moment} = app.libs
{_, expressSession, redisStore, path, fs, moment, expressBunyanLogger} = app.libs
{Account} = app.models
exports.errorHandling = (req, res, next) ->
@@ -9,6 +9,16 @@ exports.errorHandling = (req, res, next) ->
next()
exports.logger = ->
return expressBunyanLogger
logger: app.logger
parseUA: false
excludes: [
'req', 'res', 'body', 'short-body', 'http-version',
'incoming', 'req-headers', 'res-headers'
]
genReqId: (req) -> req.sessionID
exports.session = ->
RedisStore = redisStore expressSession
secret = fs.readFileSync(path.join __dirname, '../session.key').toString()
@@ -108,7 +118,7 @@ exports.requireAuthenticate = (req, res, next) ->
res.error 'auth_failed', null, 403
exports.requireAdminAuthenticate = (req, res, next) ->
req.inject [exports.requireAuthenticate], ->
exports.requireAuthenticate req, res, ->
unless 'root' in req.account.groups
if req.method == 'GET'
return res.status(403).end()
@@ -119,7 +129,7 @@ exports.requireAdminAuthenticate = (req, res, next) ->
exports.requireInService = (service_name) ->
return (req, res, next) ->
req.inject [exports.requireAuthenticate], ->
exports.requireAuthenticate req, res, ->
unless service_name in req.account.billing.services
return res.error 'not_in_service'

View File

@@ -20,7 +20,7 @@ describe 'app', ->
mongoose.should.be.ok
it 'app.logger should be available', ->
app.logger.log.should.be.a 'function'
app.logger.info.should.be.a 'function'
app.logger.error.should.be.a 'function'
it 'config.coffee should exists', ->

View File

@@ -53,3 +53,19 @@ exports.pickErrorName = (error) ->
return "#{err.path}_exist"
return err.message
exports.bunyanMongo = class BunyanMongo
queue: []
collection: null
dequeueCachedRecords: ->
while @queue.length
@write @queue.shift()
write: (data) ->
if @collection
@collection.insert data, (err) ->
console.error err if err
else
@queue.push data

View File

@@ -16,7 +16,7 @@
}
],
"scripts": {
"start": "./node_modules/.bin/coffee app.coffee",
"start": "./node_modules/.bin/coffee app.coffee | ./node_modules/.bin/bunyan -o short",
"migrate": "./node_modules/.bin/coffee bin/migrate.coffee",
"reconfigure": "./node_modules/.bin/coffee bin/reconfigure.coffee",
"test": "COV_TEST=true ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --require test/env --reporter node_modules/mocha-reporter-cov-summary -- core/test/*.test.coffee core/test/*/*.test.coffee plugin/*/test",

View File

@@ -1,6 +1,6 @@
module.exports =
web:
t_name: 'plugins.rpvhost.'
t_name: 'RootPanel'
url: 'http://rp.rpvhost.net'
listen: '/home/rpadmin/rootpanel.sock'
repo: 'jysperm/RootPanel'

View File

@@ -1,4 +1,5 @@
process.env.NODE_ENV = 'test'
process.env.LOG_LEVEL = 'error'
global.config = require '../config'