gelf.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. /* automatically generated by JSCoverage - do not edit */
  2. if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
  3. if (! _$jscoverage['appenders/gelf.js']) {
  4. _$jscoverage['appenders/gelf.js'] = [];
  5. _$jscoverage['appenders/gelf.js'][1] = 0;
  6. _$jscoverage['appenders/gelf.js'][2] = 0;
  7. _$jscoverage['appenders/gelf.js'][3] = 0;
  8. _$jscoverage['appenders/gelf.js'][4] = 0;
  9. _$jscoverage['appenders/gelf.js'][5] = 0;
  10. _$jscoverage['appenders/gelf.js'][6] = 0;
  11. _$jscoverage['appenders/gelf.js'][7] = 0;
  12. _$jscoverage['appenders/gelf.js'][9] = 0;
  13. _$jscoverage['appenders/gelf.js'][10] = 0;
  14. _$jscoverage['appenders/gelf.js'][11] = 0;
  15. _$jscoverage['appenders/gelf.js'][12] = 0;
  16. _$jscoverage['appenders/gelf.js'][13] = 0;
  17. _$jscoverage['appenders/gelf.js'][14] = 0;
  18. _$jscoverage['appenders/gelf.js'][15] = 0;
  19. _$jscoverage['appenders/gelf.js'][16] = 0;
  20. _$jscoverage['appenders/gelf.js'][17] = 0;
  21. _$jscoverage['appenders/gelf.js'][19] = 0;
  22. _$jscoverage['appenders/gelf.js'][20] = 0;
  23. _$jscoverage['appenders/gelf.js'][21] = 0;
  24. _$jscoverage['appenders/gelf.js'][22] = 0;
  25. _$jscoverage['appenders/gelf.js'][23] = 0;
  26. _$jscoverage['appenders/gelf.js'][24] = 0;
  27. _$jscoverage['appenders/gelf.js'][25] = 0;
  28. _$jscoverage['appenders/gelf.js'][26] = 0;
  29. _$jscoverage['appenders/gelf.js'][37] = 0;
  30. _$jscoverage['appenders/gelf.js'][38] = 0;
  31. _$jscoverage['appenders/gelf.js'][39] = 0;
  32. _$jscoverage['appenders/gelf.js'][40] = 0;
  33. _$jscoverage['appenders/gelf.js'][41] = 0;
  34. _$jscoverage['appenders/gelf.js'][42] = 0;
  35. _$jscoverage['appenders/gelf.js'][43] = 0;
  36. _$jscoverage['appenders/gelf.js'][44] = 0;
  37. _$jscoverage['appenders/gelf.js'][45] = 0;
  38. _$jscoverage['appenders/gelf.js'][48] = 0;
  39. _$jscoverage['appenders/gelf.js'][49] = 0;
  40. _$jscoverage['appenders/gelf.js'][50] = 0;
  41. _$jscoverage['appenders/gelf.js'][51] = 0;
  42. _$jscoverage['appenders/gelf.js'][52] = 0;
  43. _$jscoverage['appenders/gelf.js'][54] = 0;
  44. _$jscoverage['appenders/gelf.js'][56] = 0;
  45. _$jscoverage['appenders/gelf.js'][58] = 0;
  46. _$jscoverage['appenders/gelf.js'][59] = 0;
  47. _$jscoverage['appenders/gelf.js'][69] = 0;
  48. _$jscoverage['appenders/gelf.js'][72] = 0;
  49. _$jscoverage['appenders/gelf.js'][74] = 0;
  50. _$jscoverage['appenders/gelf.js'][75] = 0;
  51. _$jscoverage['appenders/gelf.js'][80] = 0;
  52. _$jscoverage['appenders/gelf.js'][81] = 0;
  53. _$jscoverage['appenders/gelf.js'][82] = 0;
  54. _$jscoverage['appenders/gelf.js'][84] = 0;
  55. _$jscoverage['appenders/gelf.js'][85] = 0;
  56. _$jscoverage['appenders/gelf.js'][87] = 0;
  57. _$jscoverage['appenders/gelf.js'][88] = 0;
  58. _$jscoverage['appenders/gelf.js'][93] = 0;
  59. _$jscoverage['appenders/gelf.js'][96] = 0;
  60. _$jscoverage['appenders/gelf.js'][97] = 0;
  61. _$jscoverage['appenders/gelf.js'][98] = 0;
  62. _$jscoverage['appenders/gelf.js'][99] = 0;
  63. _$jscoverage['appenders/gelf.js'][100] = 0;
  64. _$jscoverage['appenders/gelf.js'][102] = 0;
  65. _$jscoverage['appenders/gelf.js'][103] = 0;
  66. _$jscoverage['appenders/gelf.js'][104] = 0;
  67. _$jscoverage['appenders/gelf.js'][105] = 0;
  68. _$jscoverage['appenders/gelf.js'][106] = 0;
  69. _$jscoverage['appenders/gelf.js'][107] = 0;
  70. _$jscoverage['appenders/gelf.js'][110] = 0;
  71. _$jscoverage['appenders/gelf.js'][111] = 0;
  72. _$jscoverage['appenders/gelf.js'][112] = 0;
  73. _$jscoverage['appenders/gelf.js'][116] = 0;
  74. _$jscoverage['appenders/gelf.js'][117] = 0;
  75. _$jscoverage['appenders/gelf.js'][118] = 0;
  76. _$jscoverage['appenders/gelf.js'][119] = 0;
  77. _$jscoverage['appenders/gelf.js'][120] = 0;
  78. _$jscoverage['appenders/gelf.js'][122] = 0;
  79. _$jscoverage['appenders/gelf.js'][123] = 0;
  80. _$jscoverage['appenders/gelf.js'][125] = 0;
  81. _$jscoverage['appenders/gelf.js'][132] = 0;
  82. _$jscoverage['appenders/gelf.js'][133] = 0;
  83. _$jscoverage['appenders/gelf.js'][134] = 0;
  84. _$jscoverage['appenders/gelf.js'][135] = 0;
  85. _$jscoverage['appenders/gelf.js'][137] = 0;
  86. _$jscoverage['appenders/gelf.js'][140] = 0;
  87. _$jscoverage['appenders/gelf.js'][141] = 0;
  88. }
  89. _$jscoverage['appenders/gelf.js'][1]++;
  90. "use strict";
  91. _$jscoverage['appenders/gelf.js'][2]++;
  92. var zlib = require("zlib");
  93. _$jscoverage['appenders/gelf.js'][3]++;
  94. var layouts = require("../layouts");
  95. _$jscoverage['appenders/gelf.js'][4]++;
  96. var levels = require("../levels");
  97. _$jscoverage['appenders/gelf.js'][5]++;
  98. var dgram = require("dgram");
  99. _$jscoverage['appenders/gelf.js'][6]++;
  100. var util = require("util");
  101. _$jscoverage['appenders/gelf.js'][7]++;
  102. var debug = require("../debug")("GELF Appender");
  103. _$jscoverage['appenders/gelf.js'][9]++;
  104. var LOG_EMERG = 0;
  105. _$jscoverage['appenders/gelf.js'][10]++;
  106. var LOG_ALERT = 1;
  107. _$jscoverage['appenders/gelf.js'][11]++;
  108. var LOG_CRIT = 2;
  109. _$jscoverage['appenders/gelf.js'][12]++;
  110. var LOG_ERR = 3;
  111. _$jscoverage['appenders/gelf.js'][13]++;
  112. var LOG_ERROR = 3;
  113. _$jscoverage['appenders/gelf.js'][14]++;
  114. var LOG_WARNING = 4;
  115. _$jscoverage['appenders/gelf.js'][15]++;
  116. var LOG_NOTICE = 5;
  117. _$jscoverage['appenders/gelf.js'][16]++;
  118. var LOG_INFO = 6;
  119. _$jscoverage['appenders/gelf.js'][17]++;
  120. var LOG_DEBUG = 7;
  121. _$jscoverage['appenders/gelf.js'][19]++;
  122. var levelMapping = {};
  123. _$jscoverage['appenders/gelf.js'][20]++;
  124. levelMapping[levels.ALL] = LOG_DEBUG;
  125. _$jscoverage['appenders/gelf.js'][21]++;
  126. levelMapping[levels.TRACE] = LOG_DEBUG;
  127. _$jscoverage['appenders/gelf.js'][22]++;
  128. levelMapping[levels.DEBUG] = LOG_DEBUG;
  129. _$jscoverage['appenders/gelf.js'][23]++;
  130. levelMapping[levels.INFO] = LOG_INFO;
  131. _$jscoverage['appenders/gelf.js'][24]++;
  132. levelMapping[levels.WARN] = LOG_WARNING;
  133. _$jscoverage['appenders/gelf.js'][25]++;
  134. levelMapping[levels.ERROR] = LOG_ERR;
  135. _$jscoverage['appenders/gelf.js'][26]++;
  136. levelMapping[levels.FATAL] = LOG_CRIT;
  137. _$jscoverage['appenders/gelf.js'][37]++;
  138. function gelfAppender(layout, host, port, hostname, facility) {
  139. _$jscoverage['appenders/gelf.js'][38]++;
  140. var config, customFields;
  141. _$jscoverage['appenders/gelf.js'][39]++;
  142. if (typeof host === "object") {
  143. _$jscoverage['appenders/gelf.js'][40]++;
  144. config = host;
  145. _$jscoverage['appenders/gelf.js'][41]++;
  146. host = config.host;
  147. _$jscoverage['appenders/gelf.js'][42]++;
  148. port = config.port;
  149. _$jscoverage['appenders/gelf.js'][43]++;
  150. hostname = config.hostname;
  151. _$jscoverage['appenders/gelf.js'][44]++;
  152. facility = config.facility;
  153. _$jscoverage['appenders/gelf.js'][45]++;
  154. customFields = config.customFields;
  155. }
  156. _$jscoverage['appenders/gelf.js'][48]++;
  157. host = host || "localhost";
  158. _$jscoverage['appenders/gelf.js'][49]++;
  159. port = port || 12201;
  160. _$jscoverage['appenders/gelf.js'][50]++;
  161. hostname = hostname || require("os").hostname();
  162. _$jscoverage['appenders/gelf.js'][51]++;
  163. facility = facility || "nodejs-server";
  164. _$jscoverage['appenders/gelf.js'][52]++;
  165. layout = layout || layouts.messagePassThroughLayout;
  166. _$jscoverage['appenders/gelf.js'][54]++;
  167. var defaultCustomFields = customFields || {};
  168. _$jscoverage['appenders/gelf.js'][56]++;
  169. var client = dgram.createSocket("udp4");
  170. _$jscoverage['appenders/gelf.js'][58]++;
  171. process.on("exit", (function () {
  172. _$jscoverage['appenders/gelf.js'][59]++;
  173. if (client) {
  174. _$jscoverage['appenders/gelf.js'][59]++;
  175. client.close();
  176. }
  177. }));
  178. _$jscoverage['appenders/gelf.js'][69]++;
  179. function addCustomFields(loggingEvent, msg) {
  180. _$jscoverage['appenders/gelf.js'][72]++;
  181. Object.keys(defaultCustomFields).forEach((function (key) {
  182. _$jscoverage['appenders/gelf.js'][74]++;
  183. if (key.match(/^_/) && key !== "_id") {
  184. _$jscoverage['appenders/gelf.js'][75]++;
  185. msg[key] = defaultCustomFields[key];
  186. }
  187. }));
  188. _$jscoverage['appenders/gelf.js'][80]++;
  189. var data = loggingEvent.data;
  190. _$jscoverage['appenders/gelf.js'][81]++;
  191. if (! Array.isArray(data) || data.length === 0) {
  192. _$jscoverage['appenders/gelf.js'][81]++;
  193. return;
  194. }
  195. _$jscoverage['appenders/gelf.js'][82]++;
  196. var firstData = data[0];
  197. _$jscoverage['appenders/gelf.js'][84]++;
  198. if (! firstData.GELF) {
  199. _$jscoverage['appenders/gelf.js'][84]++;
  200. return;
  201. }
  202. _$jscoverage['appenders/gelf.js'][85]++;
  203. Object.keys(firstData).forEach((function (key) {
  204. _$jscoverage['appenders/gelf.js'][87]++;
  205. if (key.match(/^_/) || key !== "_id") {
  206. _$jscoverage['appenders/gelf.js'][88]++;
  207. msg[key] = firstData[key];
  208. }
  209. }));
  210. _$jscoverage['appenders/gelf.js'][93]++;
  211. loggingEvent.data.shift();
  212. }
  213. _$jscoverage['appenders/gelf.js'][96]++;
  214. function preparePacket(loggingEvent) {
  215. _$jscoverage['appenders/gelf.js'][97]++;
  216. var msg = {};
  217. _$jscoverage['appenders/gelf.js'][98]++;
  218. addCustomFields(loggingEvent, msg);
  219. _$jscoverage['appenders/gelf.js'][99]++;
  220. msg.full_message = layout(loggingEvent);
  221. _$jscoverage['appenders/gelf.js'][100]++;
  222. msg.short_message = msg.full_message;
  223. _$jscoverage['appenders/gelf.js'][102]++;
  224. msg.version = "1.0";
  225. _$jscoverage['appenders/gelf.js'][103]++;
  226. msg.timestamp = msg.timestamp || new Date().getTime() / 1000 >> 0;
  227. _$jscoverage['appenders/gelf.js'][104]++;
  228. msg.host = hostname;
  229. _$jscoverage['appenders/gelf.js'][105]++;
  230. msg.level = levelMapping[loggingEvent.level || levels.DEBUG];
  231. _$jscoverage['appenders/gelf.js'][106]++;
  232. msg.facility = facility;
  233. _$jscoverage['appenders/gelf.js'][107]++;
  234. return msg;
  235. }
  236. _$jscoverage['appenders/gelf.js'][110]++;
  237. function sendPacket(packet) {
  238. _$jscoverage['appenders/gelf.js'][111]++;
  239. try {
  240. _$jscoverage['appenders/gelf.js'][112]++;
  241. client.send(packet, 0, packet.length, port, host);
  242. }
  243. catch (e) {
  244. }
  245. }
  246. _$jscoverage['appenders/gelf.js'][116]++;
  247. return (function (loggingEvent) {
  248. _$jscoverage['appenders/gelf.js'][117]++;
  249. var message = preparePacket(loggingEvent);
  250. _$jscoverage['appenders/gelf.js'][118]++;
  251. zlib.gzip(new Buffer(JSON.stringify(message)), (function (err, packet) {
  252. _$jscoverage['appenders/gelf.js'][119]++;
  253. if (err) {
  254. _$jscoverage['appenders/gelf.js'][120]++;
  255. console.error(err.stack);
  256. }
  257. else {
  258. _$jscoverage['appenders/gelf.js'][122]++;
  259. if (packet.length > 8192) {
  260. _$jscoverage['appenders/gelf.js'][123]++;
  261. debug("Message packet length (" + packet.length + ") is larger than 8k. Not sending");
  262. }
  263. else {
  264. _$jscoverage['appenders/gelf.js'][125]++;
  265. sendPacket(packet);
  266. }
  267. }
  268. }));
  269. });
  270. }
  271. _$jscoverage['appenders/gelf.js'][132]++;
  272. function configure(config) {
  273. _$jscoverage['appenders/gelf.js'][133]++;
  274. var layout;
  275. _$jscoverage['appenders/gelf.js'][134]++;
  276. if (config.layout) {
  277. _$jscoverage['appenders/gelf.js'][135]++;
  278. layout = layouts.layout(config.layout.type, config.layout);
  279. }
  280. _$jscoverage['appenders/gelf.js'][137]++;
  281. return gelfAppender(layout, config);
  282. }
  283. _$jscoverage['appenders/gelf.js'][140]++;
  284. exports.appender = gelfAppender;
  285. _$jscoverage['appenders/gelf.js'][141]++;
  286. exports.configure = configure;
  287. _$jscoverage['appenders/gelf.js'].source = ["\"use strict\";","var zlib = require('zlib');","var layouts = require('../layouts');","var levels = require('../levels');","var dgram = require('dgram');","var util = require('util');","var debug = require('../debug')('GELF Appender');","","var LOG_EMERG=0; // system is unusable","var LOG_ALERT=1; // action must be taken immediately","var LOG_CRIT=2; // critical conditions","var LOG_ERR=3; // error conditions","var LOG_ERROR=3; // because people WILL typo","var LOG_WARNING=4; // warning conditions","var LOG_NOTICE=5; // normal, but significant, condition","var LOG_INFO=6; // informational message","var LOG_DEBUG=7; // debug-level message","","var levelMapping = {};","levelMapping[levels.ALL] = LOG_DEBUG;","levelMapping[levels.TRACE] = LOG_DEBUG;","levelMapping[levels.DEBUG] = LOG_DEBUG;","levelMapping[levels.INFO] = LOG_INFO;","levelMapping[levels.WARN] = LOG_WARNING;","levelMapping[levels.ERROR] = LOG_ERR;","levelMapping[levels.FATAL] = LOG_CRIT;","","/**"," * GELF appender that supports sending UDP packets to a GELF compatible server such as Graylog"," *"," * @param layout a function that takes a logevent and returns a string (defaults to none)."," * @param host - host to which to send logs (default:localhost)"," * @param port - port at which to send logs to (default:12201)"," * @param hostname - hostname of the current host (default:os hostname)"," * @param facility - facility to log to (default:nodejs-server)"," */","function gelfAppender (layout, host, port, hostname, facility) {"," var config, customFields;"," if (typeof(host) === 'object') {"," config = host;"," host = config.host;"," port = config.port;"," hostname = config.hostname;"," facility = config.facility;"," customFields = config.customFields;"," }"," "," host = host || 'localhost';"," port = port || 12201;"," hostname = hostname || require('os').hostname();"," facility = facility || 'nodejs-server';"," layout = layout || layouts.messagePassThroughLayout;",""," var defaultCustomFields = customFields || {};"," "," var client = dgram.createSocket(\"udp4\");"," "," process.on('exit', function() {"," if (client) client.close();"," });",""," /**"," * Add custom fields (start with underscore ) "," * - if the first object passed to the logger contains 'GELF' field, "," * copy the underscore fields to the message"," * @param loggingEvent"," * @param msg"," */"," function addCustomFields(loggingEvent, msg){",""," /* append defaultCustomFields firsts */"," Object.keys(defaultCustomFields).forEach(function(key) {"," // skip _id field for graylog2, skip keys not starts with UNDERSCORE"," if (key.match(/^_/) && key !== \"_id\") { "," msg[key] = defaultCustomFields[key];"," }"," });",""," /* append custom fields per message */"," var data = loggingEvent.data;"," if (!Array.isArray(data) || data.length === 0) return;"," var firstData = data[0];"," "," if (!firstData.GELF) return; // identify with GELF field defined"," Object.keys(firstData).forEach(function(key) {"," // skip _id field for graylog2, skip keys not starts with UNDERSCORE"," if (key.match(/^_/) || key !== \"_id\") { "," msg[key] = firstData[key];"," }"," });"," "," /* the custom field object should be removed, so it will not be looged by the later appenders */"," loggingEvent.data.shift(); "," }"," "," function preparePacket(loggingEvent) {"," var msg = {};"," addCustomFields(loggingEvent, msg);"," msg.full_message = layout(loggingEvent);"," msg.short_message = msg.full_message;"," "," msg.version=\"1.0\";"," msg.timestamp = msg.timestamp || new Date().getTime() / 1000 >> 0;"," msg.host = hostname;"," msg.level = levelMapping[loggingEvent.level || levels.DEBUG];"," msg.facility = facility;"," return msg;"," }"," "," function sendPacket(packet) {"," try {"," client.send(packet, 0, packet.length, port, host);"," } catch(e) {}"," }",""," return function(loggingEvent) {"," var message = preparePacket(loggingEvent);"," zlib.gzip(new Buffer(JSON.stringify(message)), function(err, packet) {"," if (err) {"," console.error(err.stack);"," } else {"," if (packet.length > 8192) {"," debug(\"Message packet length (\" + packet.length + \") is larger than 8k. Not sending\");"," } else {"," sendPacket(packet);"," }"," }"," });"," };","}","","function configure(config) {"," var layout;"," if (config.layout) {"," layout = layouts.layout(config.layout.type, config.layout);"," }"," return gelfAppender(layout, config);","}","","exports.appender = gelfAppender;","exports.configure = configure;"];