pm2-gelf-json 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +2 -0
  2. package/app.js +26 -2
  3. package/package.json +3 -1
package/README.md CHANGED
@@ -21,6 +21,8 @@ pm2 install pm2-gelf-json
21
21
  ```sh
22
22
  $> pm2 set pm2-gelf-json:graylogHost graylog.myserver.org
23
23
  $> pm2 set pm2-gelf-json:graylogPort 12201
24
+ $> pm2 set pm2-gelf-json:graylogLogParseErrors true
25
+ $> pm2 set pm2-gelf-json:graylogSplitLines true
24
26
  $> pm2 set pm2-gelf-json:graylogFields '{"tag": "pm2"}'
25
27
  $> pm2 set pm2-gelf-json:gelfAdapterName 'udp'
26
28
  $> pm2 set pm2-gelf-json:gelfLogLevelsMapping '0:7,10:7,20:7,30:6,40:4,50:3,60:0'
package/app.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const pm2 = require('pm2');
2
2
  const pmx = require('pmx');
3
3
  const gelf = require('gelf-pro');
4
+ const os = require('os');
4
5
 
5
6
  const conf = pmx.initModule();
6
7
 
@@ -58,11 +59,14 @@ function toJSONSafe(data) {
58
59
  try {
59
60
  return JSON.parse(data)
60
61
  } catch (e) {
62
+ if (conf.graylogLogParseErrors) {
63
+ logger('Error (toJSONSafe)', data, e);
64
+ }
61
65
  return null
62
66
  }
63
67
  }
64
68
 
65
- function logData(data, explicitLevel) {
69
+ function logDataItem(data, explicitLevel) {
66
70
  let level = explicitLevel || LEVELS.info
67
71
  let logData = [data];
68
72
 
@@ -84,6 +88,26 @@ function logData(data, explicitLevel) {
84
88
  (logMethods[level] || logMethods[LEVELS.info]).apply(gelf, logData)
85
89
  }
86
90
 
91
+ function splitLines(data) {
92
+ if (data && typeof data === 'string') {
93
+ return data.split(os.EOL).filter(x => x.trim());
94
+ }
95
+ return [];
96
+ }
97
+
98
+ function logData(data, explicitLevel) {
99
+ try {
100
+ if (conf.graylogSplitLines) {
101
+ splitLines(data).forEach(s => logDataItem(s, explicitLevel))
102
+ } else {
103
+ logDataItem(data, explicitLevel)
104
+ }
105
+ } catch(e) {
106
+ logger('Error (logData)', data, e);
107
+ }
108
+ }
109
+
110
+
87
111
  pm2.Client.launchBus((err, bus) => {
88
112
  if (err) return logger(`Error: ${err.message}`, err);
89
113
 
@@ -96,7 +120,7 @@ pm2.Client.launchBus((err, bus) => {
96
120
 
97
121
  bus.on('log:err', (log) => {
98
122
  if (log.process.name === PM2_MODULE_NAME) return;
99
- logData(log.data, LEVELS.error)
123
+ logData(log.data, LEVELS.error);
100
124
  });
101
125
 
102
126
  bus.on('reconnect attempt', () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm2-gelf-json",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "PM2 logging to Graylog using gelf-pro with JSON support",
5
5
  "main": "app.js",
6
6
  "dependencies": {
@@ -20,6 +20,8 @@
20
20
  "logging"
21
21
  ],
22
22
  "config": {
23
+ "graylogLogParseErrors": false,
24
+ "graylogSplitLines": true,
23
25
  "graylogPort": 12201,
24
26
  "graylogHost": "127.0.0.1",
25
27
  "gelfAdapterName": "udp",