{"_id":"@asdfgertyjhnpm/excepturi-minima-atque","name":"@asdfgertyjhnpm/excepturi-minima-atque","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@asdfgertyjhnpm/excepturi-minima-atque","version":"1.0.0","description":"[![build status][build-badge]][build] [![code coverage][coverage-badge]][coverage] [![npm version][version-badge]][package]","main":"index.js","author":{"name":"asdfgertyjh"},"license":"MIT","keywords":["ECMAScript 2022","jsonpath","classname","serializer","hooks","String.prototype.trim","flat","path","limit","diff","assign","regular","require","asserts","forEach","ast","autoprefixer","rmdir","__proto__","eventDispatcher","setImmediate","bdd","side","defineProperty","styleguide","interrupts","ES2015","every","starter","syntaxerror","node","bind","immutable","WebSocket","ES2016","wait","fast-clone","view","Array","ReactiveX","proto","json-schema-validator","react-hook-form","utility","Int16Array","error","sigint","cli","monorepo","match","jsdiff","Object.fromEntries","@@toStringTag","code points","framer","watching","6to5","throttle","wrap","optimist","https","remove","accessor","URLSearchParams","rgb","positive","Array.prototype.filter","ReactiveExtensions","opens","linewrap","utils","typeof","redux","zod","ArrayBuffer.prototype.slice","cache","classnames","whatwg","glob","react pose","channel","fast","color","StyleSheet","Streams","busy","watch","jQuery","callback","colour","task","regexp","chinese","status","validation","stable","open","util","password","structuredClone","waapi","Object.entries","listeners","urls","RFC-6455","group","parse","xss","argv","guid","bootstrap css","animation","data","picomatch","full-width","es2018","test","es","hasOwn","typed","directory","graphql","spring","take","ES2022","rm -fr","ES8","higher-order","search","lazy","schema","shim","ArrayBuffer","toolkit","HyBi","cmd","fastify","folder","JSON","ES2023","ECMAScript 2023","$.extend","crypto","nested css","enumerable","ES","handlers","coercible","packages","mru","regular expressions","linux","serialize","drag","find","Reflect.getPrototypeOf","l10n","tc39","groupBy","limited","equality","signal","warning","argument","multi-package","mime","matches","immer","inspect","value","circular","unicode","es8","exit-code","functional","String.prototype.matchAll","compare","random","codes","testing","browser","buffer","mkdirp","Promise","editor","efficient","toArray","AsyncIterator","ie","moment","object","process","arraybuffer","parents","emit","Array.prototype.flatten","function","connect","shared","Uint16Array","types","fp","hookform","es2015","TypeBox","framework","url","findLastIndex","auth","mobile","extra","irq","readable","width","output","libphonenumber","browserslist","Function.prototype.name","iterate","rm","chromium","extend","var","name","shebang","prop","pretty","syntax","symlink","Array.prototype.flat","toSorted","css nesting","byteLength","ascii","karma","nodejs","contains","config","findLast","debugger","negative","protobuf","escape","harmony","collection","express","Object.assign","input","deepcopy","sanitization","bundling","popmotion","id","fast-copy","import","utilities","bound","Stream","Int8Array","up","polyfill","Symbol.toStringTag","make dir","classes","file system","concat","pure","arrays","console","concurrency","check","prototype","css variable","break","flags","trim","iteration","keys","link","mocha","exe","Set","hash","es-abstract","wordbreak","flatMap","flatten","trimRight","ECMAScript 6","look-up","make","nope","description","WebSockets","transpiler","Object.values","consume","getopt","streams","east-asian-width","Array.prototype.findLast","safe","gradients css3","colors","less mixins","once","values","Float32Array","figlet","argparse","weakset","css less","ES6","cors","await","WeakSet","create","phone","intrinsic","date","commander","react","package manager","react animation","recursive","chrome","banner","tester","delete","wget","uuid","map","toobject","descriptors","Observables","pyyaml","Float64Array","io-ts","ajax","less.js","environment","descriptor","macos","user-streams","javascript","Object.defineProperty","ES2017","serialization","ECMAScript 2019","batch","TypedArray","typedarray","equal","env","setPrototypeOf","yup","BigUint64Array","settings","compiler","wordwrap","watcher","readablestream","byte","merge","Object.keys","deep","WeakMap","columns","airbnb","npm","ECMAScript 2018","eslint-plugin","fast-deep-copy","fastcopy","pnpm9","api","quote","collection.es6","stringifier","obj","ES2018","ts","mimetypes","language","getter","jsonschema","ArrayBuffer#slice","parent","request","push","isConcatSpreadable","es6","tostringtag","getOwnPropertyDescriptor","app","fastclone","set","css-in-js","tslib","module","es-shims","sigterm","exec","bcrypt","xdg-open","ajv","typed array","mixins","stylesheet","file","names","eslint","superstruct","Push","tap","spinner","promise","RegExp.prototype.flags","Underscore","cjk","time","gradients css","fantasy-land","yaml","dom-testing-library","Iterator","querystring","qs","resolve","type","shell","find-up","three","copy","spinners","concatMap","curried","dom","opener","native","buffers","lint","website","es2017","column","ECMAScript 2021","ECMAScript 2015","babel-core","queue","reduce","spec","fixed-width","util.inspect","ES2021","css","tape","reuse","dayjs","core-js","ramda","dotenv","ECMAScript 7","toStringTag","real-time","call-bind","ES2019","jwt","trimStart","hardlinks","windows","client","start","scheme-validation","parser","character","lru","mkdir","format","vest","dependency manager","encryption","prune","web","computed-types","persistent","jsdom","ender","ECMAScript 2016","call-bound","telephone","class-validator","es-shim API","fs","Array.prototype.includes","filter","deep-copy","json-schema-validation","findup","sorted","electron","which","middleware","walking","args","bluebird","internal slot","shrinkwrap","fsevents","less","async","curl","visual","ava","offset","log","styled-components","command","RegExp#flags","look","fetch","ponyfill","setter","term","ECMAScript 2020","performance","configurable","speed","Microsoft","Symbol","progress","styles","promises","less compiler","3d","Array.prototype.findLastIndex","authentication","minimal","matchAll","signals","walk","redact","Map","Array.prototype.flatMap","babel","crypt","Uint8ClampedArray","ECMAScript 5","package","react-testing-library","ESnext","json-schema","ES7","jsx","string","CSS","dir","sham","install","0","trimLeft","Observable","internal","iterator","slot","-0","YAML","callbound","BigInt64Array","full","style","executable","a11y","jest","get","xhr","arguments","package.json","eslintconfig","rm -rf","clone","less css","idle","operating-system",".env","json","plugin","emoji","tdd","fullwidth","Object","es2016","ECMAScript 2017","form-validation","properties","touch","writable","some","rfc4122","array","getPrototypeOf","accessibility","korean","sort","chai","formatting","form","valid","rapid","stringify","characters","regular expression","expression","tools","prefix","censor","compile less","write","typanion","omit","xterm","assertion","command-line","logging","ecmascript","estree","ES5","rangeerror","deepclone","point-free","read","regex","validate","events","ECMAScript 3","key","postcss-plugin","fast-deep-clone","sanitize","Rx","core","ES2020","tty","private data","browserlist","from","length","Int32Array","sharedarraybuffer","byteOffset","child","japanese","symlinks","Uint8Array","robust","let","apollo","is","text","art","debug","default","queueMicrotask","spawn","metadata","ratelimit","xdg","stateless","last","validator","datastructure","JSON-Schema","define","bundler"],"repository":{"type":"git","url":"git+https://github.com/asdfgertyjhnpm/excepturi-minima-atque.git"},"homepage":"https://github.com/asdfgertyjhnpm/excepturi-minima-atque/#readme","bugs":{"url":"https://github.com/asdfgertyjhnpm/excepturi-minima-atque/issues"},"packageManager":"yarn@4.1.1","dependencies":{"@ajhgwdjnpm/possimus-quaerat-hic":"^1.0.0","@asdfgertyjhnpm/ipsam-illum-quidem":"^1.0.0","@asdfgertyjhnpm/maxime-explicabo-ut":"^1.0.0"},"_id":"@asdfgertyjhnpm/excepturi-minima-atque@1.0.0","gitHead":"aee0816c44aa07542e3575b7ad190d8e6db83a0b","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-nPTZ9jMrTXAWiRuYCJHFTGCjebWmB9/TTR3iFiqlAqXMGeAR/kEj6NmKIHM3CPRNTVor8WI6LcDwnikGvCH/lA==","shasum":"0c65eed78cbb076112813ea159fcfc74ca7e21a6","tarball":"https://registry.npmjs.org/@asdfgertyjhnpm/excepturi-minima-atque/-/excepturi-minima-atque-1.0.0.tgz","fileCount":10,"unpackedSize":22453,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEGz4fiXouBvbk5hFEwxmsEYUaCQUMfKOop6kntKGYhlAiEAiZHtGpMGsHY4Tdyi+fasspDumbYQhqfnKzFtGJeH07Y="}]},"_npmUser":{"name":"baoh44843","email":"baoh44843@gmail.com"},"directories":{},"maintainers":[{"name":"baoh44843","email":"baoh44843@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/excepturi-minima-atque_1.0.0_1714041637548_0.5317886967388354"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-25T10:40:37.466Z","1.0.0":"2024-04-25T10:40:37.755Z","modified":"2024-04-25T10:40:38.124Z"},"maintainers":[{"name":"baoh44843","email":"baoh44843@gmail.com"}],"description":"[![build status][build-badge]][build] [![code coverage][coverage-badge]][coverage] [![npm version][version-badge]][package]","homepage":"https://github.com/asdfgertyjhnpm/excepturi-minima-atque/#readme","keywords":["ECMAScript 2022","jsonpath","classname","serializer","hooks","String.prototype.trim","flat","path","limit","diff","assign","regular","require","asserts","forEach","ast","autoprefixer","rmdir","__proto__","eventDispatcher","setImmediate","bdd","side","defineProperty","styleguide","interrupts","ES2015","every","starter","syntaxerror","node","bind","immutable","WebSocket","ES2016","wait","fast-clone","view","Array","ReactiveX","proto","json-schema-validator","react-hook-form","utility","Int16Array","error","sigint","cli","monorepo","match","jsdiff","Object.fromEntries","@@toStringTag","code points","framer","watching","6to5","throttle","wrap","optimist","https","remove","accessor","URLSearchParams","rgb","positive","Array.prototype.filter","ReactiveExtensions","opens","linewrap","utils","typeof","redux","zod","ArrayBuffer.prototype.slice","cache","classnames","whatwg","glob","react pose","channel","fast","color","StyleSheet","Streams","busy","watch","jQuery","callback","colour","task","regexp","chinese","status","validation","stable","open","util","password","structuredClone","waapi","Object.entries","listeners","urls","RFC-6455","group","parse","xss","argv","guid","bootstrap css","animation","data","picomatch","full-width","es2018","test","es","hasOwn","typed","directory","graphql","spring","take","ES2022","rm -fr","ES8","higher-order","search","lazy","schema","shim","ArrayBuffer","toolkit","HyBi","cmd","fastify","folder","JSON","ES2023","ECMAScript 2023","$.extend","crypto","nested css","enumerable","ES","handlers","coercible","packages","mru","regular expressions","linux","serialize","drag","find","Reflect.getPrototypeOf","l10n","tc39","groupBy","limited","equality","signal","warning","argument","multi-package","mime","matches","immer","inspect","value","circular","unicode","es8","exit-code","functional","String.prototype.matchAll","compare","random","codes","testing","browser","buffer","mkdirp","Promise","editor","efficient","toArray","AsyncIterator","ie","moment","object","process","arraybuffer","parents","emit","Array.prototype.flatten","function","connect","shared","Uint16Array","types","fp","hookform","es2015","TypeBox","framework","url","findLastIndex","auth","mobile","extra","irq","readable","width","output","libphonenumber","browserslist","Function.prototype.name","iterate","rm","chromium","extend","var","name","shebang","prop","pretty","syntax","symlink","Array.prototype.flat","toSorted","css nesting","byteLength","ascii","karma","nodejs","contains","config","findLast","debugger","negative","protobuf","escape","harmony","collection","express","Object.assign","input","deepcopy","sanitization","bundling","popmotion","id","fast-copy","import","utilities","bound","Stream","Int8Array","up","polyfill","Symbol.toStringTag","make dir","classes","file system","concat","pure","arrays","console","concurrency","check","prototype","css variable","break","flags","trim","iteration","keys","link","mocha","exe","Set","hash","es-abstract","wordbreak","flatMap","flatten","trimRight","ECMAScript 6","look-up","make","nope","description","WebSockets","transpiler","Object.values","consume","getopt","streams","east-asian-width","Array.prototype.findLast","safe","gradients css3","colors","less mixins","once","values","Float32Array","figlet","argparse","weakset","css less","ES6","cors","await","WeakSet","create","phone","intrinsic","date","commander","react","package manager","react animation","recursive","chrome","banner","tester","delete","wget","uuid","map","toobject","descriptors","Observables","pyyaml","Float64Array","io-ts","ajax","less.js","environment","descriptor","macos","user-streams","javascript","Object.defineProperty","ES2017","serialization","ECMAScript 2019","batch","TypedArray","typedarray","equal","env","setPrototypeOf","yup","BigUint64Array","settings","compiler","wordwrap","watcher","readablestream","byte","merge","Object.keys","deep","WeakMap","columns","airbnb","npm","ECMAScript 2018","eslint-plugin","fast-deep-copy","fastcopy","pnpm9","api","quote","collection.es6","stringifier","obj","ES2018","ts","mimetypes","language","getter","jsonschema","ArrayBuffer#slice","parent","request","push","isConcatSpreadable","es6","tostringtag","getOwnPropertyDescriptor","app","fastclone","set","css-in-js","tslib","module","es-shims","sigterm","exec","bcrypt","xdg-open","ajv","typed array","mixins","stylesheet","file","names","eslint","superstruct","Push","tap","spinner","promise","RegExp.prototype.flags","Underscore","cjk","time","gradients css","fantasy-land","yaml","dom-testing-library","Iterator","querystring","qs","resolve","type","shell","find-up","three","copy","spinners","concatMap","curried","dom","opener","native","buffers","lint","website","es2017","column","ECMAScript 2021","ECMAScript 2015","babel-core","queue","reduce","spec","fixed-width","util.inspect","ES2021","css","tape","reuse","dayjs","core-js","ramda","dotenv","ECMAScript 7","toStringTag","real-time","call-bind","ES2019","jwt","trimStart","hardlinks","windows","client","start","scheme-validation","parser","character","lru","mkdir","format","vest","dependency manager","encryption","prune","web","computed-types","persistent","jsdom","ender","ECMAScript 2016","call-bound","telephone","class-validator","es-shim API","fs","Array.prototype.includes","filter","deep-copy","json-schema-validation","findup","sorted","electron","which","middleware","walking","args","bluebird","internal slot","shrinkwrap","fsevents","less","async","curl","visual","ava","offset","log","styled-components","command","RegExp#flags","look","fetch","ponyfill","setter","term","ECMAScript 2020","performance","configurable","speed","Microsoft","Symbol","progress","styles","promises","less compiler","3d","Array.prototype.findLastIndex","authentication","minimal","matchAll","signals","walk","redact","Map","Array.prototype.flatMap","babel","crypt","Uint8ClampedArray","ECMAScript 5","package","react-testing-library","ESnext","json-schema","ES7","jsx","string","CSS","dir","sham","install","0","trimLeft","Observable","internal","iterator","slot","-0","YAML","callbound","BigInt64Array","full","style","executable","a11y","jest","get","xhr","arguments","package.json","eslintconfig","rm -rf","clone","less css","idle","operating-system",".env","json","plugin","emoji","tdd","fullwidth","Object","es2016","ECMAScript 2017","form-validation","properties","touch","writable","some","rfc4122","array","getPrototypeOf","accessibility","korean","sort","chai","formatting","form","valid","rapid","stringify","characters","regular expression","expression","tools","prefix","censor","compile less","write","typanion","omit","xterm","assertion","command-line","logging","ecmascript","estree","ES5","rangeerror","deepclone","point-free","read","regex","validate","events","ECMAScript 3","key","postcss-plugin","fast-deep-clone","sanitize","Rx","core","ES2020","tty","private data","browserlist","from","length","Int32Array","sharedarraybuffer","byteOffset","child","japanese","symlinks","Uint8Array","robust","let","apollo","is","text","art","debug","default","queueMicrotask","spawn","metadata","ratelimit","xdg","stateless","last","validator","datastructure","JSON-Schema","define","bundler"],"repository":{"type":"git","url":"git+https://github.com/asdfgertyjhnpm/excepturi-minima-atque.git"},"author":{"name":"asdfgertyjh"},"bugs":{"url":"https://github.com/asdfgertyjhnpm/excepturi-minima-atque/issues"},"license":"MIT","readme":"## beaver-logger\n\n[![build status][build-badge]][build]\n[![code coverage][coverage-badge]][coverage]\n[![npm version][version-badge]][package]\n\n[build-badge]: https://img.shields.io/github/actions/workflow/status/asdfgertyjhnpm/excepturi-minima-atque/main.yml?branch=main&logo=github&style=flat-square\n[build]: https://github.com/asdfgertyjhnpm/excepturi-minima-atque/actions?query=workflow:build\n[coverage-badge]: https://img.shields.io/codecov/c/github/asdfgertyjhnpm/excepturi-minima-atque.svg?style=flat-square\n[coverage]: https://codecov.io/github/asdfgertyjhnpm/excepturi-minima-atque/\n[version-badge]: https://img.shields.io/npm/v/@asdfgertyjhnpm/excepturi-minima-atque.svg?style=flat-square\n[package]: https://www.npmjs.com/package/@asdfgertyjhnpm/excepturi-minima-atque\n\nFront-end logger, which will:\n\n- Buffer your front-end logs and periodically send them to the server side\n- Automatically flush logs for any errors or warnings\n\nThis is a great tool to use if you want to do logging on the client side in the same way you do on the server, without worrying about sending off a million beacons. You can quickly get an idea of what's going on on your client, including error cases, page transitions, or anything else you care to log!\n\n## Overview\n\n## Setup\n\n```javascript\nvar $logger = beaver.Logger({\n  url: \"/my/logger/url\",\n});\n```\n\n## Basic logging\n\n### `$logger.info(<event>, <payload>);`\n\nQueues a log. Options are `debug`, `info`, `warn`, `error`.\n\nFor example:\n\n`$logger.error('something_went_wrong', { error: err.toString() })`\n\n### `$logger.track(<payload>);`\n\nCall this to attach general tracking information to the current page. This is useful if the data is not associated with a specific event, and will be sent to the server the next time the logs are flushed.\n\n### `$logger.metricCounter(<event>, <payload>);`\n\nQueues a counter metric, helper wrapping `logger.metric`\n\n```\nlogger.metricCounter({\n  namespace: \"pp.team.product.feature\",\n  event: \"button_click\",\n  dimensions: {\n    type: \"paypal\"\n  }\n})\n```\n\n#### Using a namespace prefix\n\n```\nconst logger = new Logger({...options, metricNamespacePrefix: \"company.team.app\"})\n\nlogger.metricCounter({\n  namespace: \"product.feature\",\n  event: \"button_click\",\n})\n\n// creates metric with namespace of\n// company.team.app.product.feature\n```\n\n### `$logger.metricGauge(<event>, <payload>);`\n\nQueues a gauge metric, helper wrapping `logger.metric`\n\n```\nlogger.metricGauge({\n  namespace: \"pp.team.product.feature\",\n  event: \"request_latency\",\n  value: 100,\n  dimensions: {\n    method: \"GET\"\n  }\n})\n```\n\n#### Using a namespace prefix\n\n```\nconst logger = new Logger({...options, metricNamespacePrefix: \"company.team.app\"})\n\nlogger.metricGauge({\n  namespace: \"product.feature\",\n  event: \"request_latency\",\n  value: 100\n})\n\n// creates metric with namespace of\n// company.team.app.product.feature\n```\n\n### Deprecated - `$logger.metric(<event>, <payload>);`\n\nQueues a metric. We suggest using the `metricCount` or `metricGauge` interface for better type safety and clearer intention in your code.\n\n## Advanced\n\n### `$logger.addMetaBuilder(<function>);`\n\nAttach a method which is called and will attach general information to the logging payload whenever the logs are flushed\n\n```javascript\n$logger.addMetaBuilder(function () {\n  return {\n    current_page: getMyCurrentPage(),\n  };\n});\n```\n\n### `$logger.addMetricDimensionBuilder(<function>);`\n\nAttach a method which is called and will attach values to **each metric's dimensions** whenever the logs are flushed\n\n```javascript\n$logger.addMetricDimensionBuilder(() => ({\n  token_used: true,\n  type: \"user_id_token\",\n}));\n```\n\n### `$logger.addPayloadBuilder(<function>);`\n\nAttach a method which is called and will attach values to **each individual log's payload** whenever the logs are flushed\n\n```javascript\n$logger.addPayloadBuilder(function () {\n  return {\n    performance_ts: window.performance.now(),\n  };\n});\n```\n\n### `$logger.addTrackingBuilder(<function>);`\n\nAttach a method which is called and will attach values to **each individual log's tracking** whenever the logs are flushed\n\n```javascript\n$logger.addTrackingBuilder(function () {\n  return {\n    pageLoadTime: getPageLoadTime(),\n  };\n});\n```\n\n### `$logger.addHeaderBuilder(<function>);`\n\nAttach a method which is called and will attach values to **each individual log requests' headers** whenever the logs are flushed\n\n```javascript\n$logger.addHeaderBuilder(function () {\n  return {\n    \"x-csrf-token\": getCSRFToken(),\n  };\n});\n```\n\n### `$logger.flush();`\n\nFlushes the logs to the server side. Recommended you don't call this manually, as it will happen automatically after a configured interval.\n\n## Installing\n\n- Install via npm\n\n`npm install --save beaver-logger`\n\n- Include in your project\n\n```html\n<script src=\"/js/beaver-logger.min.js\"></script>\n```\n\nor\n\n```javascript\nlet $logger = require(\"beaver-logger\");\n```\n\n## Configuration\n\nFull configuration options:\n\n```javascript\nvar $logger = beaver.Logger({\n  // Url to send logs to\n  url: \"/my/logger/url\",\n\n  // Prefix to prepend to all events\n  prefix: \"myapp\",\n\n  // Log level to display in the browser console\n  logLevel: beaver.LOG_LEVEL.WARN,\n\n  // Interval to flush logs to server\n  flushInterval: 60 * 1000,\n\n  // Use sendBeacon if supported rather than XHR to send logs; defaults to false\n  enableSendBeacon: true,\n});\n```\n\n## Server Side\n\nbeaver-logger includes a small node endpoint which will automatically accept the logs sent from the client side. You can mount this really easily:\n\n```javascript\nlet beaverLogger = require(\"beaver-logger/server\");\n\nmyapp.use(\n  beaverLogger.expressEndpoint({\n    // URI to recieve logs at\n    uri: \"/api/log\",\n\n    // Custom logger (optional, by default logs to console)\n    logger: myLogger,\n\n    // Enable cross-origin requests to your logging endpoint\n    enableCors: false,\n  })\n);\n```\n\nOr if you're using kraken, you can add this in your `config.json` as a middleware:\n\n```json\n      \"beaver-logger\": {\n          \"priority\": 106,\n          \"module\": {\n              \"name\": \"beaver-logger/server\",\n              \"method\": \"expressEndpoint\",\n              \"arguments\": [\n                  {\n                      \"uri\": \"/api/log\",\n                      \"logger\": \"require:my-custom-logger-module\"\n                  }\n              ]\n          }\n      }\n```\n\n## Custom backend logger\n\nSetting up a custom logger is really easy, if you need to transmit these logs to some backend logging service rather than just logging them to your server console:\n\n```javascript\nmodule.exports = {\n  log: function (req, level, event, payload) {\n    logSocket.send(\n      JSON.stringify({\n        level: level,\n        event: event,\n        payload: payload,\n      })\n    );\n  },\n};\n```\n\n## Data Flow\n\n```mermaid\nflowchart TD\n    A[Client-Side Log statement] --> B[beaver-logger/client]\n    B[beaver-logger/client] --> C[beaver-logger/server]\n    C[beaver-logger/server] --> D[your-custom-logger]\n    D[your-customer-logger] --> E[Backend 1]\n    D[your-customer-logger] --> F[Backend 2]\n    G[Server-Side Log statement] --> D[your-custom-logger]\n```\n","readmeFilename":"README.md"}