<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">I have a scenario where I have 1, 2, or 3 pieces of data (guids) which I want to to log with all messages in order to track records as they traverse their way through a series of microservices.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Currently I’ve written my own wrapper class with my own debug, info, warn, error methods that take these 3 parameters, followed by the message field, followed by the optional parameters.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There must be a better way, plus this has the disadvantage of rendering the line number useless in log messages because the line numbers are the line numbers from my log wrapper class, not the actual code doing the logging.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What is the best way to handle this scenario? Googling has failed me, as has the FAQ, but it’s probably because I don’t know the right terms to search for. I’m using log4j2 as the underlying logger FWIW.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here’s a simplified version of my log wrapper (i.e. most methods stripped out because they are redundant for the purpose of this question):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="background:white;text-autospace:none"><b><span style="font-size:9.0pt;font-family:"Courier New";color:navy">public class
</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">Log {<br>
    </span><b><span style="font-size:9.0pt;font-family:"Courier New";color:navy">private
</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">Logger
</span><b><span style="font-size:9.0pt;font-family:"Courier New";color:#660E7A">logger</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">;<br>
<br>
    </span><b><span style="font-size:9.0pt;font-family:"Courier New";color:navy">public
</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">Log(Class clazz) {<br>
        </span><b><span style="font-size:9.0pt;font-family:"Courier New";color:#660E7A">logger
</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">= LoggerFactory.<i>getLogger</i>(clazz);<br>
    }<br>
<br>
    </span><b><span style="font-size:9.0pt;font-family:"Courier New";color:navy">public void
</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">info(Object xGuid, Object yGuid, String zGuid, String message, Object... args) {<br>
        </span><b><span style="font-size:9.0pt;font-family:"Courier New";color:#660E7A">logger</span></b><span style="font-size:9.0pt;font-family:"Courier New";color:black">.info(guidifiedMessage(xGuid, yGuid, zGuid, message), args);<br>
    }<br>
}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white;text-autospace:none"><span style="font-size:9.0pt;font-family:"Courier New";color:black"><o:p> </o:p></span></p>
<p class="MsoNormal">The “guidifiedMessage” method just prefixes the message string with whatever guids are present.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">So is there a better way? Or if not, is there at least a way to get the line number specified in my log4j properties to reflect the caller of this Log class rather than the line
<i>within </i>the Log class?<o:p></o:p></p>
</div>
</body>
</html>