(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{jhmi:function(e,t,n){"use strict";n.r(t),n.d(t,"_frontmatter",(function(){return i})),n.d(t,"default",(function(){return c}));var o=n("k1TG"),a=n("8o2o"),s=(n("q1tI"),n("7ljp")),r=n("hhGP"),i=(n("qKvR"),{});void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!i.hasOwnProperty("__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"src/pages/docs/installation/event-logging-page.mdx"}});var g={_frontmatter:i},l=r.a;function c(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(s.b)(l,Object(o.a)({},g,n,{components:t,mdxType:"MDXLayout"}),Object(s.b)("h2",{id:"logging"},"Logging"),Object(s.b)("h3",{id:"event-logging"},"Event Logging"),Object(s.b)("p",null,"Superset by default logs special action events in its internal database. These logs can be accessed\non the UI by navigating to ",Object(s.b)("strong",{parentName:"p"},"Security > Action Log"),". You can freely customize these logs by\nimplementing your own event log class."),Object(s.b)("p",null,"Here's an example of a simple JSON-to-stdout class:"),Object(s.b)("pre",null,Object(s.b)("code",Object(o.a)({parentName:"pre"},{className:"language-python"}),"    def log(self, user_id, action, *args, **kwargs):\n        records = kwargs.get('records', list())\n        dashboard_id = kwargs.get('dashboard_id')\n        slice_id = kwargs.get('slice_id')\n        duration_ms = kwargs.get('duration_ms')\n        referrer = kwargs.get('referrer')\n\n        for record in records:\n            log = dict(\n                action=action,\n                json=record,\n                dashboard_id=dashboard_id,\n                slice_id=slice_id,\n                duration_ms=duration_ms,\n                referrer=referrer,\n                user_id=user_id\n            )\n            print(json.dumps(log))\n")),Object(s.b)("p",null,"End by updating your config to pass in an instance of the logger you want to use:"),Object(s.b)("pre",null,Object(s.b)("code",Object(o.a)({parentName:"pre"},{}),"EVENT_LOGGER = JSONStdOutEventLogger()\n")),Object(s.b)("h3",{id:"statsd-logging"},"StatsD Logging"),Object(s.b)("p",null,"Superset can be instrumented to log events to StatsD if desired. Most endpoints hit are logged as\nwell as key events like query start and end in SQL Lab."),Object(s.b)("p",null,"To setup StatsD logging, it’s a matter of configuring the logger in your ",Object(s.b)("inlineCode",{parentName:"p"},"superset_config.py"),"."),Object(s.b)("pre",null,Object(s.b)("code",Object(o.a)({parentName:"pre"},{className:"language-python"}),"from superset.stats_logger import StatsdStatsLogger\nSTATS_LOGGER = StatsdStatsLogger(host='localhost', port=8125, prefix='superset')\n")),Object(s.b)("p",null,"Note that it’s also possible to implement you own logger by deriving\n",Object(s.b)("inlineCode",{parentName:"p"},"superset.stats_logger.BaseStatsLogger"),"."))}void 0!==c&&c&&c===Object(c)&&Object.isExtensible(c)&&!c.hasOwnProperty("__filemeta")&&Object.defineProperty(c,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"src/pages/docs/installation/event-logging-page.mdx"}}),c.isMDXComponent=!0}}]);
//# sourceMappingURL=component---src-pages-docs-installation-event-logging-page-mdx-6288b83b042109d8bf8e.js.map