<div dir="ltr">We do this for all of our services. What I recommend is having some bootstrap code that gets that information and sets it as a System.properties.<div><br></div><div>The bootstrap code *needs to run before any logging code* which for some frameworks can be nontrivial due to the static initialization of SLF4J (and SLF4J should really have some way to intercept the initial binding but that would probably hurt startup performance).</div><div><br></div><div>If you have control of the entry point (e.g. static main(args)) you can put the code in there. Again it needs to be done before any call to LoggingFactory.getLogger()</div><div><br></div><div>If you have a servlet container you can use a context listener and register that listener before all other listeners (otherwise logging code might be executed before bootstrap). However this only works if your servlet container does not use SLF4J or Logback (most of them have their own logging framework but if you configure them to use Logback you won't be able to set the properties apriori).</div><div><br></div><div>Logback (and almost all logging frameworks for that matter) allow you to get access to the system properties for output but they won't be in the MDC.</div><div><br></div><div>To inject the properties into the MDC for your entire application is extremely specific to the framework you are using.  Basically you need to go find where threads are created or an entrypoint. You also need to cleanup your MDC once the thread is released.</div><div><br></div><div>For Spring MVC this could be done by subclassing the DispatcherServlet.</div><div><br></div><div>For other things you can make a custom ExecutorService and put the required MDC logic and wire your custom ExecutorService in.</div><div><br></div><div>As you can see it is pretty nontrivial to do all of this but I will put a silver lining in that it is totally worth if you use something like the ELK stack (google it) or the commercial Splunk or the plethora of logging SaaS services.</div><div><br></div><div>These days other than during development file based logging is completely dead to me. It is so powerful to search by MDC attributes in ELK and resolve issues.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Mar 11, 2017 at 2:59 PM, Andrew Feller <span dir="ltr"><<a href="mailto:afeller@bandwidth.com" target="_blank">afeller@bandwidth.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Does anyone have recommendations on how to best to add manifest implementation information (Implementation-Title, Implementation-Version, etc) to logback MDC trivially?<br clear="all"><div><br></div><div>I know this information can retrieved programmatically from a package (<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html#getImplementationTitle--" target="_blank">Package.<wbr>getImplementationTitle()</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Package.html#getImplementationVersion--" target="_blank">Package.<wbr>getImplementationVersion()</a>, etc), but I'd rather avoid having every application hardcode logic on startup to determine this and stash it in MDC for later use.  I would also like to avoid hard coding this information within logback.xml / logback-spring.xml as the manifest is the source of truth.</div><div><br></div><div>Any recommendations would be greatly appreciated!</div><div>-- <br></div><div class="m_5906230600568097498gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><table style="font-size:12.8px;border:none;border-collapse:collapse"><tbody><tr style="height:167px"><td style="border:1px solid rgb(255,255,255);vertical-align:top;padding:7px"><p dir="ltr" style="line-height:1.44;margin-top:0pt;margin-bottom:0pt;margin-right:5pt"><font size="1"><span style="font-family:Arial;color:rgb(0,0,0);font-weight:700;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><img src="https://lh6.googleusercontent.com/WYeu84rijHA9DnlNpowhtHIkbXm-fNOEmMXbaM9QdZOpIs8fXg7mfWjQ44WzQz6JgcptFWq4MSjLu-CIhdcEU75IPR-FelHpEoMX7jU_h1S4hvD2TOOijrQlNW0Wts7MBstczHU" width="96" height="82" alt="email-signature-logo.jpg" style="border:none"></span></font></p></td><td style="border:1px solid rgb(255,255,255);vertical-align:top;padding:7px"><p dir="ltr" style="margin-top:0pt;margin-bottom:0pt"><font color="#676767" face="Calibri" size="2"><span style="line-height:14.08px;white-space:pre-wrap"><b>Andy Feller</b></span></font></p><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><font size="2"><span style="font-family:Calibri;color:rgb(132,139,148);font-style:italic;vertical-align:baseline;white-space:pre-wrap">Sr. DevOps Engineer<br></span><span style="font-family:Calibri;color:rgb(132,139,148);vertical-align:baseline;white-space:pre-wrap">900 Main Campus Drive, Suite 500</span></font></p><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><span style="font-family:Calibri;color:rgb(132,139,148);vertical-align:baseline;white-space:pre-wrap"><font size="2">Raleigh, NC 27606</font></span></p><p dir="ltr" style="line-height:1.2;margin-top:0pt;margin-bottom:0pt"><font size="2"><span style="color:rgb(25,98,207);text-decoration:underline;font-family:Calibri;vertical-align:baseline;white-space:pre-wrap"><a href="http://www.bandwidth.com/" style="color:rgb(17,85,204);text-decoration:none" target="_blank">Bandwidth</a></span><a href="http://www.bandwidth.com/" target="_blank"><span style="color:rgb(103,103,103);text-decoration:none;font-family:Calibri;font-weight:700;vertical-align:baseline;white-space:pre-wrap"><br></span></a></font><span style="font-size:small;line-height:1.2;font-family:Calibri;color:rgb(103,103,103);font-weight:700;vertical-align:baseline;white-space:pre-wrap">e</span><span style="font-size:small;line-height:1.2;font-family:Calibri;color:rgb(128,128,128);vertical-align:baseline;white-space:pre-wrap"> </span><a href="mailto:afeller@bandwidth.com" style="font-size:small;line-height:1.2;color:rgb(17,85,204);text-decoration:none" target="_blank"><span style="font-family:Calibri;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">afeller@bandwidth.com</span></a></p></td></tr></tbody></table></div></div></div></div>
</div>
<br>______________________________<wbr>_________________<br>
logback-user mailing list<br>
<a href="mailto:logback-user@qos.ch">logback-user@qos.ch</a><br>
<a href="http://mailman.qos.ch/mailman/listinfo/logback-user" rel="noreferrer" target="_blank">http://mailman.qos.ch/mailman/<wbr>listinfo/logback-user</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">CTO<br>SnapHop (<a href="http://snaphop.com" target="_blank">snaphop.com</a>)<br>(twitter) @agentgt (linkedin) <a href="http://www.linkedin.com/in/agentgt" target="_blank">http://www.linkedin.com/in/agentgt</a> (cell) 781-883-5182 </div>
</div>