<h1 dir="auto">Feature request</h1>
<h2 dir="auto">Is your feature request related to a problem? Please describe.</h2>
<p dir="auto">may be related to <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="482077873" data-permission-text="Title is private" data-url="https://github.com/vercel/next.js/issues/8422" data-hovercard-type="issue" data-hovercard-url="/vercel/next.js/issues/8422/hovercard" href="https://github.com/vercel/next.js/issues/8422">#8422</a>.</p>
<p dir="auto">At the present time , when using next.js with other backend frameworks (isomorphic applications), users have few controls to the logging facility of next.js.</p>
<p dir="auto">Users can only  pass <code class="notranslate">{quiet: true}</code> when instantiate <code class="notranslate">next.js</code>  object. But doing these only hide error messages,  still can not modify some logging behaviours such as  logging level or  logging format.</p>
<p dir="auto">I hope next.js can provide some mechanics for controlling dev logging behaviour.</p>
<h2 dir="auto">Describe the solution you'd like</h2>
<p dir="auto">using more advanced logging framework such as <a href="https://github.com/winstonjs/winston">winston</a> maybe a good solution.</p>
<h2 dir="auto">Describe alternatives you've considered</h2>
<h2 dir="auto">Additional context</h2>
<p dir="auto">I found next.js do have an abstract layer to handle logging(<a href="https://github.com/zeit/next.js/blob/52dd42a6bb9f0a45af1fb5eac773729b031e8fb1/packages/next/build/output/log.ts">log.ts</a>), while some code use these abstract APIs to log( such as <a href="https://github.com/zeit/next.js/blob/18a9c7e371efc4c487f9c3599c3211ce30009d6c/packages/next/build/output/store.ts#L81"><code class="notranslate">bundled successfully</code></a> ), some do not ( such as <a href="https://github.com/zeit/next.js/blob/18a9c7e371efc4c487f9c3599c3211ce30009d6c/packages/next/build/index.ts#L322"><code class="notranslate">Compiled successfully</code></a> )</p>
<p dir="auto">Maybe with controllable logging  is also make  next.js  avilable to provide  more detailed messages for debug using.</p>
<h1 dir="auto">Feature request</h1>
<h2 dir="auto">Is your feature request related to a problem? Please describe.</h2>
<p dir="auto">Using custom server interferes with other logging in my app.</p>
<h2 dir="auto">Describe the solution you'd like</h2>
<p dir="auto">A way to silence <code class="notranslate">next</code> and an interface to tap into <code class="notranslate">ready</code>, <code class="notranslate">recompile</code>, <code class="notranslate">error</code> events.</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="const app = next({ dev: true, quiet: true })
app.on('ready', myLogger.info);
app.on('recompile', myLogger.trace);
app.on('error', err =&gt; myLogger.error('something went wrong', { err }));

const handle = app.getRequestHandler()
// ..."><pre class="notranslate"><span class="pl-k">const</span> <span class="pl-s1">app</span> <span class="pl-c1">=</span> <span class="pl-en">next</span><span class="pl-kos">(</span><span class="pl-kos">{</span> <span class="pl-c1">dev</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span> <span class="pl-c1">quiet</span>: <span class="pl-c1">true</span> <span class="pl-kos">}</span><span class="pl-kos">)</span>
<span class="pl-s1">app</span><span class="pl-kos">.</span><span class="pl-en">on</span><span class="pl-kos">(</span><span class="pl-s">'ready'</span><span class="pl-kos">,</span> <span class="pl-s1">myLogger</span><span class="pl-kos">.</span><span class="pl-c1">info</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-s1">app</span><span class="pl-kos">.</span><span class="pl-en">on</span><span class="pl-kos">(</span><span class="pl-s">'recompile'</span><span class="pl-kos">,</span> <span class="pl-s1">myLogger</span><span class="pl-kos">.</span><span class="pl-c1">trace</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-s1">app</span><span class="pl-kos">.</span><span class="pl-en">on</span><span class="pl-kos">(</span><span class="pl-s">'error'</span><span class="pl-kos">,</span> <span class="pl-s1">err</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">myLogger</span><span class="pl-kos">.</span><span class="pl-en">error</span><span class="pl-kos">(</span><span class="pl-s">'something went wrong'</span><span class="pl-kos">,</span> <span class="pl-kos">{</span> err <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-k">const</span> <span class="pl-s1">handle</span> <span class="pl-c1">=</span> <span class="pl-s1">app</span><span class="pl-kos">.</span><span class="pl-en">getRequestHandler</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
<span class="pl-c">// ...</span></pre></div>