Skip to content

Commit

Permalink
Merge pull request #103 from GoogleCloudPlatform/fluent
Browse files Browse the repository at this point in the history
Added fluent logger sample.
  • Loading branch information
jmdobry committed Apr 20, 2016
2 parents f5b4aa9 + d119b2e commit 1e058ee
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .jshintignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ appengine/sails/api/responses/**
appengine/webpack/dist/**
functions/**
**/node_modules/**
coverage/
coverage/
logging/fluent.js
57 changes: 57 additions & 0 deletions logging/fluent.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var express = require('express');
var app = express();

app.get('*', function (req, res, next) {
return next('oops');
});

// [START fluent]
var structuredLogger = require('fluent-logger').createFluentSender('myapp', {
host: 'localhost',
port: 24224,
timeout: 3.0
});

var report = function (err, req) {
var payload = {
serviceContext: {
service: 'myapp',
},
message: err.stack,
context: {
httpRequest: {
url: req.originalUrl,
method: req.method,
referrer: req.header('Referer'),
userAgent: req.header('User-Agent'),
remoteIp: req.ip,
responseStatusCode: 500,
}
}
};
structuredLogger.emit('errors', payload);
};

// Handle errors (the following uses the Express framework)
app.use(function (err, req, res, next) {
report(err, req);
res.status(500).send(err.response || 'Something broke!');
});
// [END fluent]

module.exports = app;
2 changes: 2 additions & 0 deletions logging/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
"export": "node export.js"
},
"dependencies": {
"express": "^4.13.4",
"fluent-logger": "^1.1.0",
"gcloud": "^0.30.3"
}
}
51 changes: 51 additions & 0 deletions test/logging/fluent.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// Copyright 2015-2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var test = require('ava');
var proxyquire = require('proxyquire').noPreserveCache();
var request = require('supertest');

test.cb('should log error', function (t) {
var loggerCalled = false;

var structuredLogger = {
emit: function (name) {
loggerCalled = true;
t.is(name, 'errors');
}
};

var app = proxyquire('../../logging/fluent.js', {
'fluent-logger': {
createFluentSender: function (name, options) {
t.is(name, 'myapp');
t.same(options, {
host: 'localhost',
port: 24224,
timeout: 3.0
});
return structuredLogger;
}
}
});

request(app)
.get('/')
.expect(500)
.expect(function () {
t.is(loggerCalled, true, 'structuredLogger.emit should have been called');
})
.end(t.end);
});

0 comments on commit 1e058ee

Please sign in to comment.