{"_id":"express-winston-middleware","_rev":"95-5e5ec6dcdecf0c292ee017667a6513d4","name":"express-winston-middleware","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"express-winston-middleware","version":"0.0.1","keywords":["test","assertion","assert","chai","jquery"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.1","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"ad72f07f28f1a973da689542c213ff385dd5437b","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.1.tgz","integrity":"sha512-rCUEMGY+LWp3WqynuM4Z7UESmFTh+3UceY0kAakYAahtPUrSFpuKr7ZyYbEdk60MpNwmZP1DqbsgN5kQDYwdrQ==","signatures":[{"sig":"MEUCIEXcOfUhqHy1+LhQMJ5uPtW8Czn6ayfS1OoAsZDn4jVkAiEAoWaLEADc4tScWtBMdMJ7zVE5bGzDqZP0OPRNjplORlQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"./node_modules/.bin/grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"https://github.com/FormidableLabs/express-winston-middleware","type":"git"},"_npmVersion":"1.3.14","description":"Winston log wrappers for Express.","directories":{},"dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"~0.4.4","grunt":"~0.4.1","marked":"~0.2.10","winston":"~0.7.2","grunt-cli":"~0.1.9","grunt-contrib-jade":"~0.8.0","grunt-contrib-watch":"~0.5.3","grunt-contrib-jshint":"~0.7.0"},"peerDependencies":{"winston":"*"}},"0.0.2":{"name":"express-winston-middleware","version":"0.0.2","keywords":["test","assertion","assert","chai","jquery"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.2","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"b4b9ec5a04938761ca5313cbc132c52fdae72933","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.2.tgz","integrity":"sha512-59IjjJt40cy5lK1t7QIAQ7QCbp0dnPHNOwmvDhNKOYu6Xh+zhmG15IaPdW1VvIYQ4+TRj8NcXDqFGzemb/QkPQ==","signatures":[{"sig":"MEUCIQDa577f0KgqL9B0ZcBsmkv3kS30vgSDqCGEU0OZX/C+rwIgZfrSP9yWs8Dd0uL8v6P8rMo6iRgdBtzj5MukXeSsTTQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"./node_modules/.bin/grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"https://github.com/FormidableLabs/express-winston-middleware","type":"git"},"_npmVersion":"1.3.14","description":"Winston log wrappers for Express.","directories":{},"dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"~0.4.4","grunt":"~0.4.1","marked":"~0.2.10","winston":"~0.7.2","grunt-cli":"~0.1.9","grunt-contrib-jade":"~0.8.0","grunt-contrib-watch":"~0.5.3","grunt-contrib-jshint":"~0.7.0"},"peerDependencies":{"winston":"*"}},"0.0.3":{"name":"express-winston-middleware","version":"0.0.3","keywords":["test","assertion","assert","chai","jquery"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.3","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"9cc54320904d55db9387a38de7e8e207c0e0eb5c","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.3.tgz","integrity":"sha512-5p2lAYqPHQCKp3QCLdldmiwclWr+G07R+F6XBfAiH1JLPSOq12Q0kMaJpzVtIyNfWGip2s9wPWtSV1te2UmoMg==","signatures":[{"sig":"MEQCID+PT7Iv3phhceOx25U6gstBAoGjybAu9hiGedxSU+aLAiAiWjmpwBj7bXVjuyS6PB451BJyo5hIwQHheJ+5UZPWuw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"./node_modules/.bin/grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"https://github.com/FormidableLabs/express-winston-middleware","type":"git"},"_npmVersion":"1.3.14","description":"Winston log wrappers for Express.","directories":{},"dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"~0.4.4","chai":"~1.8.1","grunt":"~0.4.1","mocha":"~1.15.1","sinon":"~1.7.3","marked":"~0.2.10","winston":"~0.7.2","grunt-cli":"~0.1.9","sinon-chai":"~2.4.0","grunt-mocha-test":"~0.8.1","grunt-contrib-jade":"~0.8.0","grunt-contrib-watch":"~0.5.3","grunt-contrib-jshint":"~0.7.0"},"peerDependencies":{"winston":"*"}},"0.0.4":{"name":"express-winston-middleware","version":"0.0.4","keywords":["test","assertion","assert","chai","jquery"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.4","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"e4a03e6a5beba5785f7646a7744199782e22d7a4","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.4.tgz","integrity":"sha512-nu0imWzbKZDaV/71hPiZbO6uKXATLoAfbzs5QohHZgrkCZfDPxMKN/pFDyDyHFUFGemble66DTVSlOfG31H9Yw==","signatures":[{"sig":"MEUCIDxCAvPltQspetW+G9wq7RipUDQj0Znq5H4ymr5z1u6HAiEA0YYgrlmh+G1LS1xR3CtM1RDx1Uw/YiugkBVUtAw1T30=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"e4a03e6a5beba5785f7646a7744199782e22d7a4","gitHead":"9a0a8663b357ddfad739f25ea3542b18f2662618","scripts":{"test":"grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"https://github.com/FormidableLabs/express-winston-middleware","type":"git"},"_npmVersion":"1.4.28","description":"Winston log wrappers for Express.","directories":{},"dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"~0.4.4","chai":"~1.8.1","grunt":"~0.4.1","mocha":"~1.15.1","sinon":"~1.7.3","marked":"~0.2.10","express":"~3.4.7","winston":"~0.7.2","grunt-cli":"~0.1.9","sinon-chai":"~2.4.0","grunt-mocha-test":"~0.8.1","grunt-contrib-jade":"~0.8.0","grunt-contrib-watch":"~0.5.3","grunt-contrib-jshint":"~0.7.0"},"peerDependencies":{"winston":"*"}},"0.0.5":{"name":"express-winston-middleware","version":"0.0.5","keywords":["test","assertion","assert","chai","jquery"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.5","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"1528e26df26b8aaf0b46c4d3814af6ca1e5df50e","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.5.tgz","integrity":"sha512-hxouqcfWHfRwyP0LYkXKJBjg9uncjcbRdsDzOan32nUeCygAINflEp1cBJIOW/SjAMg/6dMwNa23WF8FPBNikA==","signatures":[{"sig":"MEQCIQCqwuN+FrQm8MdC+uoJfLqGj2sXyTiiRUBbQ+tuRRn3FwIfO7q+zS84ulozx220aAjueNlzGvi/dHwAK+zkU94Qlw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"1528e26df26b8aaf0b46c4d3814af6ca1e5df50e","gitHead":"236124424b65f83c702a5bfc68bb935d649542b6","scripts":{"test":"grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"https://github.com/FormidableLabs/express-winston-middleware","type":"git"},"_npmVersion":"2.7.4","description":"Winston log wrappers for Express.","directories":{},"_nodeVersion":"0.10.38","dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"^0.4.4","chai":"^1.8.1","grunt":"^0.4.1","mocha":"^1.15.1","sinon":"^1.7.3","marked":"^0.2.10","express":"^3.4.7","winston":"^0.9.0","grunt-cli":"^0.1.9","sinon-chai":"^2.4.0","grunt-mocha-test":"^0.8.1","grunt-contrib-jade":"^0.8.0","grunt-contrib-watch":"^0.5.3","grunt-contrib-jshint":"^0.7.0"},"peerDependencies":{"winston":"*"}},"0.0.6":{"name":"express-winston-middleware","version":"0.0.6","keywords":["express","winston","log"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.0.6","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware#readme","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"34705a7f507c76507bd2a100ac3ec2daa50e159b","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.0.6.tgz","integrity":"sha512-K6DiOj80Nt91j0fWh7Du35l19objXQWxmOQmbE6jMMW6jeX3W+/rRf+K++ilepips0jEg7HBZwpDKub0NvySdA==","signatures":[{"sig":"MEQCIHdhaRiThYAzl/m21wIqiPPm0uv6q8KV6oi3/ZI4P9SNAiASibHcLxRq7OFWbozg/eBdnj+BIjPtyH3ae4tyTBuQmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"34705a7f507c76507bd2a100ac3ec2daa50e159b","gitHead":"399ea0852c8ede1f18520e2a4014bc2fd5bbd2b8","scripts":{"test":"grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"git+https://github.com/FormidableLabs/express-winston-middleware.git","type":"git"},"_npmVersion":"2.13.3","description":"Winston log wrappers for Express.","directories":{},"_nodeVersion":"0.10.40","dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"^0.4.4","chai":"^1.8.1","grunt":"^0.4.1","mocha":"^1.15.1","sinon":"^1.7.3","marked":"^0.2.10","express":"^3.4.7","winston":"^0.9.0","grunt-cli":"^0.1.9","sinon-chai":"^2.4.0","grunt-mocha-test":"^0.8.1","grunt-contrib-jade":"^0.8.0","grunt-contrib-watch":"^0.5.3","grunt-contrib-jshint":"^0.7.0"},"peerDependencies":{"winston":"*"}},"0.1.0":{"name":"express-winston-middleware","version":"0.1.0","keywords":["express","winston","log"],"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","_id":"express-winston-middleware@0.1.0","maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"homepage":"https://github.com/FormidableLabs/express-winston-middleware#readme","bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"dist":{"shasum":"52516ede58c63d6e0ffed779e2ecfbc038ea4988","tarball":"https://registry.npmjs.org/express-winston-middleware/-/express-winston-middleware-0.1.0.tgz","integrity":"sha512-0d/7HqG5rqxNJlky9yBhiiKGC/PJkG7o/UMxDP++JnAvQTjg9csWK85AGO5gJlQdSqFoNb7Sm/YsmkGolwELTw==","signatures":[{"sig":"MEUCIQDw5SxH6hftnUAajoAK2MZm3aX4WuTobADncI2t+HOFXAIgJf/fAL4Yq7BMkJS1FhQCcFafRcK8n7AWj3uSr5K4Wg4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"52516ede58c63d6e0ffed779e2ecfbc038ea4988","gitHead":"4f2de0ca343b274102c1c259dc49361e0757ee2c","scripts":{"test":"grunt check"},"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"repository":{"url":"git+https://github.com/FormidableLabs/express-winston-middleware.git","type":"git"},"_npmVersion":"2.14.14","description":"Winston log wrappers for Express.","directories":{},"_nodeVersion":"0.10.41","dependencies":{"lodash":"2.4.0"},"devDependencies":{"dox":"^0.4.4","chai":"^1.8.1","grunt":"^0.4.1","mocha":"^1.15.1","sinon":"^1.7.3","marked":"^0.2.10","express":"^3.4.7","winston":"^0.9.0","grunt-cli":"^0.1.9","sinon-chai":"^2.4.0","grunt-mocha-test":"^0.8.1","grunt-contrib-jade":"^0.8.0","grunt-contrib-watch":"^0.5.3","grunt-contrib-jshint":"^0.7.0"},"peerDependencies":{"winston":"*"},"_npmOperationalInternal":{"tmp":"tmp/express-winston-middleware-0.1.0.tgz_1465401950941_0.32596061239019036","host":"packages-16-east.internal.npmjs.com"}}},"time":{"created":"2013-12-01T17:51:26.629Z","modified":"2026-07-20T21:09:10.762Z","0.0.1":"2013-12-01T17:51:28.078Z","0.0.2":"2013-12-02T04:30:25.687Z","0.0.3":"2013-12-03T16:30:26.845Z","0.0.4":"2014-12-02T23:27:25.385Z","0.0.5":"2015-04-01T16:34:08.427Z","0.0.6":"2015-10-21T03:28:09.657Z","0.1.0":"2016-06-08T16:05:54.527Z"},"bugs":{"url":"https://github.com/FormidableLabs/express-winston-middleware/issues"},"author":{"name":"Ryan Roemer","email":"ryan.roemer@formidablelabs.com"},"license":"MIT","homepage":"https://github.com/FormidableLabs/express-winston-middleware#readme","keywords":["express","winston","log"],"repository":{"url":"git+https://github.com/FormidableLabs/express-winston-middleware.git","type":"git"},"description":"Winston log wrappers for Express.","maintainers":[{"email":"sarahmichelleegan@gmail.com","name":"sarmeyer"},{"email":"mariano.martinez@formidable.com","name":"mariano-formidable"},{"email":"ryan@loose-bits.com","name":"ryan.roemer"},{"email":"admin@formidablelabs.com","name":"formidable-owner"},{"email":"npm@formidablelabs.com","name":"formidablelabs"},{"email":"sarah.wright@formidable.com","name":"sarahformidable"},{"email":"senesealessandro@gmail.com","name":"ceceppa"}],"readme":"Winston Middleware for Express\n==============================\n\n[Winston][winston] log wrappers and middleware for [Express][express].\n\n## Usage\n\nYou can install `express-winston-middleware` using [NPM][npm]:\n\n```\n$ npm install express-winston-middleware\n```\n\nFrom there, you can create a `Log` instance or use the `request` Express\nmiddleware.\n\n### Examples\n\nSee the [`examples`](./examples) directory for some basic use cases.\n\n### Logger\n\nThe `Log` logger class internally creates and wraps a Winston logger. You\ncan create one with:\n\n```js\nvar winston = require(\"winston\");\nvar Log = require(\"express-winston-middleware\").Log;\n\n// Create logger with Console transport and \"foo\" metadata item.\nvar log = new Log({\n  transports: [\n    new (winston.transports.Console)({ json: true })\n  ]\n}, {\n  // Metadata to add to each log response.\n  foo: \"bar\"\n});\n\n// Log something.\nlog.info(\"Hello World!\");\n```\n\nwhich produces the following output:\n\n```js\n{\n  \"date\": \"2013-12-01T23:29:48.035Z\",\n  \"env\": \"development\",\n  \"server\": {\n    \"id\": \"m\",\n    \"pid\": 24638,\n    \"hostName\": \"titan.local\"\n  },\n  \"foo\": \"bar\",\n  \"level\": \"info\",\n  \"message\": \"Hello World!\"\n}\n```\n\n### Express Middleware\n\nThe `request` middleware is added to your Express setup like:\n\n```js\nvar express = require(\"express\");\nvar app = express(),\nvar winMid = require(\"express-winston-middleware\");\n\n/* ... */\n\n// Same options and meta as for the `Log` class.\napp.use(new winMid.request({\n  transports: [\n    new (winston.transports.Console)({ json: true })\n  ]\n}, {\n  // Metadata to add to each log response.\n  foo: \"bar\"\n})));\n\n```\n\nand produces output for requests like:\n\n```js\n{\n  \"date\": \"2013-12-01T23:32:54.759Z\",\n  \"server\": {\n    \"id\": \"m\",\n    \"pid\": 24653,\n    \"hostName\": \"titan.local\"\n  },\n  \"req\": {\n    \"method\": \"GET\",\n    \"host\": \"localhost:2000\",\n    \"path\": \"/\",\n    \"query\": \"\"\n  },\n  \"res\": {\n    \"statusCode\": 304\n  },\n  \"foo\": \"bar\",\n  \"level\": \"info\",\n  \"message\": \"request\"\n}\n```\n\nThe middleware attaches a logger to the response locals,\navailable as `res.locals._log`, so that *in addition* to automatic\nrequest logging messages you can log extra messages with all of the\ncurrent request metadata. E.g.:\n\n```js\napp.get(\"/foo\", function (req, res) {\n  res.locals._log.info(\"This is an extra manual log message!\", {\n    extra: \"metadata\"\n  });\n  // Rest of your code here...\n});\n```\n\n## API\n\n* [`request(opts, baseMeta)` - Express request middleware](#-request-opts-basemeta-express-request-middleware)\n* [`error(opts, baseMeta)` - Express error middleware](#-error-opts-basemeta-express-error-middleware)\n* [`uncaught(opts, baseMeta)` - Global uncaught exception handler](#-uncaught-opts-basemeta-global-uncaught-exception-handler)\n* [`Log(opts, baseMeta)` - Logger class.](#-log-opts-basemeta-logger-class-)\n* [`Log.addMeta(meta)`](#-log-addmeta-meta-)\n* [`Log.addReq(req)`](#-log-addreq-req-)\n* [`Log.transformMeta(fn)`](#-log-transformmeta-fn-)\n* [`Log.addRes(res)`](#-log-addres-res-)\n* [`Log.addError(err)`](#-log-adderror-err-)\n\n### `request(opts, baseMeta)` - Express request middleware\n\nCreates a middleware function using base metadata. Integration:\n\n```js\napp.use(winMid.request({\n  transports: [ new (winston.transports.Console)({ json: true }) ]\n}, { foo: \"bar\" }));\n```\n\nOnce integrated, a logger will be attached to the response locals,\nand available as `res.locals._log`. The logger will then be removed at\nthe end of the request.\n\n### `error(opts, baseMeta)` - Express error middleware\n\nCreates a middleware function for Express. Integration:\n\n```\napp.use(winMid.error({\n  transports: [ new (winston.transports.Console)({ json: true }) ]\n}, { foo: \"bar\" }));\n```\n\n### `uncaught(opts, baseMeta)` - Global uncaught exception handler\n\nCreates a handler function for any uncaught exception. Integration:\n\n```\nprocess.on(\"uncaughtException\", winMid.uncaught({\n  transports: [ new (winston.transports.Console)({ json: true }) ]\n}, { foo: \"bar\" }));\n```\n\n**Note**: Terminates process at end.\n\n### `Log(opts, baseMeta)` - Logger class.\n\nWraps Winston logger with additional functionality.\n\n```\nvar log = new winMid.Log({\n  transports: [ new (winston.transports.Console)({ json: true }) ]\n}, { foo: \"bar\" }));\n```\n\n### `Log.addMeta(meta)`\n\nAdd arbitrary meta to all subsequent log statements.\n\n### `Log.addReq(req)`\n\nAdd request to meta.\n\n### `Log.transformMeta(fn)`\n\nSet a delayed single transform function to mutate a **copy** of the metadata\n_right before_ a logging event. You can only presently have **one** such\nfunction. And it is delayed so that for things like request end, you can\neffectively access **all** the metadata.\n\nThe transform is applied on each log call and passes a copy of the mutated\nmetadata to the actual log call.\n\nThe function signature should be `fn(existingMeta)` and return mutated\nmetadata.\n\n### `Log.addRes(res)`\n\nAdd response to meta.\n\n### `Log.addError(err)`\n\nAdd error to meta.\n\n## Contributions\n\nPlease see the [Contributions Guide](./CONTRIBUTING.md) for how to help out\nwith the plugin.\n\nWe test all changes with [Travis CI][trav]. Here's our current\n[build status][trav_site]:\n\n[![Build Status][trav_img]][trav_site]\n\n[trav]: https://travis-ci.org/\n[trav_img]: https://api.travis-ci.org/FormidableLabs/express-winston-middleware.png\n[trav_site]: https://travis-ci.org/FormidableLabs/express-winston-middleware\n\n## Licenses\nAll code is 2013-2016 Formidable Labs.\nReleased under the [MIT](./LICENSE.txt) License.\n\n[winston]: https://github.com/flatiron/winston\n[express]: http://expressjs.com/\n[npm]: https://npmjs.org/package/express-winston-middleware\n","readmeFilename":"README.md","users":{"dselmanovic":true}}