Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,19 @@ log.overrideNetworkField("msg", null);
```
If you use this override feature in conjunction with a log parser, make sure you will not violate any parsing rules.

## Tracing
### SAP_passport
example:
```
2a54482a0300e60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a54482a
```

SAP Passport is an end to end tracing technology used in many SAP products.
It is a binary format encoded in hex notation.
Applications can add the whole SAP Passport in this field or give its constituents in the respective fields.

to read up on the possible fields, please look at [fields](https://github.com/SAP/cf-java-logging-support/blob/master/cf-java-logging-support-core/beats/app-logs/docs/fields.asciidoc).

### Custom sink function
Per default the library writes output messages to `stdout`. For debugging purposes it can be useful to redirect the output of the library to another sink (e.g. `console.log()`). You can set a custom sink method as follows:
```js
Expand Down
15 changes: 14 additions & 1 deletion cf-nodejs-logging-support-core/log-core.js → core/log-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ var uuidCheck = /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}/;

var preLogConfig = [];
var postLogConfig = [];
var settableConfig = [];

var dynLogLevelHeader;
var dynLogLevelKey;
Expand Down Expand Up @@ -119,6 +120,8 @@ var precompileConfig = function (config) {
var coreConfig = [];
preLogConfig = [];
postLogConfig = [];
settableConfig = [];


for (var i = 0; i < config.length; i++) {
var obj = config[i];
Expand All @@ -134,6 +137,8 @@ var precompileConfig = function (config) {

if (obj.core) {
coreConfig.push(obj);
} else if (obj.type != null && obj.type == "settable") {
settableConfig.push(obj.name);
} else if (obj.source.type == "time") {
if (obj.source.pre)
preLogConfig.push(obj);
Expand Down Expand Up @@ -609,7 +614,7 @@ var writeCustomFields = function (logObject, logger, additionalFields) {
value = stringifySafe(value);
}

if(defaultCustomEnabled || logObject[key] != null)
if(defaultCustomEnabled || logObject[key] != null || isSettable(key))
logObject[key] = value;

if (cfCustomEnabled)
Expand Down Expand Up @@ -637,6 +642,14 @@ var writeCustomFields = function (logObject, logger, additionalFields) {
}
}

var isSettable = function(key) {
if (settableConfig.length == 0) return false;
for(var i = 0; i < settableConfig.length; i++) {
if(settableConfig[i] == key) return true;
}
return false;
}

// Checks wether the given level passes the logging level threshold extracted from the given logger or its
// ancestors.
var checkLoggingLevel = function (level, logger) {
Expand Down
33 changes: 26 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
//loading core logger functionality
var coreLogger = require("./cf-nodejs-logging-support-core/log-core");
var coreLogger = require("./core/log-core");
var effectiveLogger = null;

coreLogger.init();

effectiveLogger = require("./cf-nodejs-logging-support-express/log-express");
defaultConfig = require("./config.js");
effectiveLogger = require("./logger/log-express");
defaultConfig = require("./config");
effectiveLogger.setCoreLogger(coreLogger);

coreLogger.setConfig(defaultConfig.config);
Expand All @@ -32,17 +32,36 @@ exports.forceLogger = function (name) {
switch (name) {
//insert your custom framework logger here
case "restify":
effectiveLogger = require("./cf-nodejs-logging-support-restify/log-restify");
effectiveLogger = require("./logger/log-restify");
break;
case "plainhttp":
effectiveLogger = require("./cf-nodejs-logging-support-plainhttp/log-plainhttp");
effectiveLogger = require("./logger/log-plainhttp");
break;
default:
effectiveLogger = require("./cf-nodejs-logging-support-express/log-express");
effectiveLogger = require("./logger/log-express");
}
effectiveLogger.setCoreLogger(coreLogger);
};

exports.enableTracing = function (input) {
names = [];
if (typeof input == "string")
names.push(input);
else
names = input;
var config = defaultConfig.config;
for(var i in names) {
switch (names[i].toLowerCase()) {
case "sap_passport":
config.push(...require("./trace/sap_passport").config);
break;
default:
}
}
coreLogger.setConfig(config);
return config;
}


exports.logNetwork = function (req, res, next) {
effectiveLogger.logNetwork(req, res, next);
Expand All @@ -66,7 +85,7 @@ exports.createWinstonTransport = function (options) {
};
}
options.logMessage = coreLogger.logMessage;
return require("./cf-nodejs-logging-support-winston/winston-transport").createTransport(options);
return require("./winston/winston-transport").createTransport(options);
};

exports.createLogger = function (customFields) {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cf-nodejs-logging-support",
"version": "6.5.4",
"version": "6.6.0",
"description": "Logging tool for Cloud Foundry",
"keywords": [
"logging",
Expand Down
28 changes: 26 additions & 2 deletions test/test-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@ chai.should();
describe('Test config', function () {

var core = null;
var index = null;
var httpLogger;
beforeEach(function () {
// Set env vars to enable logging of sensitive data
process.env.LOG_SENSITIVE_CONNECTION_DATA = true;
process.env.LOG_REMOTE_USER = true;
process.env.LOG_REFERER = true;

core = importFresh("../cf-nodejs-logging-support-core/log-core.js");
httpLogger = importFresh("../cf-nodejs-logging-support-plainhttp/log-plainhttp.js");
core = importFresh("../core/log-core.js");
httpLogger = importFresh("../logger/log-plainhttp.js");
index = importFresh("../index.js");
httpLogger.setCoreLogger(core);
core.setConfig(importFresh("../config.js").config);
});
Expand Down Expand Up @@ -76,6 +78,28 @@ describe('Test config', function () {
logObject.x_forwarded_for.should.equal("testingHeader");
});

it('Test sap_passport', function () {
var config = index.enableTracing("sap_passport")
core.setConfig(config);
req.headers = {};
req.headers['sap-passport'] = "testingHeader";
httpLogger.logNetwork(req, res, next);
fireLog();

logObject.sap_passport.should.equal("testingHeader");
});

it('Test sap_passport with array', function () {
var config = index.enableTracing(["SAP_passport"]);
core.setConfig(config);
req.headers = {};
req.headers['sap-passport'] = "testingHeader";
httpLogger.logNetwork(req, res, next);
fireLog();

logObject.sap_passport.should.equal("testingHeader");
});

it('Test remote_user', function () {
req.headers = {};
req.headers['remote-user'] = "testingName";
Expand Down
Loading