connect-logger.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /* automatically generated by JSCoverage - do not edit */
  2. if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
  3. if (! _$jscoverage['connect-logger.js']) {
  4. _$jscoverage['connect-logger.js'] = [];
  5. _$jscoverage['connect-logger.js'][1] = 0;
  6. _$jscoverage['connect-logger.js'][2] = 0;
  7. _$jscoverage['connect-logger.js'][3] = 0;
  8. _$jscoverage['connect-logger.js'][34] = 0;
  9. _$jscoverage['connect-logger.js'][35] = 0;
  10. _$jscoverage['connect-logger.js'][36] = 0;
  11. _$jscoverage['connect-logger.js'][37] = 0;
  12. _$jscoverage['connect-logger.js'][38] = 0;
  13. _$jscoverage['connect-logger.js'][40] = 0;
  14. _$jscoverage['connect-logger.js'][43] = 0;
  15. _$jscoverage['connect-logger.js'][48] = 0;
  16. _$jscoverage['connect-logger.js'][50] = 0;
  17. _$jscoverage['connect-logger.js'][53] = 0;
  18. _$jscoverage['connect-logger.js'][54] = 0;
  19. _$jscoverage['connect-logger.js'][56] = 0;
  20. _$jscoverage['connect-logger.js'][63] = 0;
  21. _$jscoverage['connect-logger.js'][66] = 0;
  22. _$jscoverage['connect-logger.js'][67] = 0;
  23. _$jscoverage['connect-logger.js'][68] = 0;
  24. _$jscoverage['connect-logger.js'][69] = 0;
  25. _$jscoverage['connect-logger.js'][70] = 0;
  26. _$jscoverage['connect-logger.js'][73] = 0;
  27. _$jscoverage['connect-logger.js'][74] = 0;
  28. _$jscoverage['connect-logger.js'][75] = 0;
  29. _$jscoverage['connect-logger.js'][76] = 0;
  30. _$jscoverage['connect-logger.js'][78] = 0;
  31. _$jscoverage['connect-logger.js'][83] = 0;
  32. _$jscoverage['connect-logger.js'][84] = 0;
  33. _$jscoverage['connect-logger.js'][85] = 0;
  34. _$jscoverage['connect-logger.js'][86] = 0;
  35. _$jscoverage['connect-logger.js'][87] = 0;
  36. _$jscoverage['connect-logger.js'][88] = 0;
  37. _$jscoverage['connect-logger.js'][89] = 0;
  38. _$jscoverage['connect-logger.js'][90] = 0;
  39. _$jscoverage['connect-logger.js'][92] = 0;
  40. _$jscoverage['connect-logger.js'][99] = 0;
  41. _$jscoverage['connect-logger.js'][113] = 0;
  42. _$jscoverage['connect-logger.js'][114] = 0;
  43. _$jscoverage['connect-logger.js'][134] = 0;
  44. _$jscoverage['connect-logger.js'][136] = 0;
  45. _$jscoverage['connect-logger.js'][169] = 0;
  46. _$jscoverage['connect-logger.js'][170] = 0;
  47. _$jscoverage['connect-logger.js'][172] = 0;
  48. _$jscoverage['connect-logger.js'][173] = 0;
  49. _$jscoverage['connect-logger.js'][174] = 0;
  50. _$jscoverage['connect-logger.js'][177] = 0;
  51. _$jscoverage['connect-logger.js'][178] = 0;
  52. _$jscoverage['connect-logger.js'][181] = 0;
  53. _$jscoverage['connect-logger.js'][182] = 0;
  54. _$jscoverage['connect-logger.js'][184] = 0;
  55. _$jscoverage['connect-logger.js'][187] = 0;
  56. _$jscoverage['connect-logger.js'][191] = 0;
  57. _$jscoverage['connect-logger.js'][194] = 0;
  58. }
  59. _$jscoverage['connect-logger.js'][1]++;
  60. "use strict";
  61. _$jscoverage['connect-logger.js'][2]++;
  62. var levels = require("./levels");
  63. _$jscoverage['connect-logger.js'][3]++;
  64. var DEFAULT_FORMAT = ":remote-addr - - \":method :url HTTP/:http-version\" :status :content-length \":referrer\" \":user-agent\"";
  65. _$jscoverage['connect-logger.js'][34]++;
  66. function getLogger(logger4js, options) {
  67. _$jscoverage['connect-logger.js'][35]++;
  68. if ("object" == typeof options) {
  69. _$jscoverage['connect-logger.js'][36]++;
  70. options = options || {};
  71. }
  72. else {
  73. _$jscoverage['connect-logger.js'][37]++;
  74. if (options) {
  75. _$jscoverage['connect-logger.js'][38]++;
  76. options = {format: options};
  77. }
  78. else {
  79. _$jscoverage['connect-logger.js'][40]++;
  80. options = {};
  81. }
  82. }
  83. _$jscoverage['connect-logger.js'][43]++;
  84. var thislogger = logger4js, level = levels.toLevel(options.level, levels.INFO), fmt = options.format || DEFAULT_FORMAT, nolog = options.nolog? createNoLogCondition(options.nolog): null;
  85. _$jscoverage['connect-logger.js'][48]++;
  86. return (function (req, res, next) {
  87. _$jscoverage['connect-logger.js'][50]++;
  88. if (req._logging) {
  89. _$jscoverage['connect-logger.js'][50]++;
  90. return next();
  91. }
  92. _$jscoverage['connect-logger.js'][53]++;
  93. if (nolog && nolog.test(req.originalUrl)) {
  94. _$jscoverage['connect-logger.js'][53]++;
  95. return next();
  96. }
  97. _$jscoverage['connect-logger.js'][54]++;
  98. if (thislogger.isLevelEnabled(level) || options.level === "auto") {
  99. _$jscoverage['connect-logger.js'][56]++;
  100. var start = new Date(), statusCode, writeHead = res.writeHead, end = res.end, url = req.originalUrl;
  101. _$jscoverage['connect-logger.js'][63]++;
  102. req._logging = true;
  103. _$jscoverage['connect-logger.js'][66]++;
  104. res.writeHead = (function (code, headers) {
  105. _$jscoverage['connect-logger.js'][67]++;
  106. res.writeHead = writeHead;
  107. _$jscoverage['connect-logger.js'][68]++;
  108. res.writeHead(code, headers);
  109. _$jscoverage['connect-logger.js'][69]++;
  110. res.__statusCode = statusCode = code;
  111. _$jscoverage['connect-logger.js'][70]++;
  112. res.__headers = headers || {};
  113. _$jscoverage['connect-logger.js'][73]++;
  114. if (options.level === "auto") {
  115. _$jscoverage['connect-logger.js'][74]++;
  116. level = levels.INFO;
  117. _$jscoverage['connect-logger.js'][75]++;
  118. if (code >= 300) {
  119. _$jscoverage['connect-logger.js'][75]++;
  120. level = levels.WARN;
  121. }
  122. _$jscoverage['connect-logger.js'][76]++;
  123. if (code >= 400) {
  124. _$jscoverage['connect-logger.js'][76]++;
  125. level = levels.ERROR;
  126. }
  127. }
  128. else {
  129. _$jscoverage['connect-logger.js'][78]++;
  130. level = levels.toLevel(options.level, levels.INFO);
  131. }
  132. });
  133. _$jscoverage['connect-logger.js'][83]++;
  134. res.end = (function (chunk, encoding) {
  135. _$jscoverage['connect-logger.js'][84]++;
  136. res.end = end;
  137. _$jscoverage['connect-logger.js'][85]++;
  138. res.end(chunk, encoding);
  139. _$jscoverage['connect-logger.js'][86]++;
  140. res.responseTime = new Date() - start;
  141. _$jscoverage['connect-logger.js'][87]++;
  142. if (thislogger.isLevelEnabled(level)) {
  143. _$jscoverage['connect-logger.js'][88]++;
  144. if (typeof fmt === "function") {
  145. _$jscoverage['connect-logger.js'][89]++;
  146. var line = fmt(req, res, (function (str) {
  147. _$jscoverage['connect-logger.js'][89]++;
  148. return format(str, req, res);
  149. }));
  150. _$jscoverage['connect-logger.js'][90]++;
  151. if (line) {
  152. _$jscoverage['connect-logger.js'][90]++;
  153. thislogger.log(level, line);
  154. }
  155. }
  156. else {
  157. _$jscoverage['connect-logger.js'][92]++;
  158. thislogger.log(level, format(fmt, req, res));
  159. }
  160. }
  161. });
  162. }
  163. _$jscoverage['connect-logger.js'][99]++;
  164. next();
  165. });
  166. }
  167. _$jscoverage['connect-logger.js'][113]++;
  168. function format(str, req, res) {
  169. _$jscoverage['connect-logger.js'][114]++;
  170. return str.replace(":url", req.originalUrl).replace(":method", req.method).replace(":status", res.__statusCode || res.statusCode).replace(":response-time", res.responseTime).replace(":date", new Date().toUTCString()).replace(":referrer", req.headers.referer || req.headers.referrer || "").replace(":http-version", req.httpVersionMajor + "." + req.httpVersionMinor).replace(":remote-addr", req.socket && (req.socket.remoteAddress || (req.socket.socket && req.socket.socket.remoteAddress))).replace(":user-agent", req.headers["user-agent"] || "").replace(":content-length", (res._headers && res._headers["content-length"]) || (res.__headers && res.__headers["Content-Length"]) || "-").replace(/:req\[([^\]]+)\]/g, (function (_, field) {
  171. _$jscoverage['connect-logger.js'][134]++;
  172. return req.headers[field.toLowerCase()];
  173. })).replace(/:res\[([^\]]+)\]/g, (function (_, field) {
  174. _$jscoverage['connect-logger.js'][136]++;
  175. return res._headers? (res._headers[field.toLowerCase()] || res.__headers[field]): (res.__headers && res.__headers[field]);
  176. }));
  177. }
  178. _$jscoverage['connect-logger.js'][169]++;
  179. function createNoLogCondition(nolog) {
  180. _$jscoverage['connect-logger.js'][170]++;
  181. var regexp = null;
  182. _$jscoverage['connect-logger.js'][172]++;
  183. if (nolog) {
  184. _$jscoverage['connect-logger.js'][173]++;
  185. if (nolog instanceof RegExp) {
  186. _$jscoverage['connect-logger.js'][174]++;
  187. regexp = nolog;
  188. }
  189. _$jscoverage['connect-logger.js'][177]++;
  190. if (typeof nolog === "string") {
  191. _$jscoverage['connect-logger.js'][178]++;
  192. regexp = new RegExp(nolog);
  193. }
  194. _$jscoverage['connect-logger.js'][181]++;
  195. if (Array.isArray(nolog)) {
  196. _$jscoverage['connect-logger.js'][182]++;
  197. var regexpsAsStrings = nolog.map((function convertToStrings(o) {
  198. _$jscoverage['connect-logger.js'][184]++;
  199. return o.source? o.source: o;
  200. }));
  201. _$jscoverage['connect-logger.js'][187]++;
  202. regexp = new RegExp(regexpsAsStrings.join("|"));
  203. }
  204. }
  205. _$jscoverage['connect-logger.js'][191]++;
  206. return regexp;
  207. }
  208. _$jscoverage['connect-logger.js'][194]++;
  209. exports.connectLogger = getLogger;
  210. _$jscoverage['connect-logger.js'].source = ["\"use strict\";","var levels = require(\"./levels\");","var DEFAULT_FORMAT = ':remote-addr - -' + "," ' \":method :url HTTP/:http-version\"' + "," ' :status :content-length \":referrer\"' + "," ' \":user-agent\"';","/**"," * Log requests with the given `options` or a `format` string."," *"," * Options:"," *"," * - `format` Format string, see below for tokens"," * - `level` A log4js levels instance. Supports also 'auto'"," *"," * Tokens:"," *"," * - `:req[header]` ex: `:req[Accept]`"," * - `:res[header]` ex: `:res[Content-Length]`"," * - `:http-version`"," * - `:response-time`"," * - `:remote-addr`"," * - `:date`"," * - `:method`"," * - `:url`"," * - `:referrer`"," * - `:user-agent`"," * - `:status`"," *"," * @param {String|Function|Object} format or options"," * @return {Function}"," * @api public"," */","","function getLogger(logger4js, options) {","\tif ('object' == typeof options) {","\t\toptions = options || {};","\t} else if (options) {","\t\toptions = { format: options };","\t} else {","\t\toptions = {};","\t}","","\tvar thislogger = logger4js"," , level = levels.toLevel(options.level, levels.INFO)"," , fmt = options.format || DEFAULT_FORMAT"," , nolog = options.nolog ? createNoLogCondition(options.nolog) : null;",""," return function (req, res, next) {"," // mount safety"," if (req._logging) return next();","","\t\t// nologs","\t\tif (nolog && nolog.test(req.originalUrl)) return next();","\t\tif (thislogger.isLevelEnabled(level) || options.level === 'auto') {"," ","\t\t\tvar start = new Date()","\t\t\t, statusCode","\t\t\t, writeHead = res.writeHead","\t\t\t, end = res.end","\t\t\t, url = req.originalUrl;","","\t\t\t// flag as logging","\t\t\treq._logging = true;"," ","\t\t\t// proxy for statusCode.","\t\t\tres.writeHead = function(code, headers){","\t\t\t\tres.writeHead = writeHead;","\t\t\t\tres.writeHead(code, headers);","\t\t\t\tres.__statusCode = statusCode = code;","\t\t\t\tres.__headers = headers || {};","","\t\t\t\t//status code response level handling","\t\t\t\tif(options.level === 'auto'){","\t\t\t\t\tlevel = levels.INFO;","\t\t\t\t\tif(code >= 300) level = levels.WARN;","\t\t\t\t\tif(code >= 400) level = levels.ERROR;","\t\t\t\t} else {","\t\t\t\t\tlevel = levels.toLevel(options.level, levels.INFO);","\t\t\t\t}","\t\t\t};"," ","\t\t\t// proxy end to output a line to the provided logger.","\t\t\tres.end = function(chunk, encoding) {","\t\t\t\tres.end = end;","\t\t\t\tres.end(chunk, encoding);","\t\t\t\tres.responseTime = new Date() - start;","\t\t\t\tif (thislogger.isLevelEnabled(level)) {","\t\t\t\t\tif (typeof fmt === 'function') {","\t\t\t\t\t\tvar line = fmt(req, res, function(str){ return format(str, req, res); });","\t\t\t\t\t\tif (line) thislogger.log(level, line);","\t\t\t\t\t} else {","\t\t\t\t\t\tthislogger.log(level, format(fmt, req, res));","\t\t\t\t\t}","\t\t\t\t}","\t\t\t};","\t\t}"," "," //ensure next gets always called"," next();"," };","}","","/**"," * Return formatted log line."," *"," * @param {String} str"," * @param {IncomingMessage} req"," * @param {ServerResponse} res"," * @return {String}"," * @api private"," */","","function format(str, req, res) {","\treturn str"," .replace(':url', req.originalUrl)"," .replace(':method', req.method)"," .replace(':status', res.__statusCode || res.statusCode)"," .replace(':response-time', res.responseTime)"," .replace(':date', new Date().toUTCString())"," .replace(':referrer', req.headers.referer || req.headers.referrer || '')"," .replace(':http-version', req.httpVersionMajor + '.' + req.httpVersionMinor)"," .replace("," ':remote-addr', "," req.socket && "," (req.socket.remoteAddress || (req.socket.socket && req.socket.socket.remoteAddress))"," )"," .replace(':user-agent', req.headers['user-agent'] || '')"," .replace("," ':content-length', "," (res._headers && res._headers['content-length']) || "," (res.__headers && res.__headers['Content-Length']) || "," '-'"," )"," .replace(/:req\\[([^\\]]+)\\]/g, function(_, field){ return req.headers[field.toLowerCase()]; })"," .replace(/:res\\[([^\\]]+)\\]/g, function(_, field){"," return res._headers ? "," (res._headers[field.toLowerCase()] || res.__headers[field])"," : (res.__headers && res.__headers[field]);"," });","}","","/**"," * Return RegExp Object about nolog"," *"," * @param {String} nolog"," * @return {RegExp}"," * @api private"," *"," * syntax"," * 1. String"," * 1.1 \"\\\\.gif\""," * NOT LOGGING http://example.com/hoge.gif and http://example.com/hoge.gif?fuga"," * LOGGING http://example.com/hoge.agif"," * 1.2 in \"\\\\.gif|\\\\.jpg$\""," * NOT LOGGING http://example.com/hoge.gif and "," * http://example.com/hoge.gif?fuga and http://example.com/hoge.jpg?fuga"," * LOGGING http://example.com/hoge.agif, "," * http://example.com/hoge.ajpg and http://example.com/hoge.jpg?hoge"," * 1.3 in \"\\\\.(gif|jpe?g|png)$\""," * NOT LOGGING http://example.com/hoge.gif and http://example.com/hoge.jpeg"," * LOGGING http://example.com/hoge.gif?uid=2 and http://example.com/hoge.jpg?pid=3"," * 2. RegExp"," * 2.1 in /\\.(gif|jpe?g|png)$/"," * SAME AS 1.3"," * 3. Array"," * 3.1 [\"\\\\.jpg$\", \"\\\\.png\", \"\\\\.gif\"]"," * SAME AS \"\\\\.jpg|\\\\.png|\\\\.gif\""," */","function createNoLogCondition(nolog) {"," var regexp = null;","","\tif (nolog) {"," if (nolog instanceof RegExp) {"," regexp = nolog;"," } "," "," if (typeof nolog === 'string') {"," regexp = new RegExp(nolog);"," }"," "," if (Array.isArray(nolog)) {"," var regexpsAsStrings = nolog.map("," function convertToStrings(o) { "," return o.source ? o.source : o;"," }"," );"," regexp = new RegExp(regexpsAsStrings.join('|'));"," }"," }",""," return regexp;","}","","exports.connectLogger = getLogger;"];