<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 12 (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:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@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="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I have a custom appender that needs a backup logger in case there is a network issue or some other common error (see sample code below).<o:p></o:p></p>
<p class="MsoNormal">I’m running into the error indicating that my backup logger will not work because it was created during the default configuration phase.  It directed me towards the docs on substituteLogger which suggested to set up my appender in a separate
 file and then configure it after the default configuration phase.<o:p></o:p></p>
<p class="MsoNormal">Are there any other options?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is there a better way to deal w/ the backup logger?  Is there a more general purpose way to do this?  Maybe a composite appender?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any help would be appreciated.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My class basically looks like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">public class FooAppender extends AppenderBase<ILoggingEvent> {<o:p></o:p></p>
<p class="MsoNormal">                private final Logger LOGGER = LoggerFactory.getLogger(FooAppender.class);<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">private Layout<ILoggingEvent> layout;<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">//A bunch of configuration and constants.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">//Some setter methods<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">@Override<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">Public void append(final ILoggingEvent event) {<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in;text-indent:.5in">String message = this.layout.doLayout(event); //The thrift client will encode it as UTF-8 for us.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">                try {<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">                                //log the event<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">                } catch (SpecificException e) {<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">                                LOGGER.error(message);<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">                }<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">}<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Sample logback.xml snippet:<o:p></o:p></p>
<p class="MsoNormal">    <appender name="foo" class="FooAppender"><o:p></o:p></p>
<p class="MsoNormal">        <layout><o:p></o:p></p>
<p class="MsoNormal">            <pattern>%m%n</pattern><o:p></o:p></p>
<p class="MsoNormal">            <outputPatternAsPresentationHeader>false</outputPatternAsPresentationHeader><o:p></o:p></p>
<p class="MsoNormal">        </layout><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in"><!—more configuration --><o:p></o:p></p>
<p class="MsoNormal">    </appender><o:p></o:p></p>
<p class="MsoNormal">    <appender name="fooBackup" class="ch.qos.logback.core.FileAppender"><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in"><file>/tmp/logs/fooBackup.log</file>   
<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">        <encoder><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">            <charset>UTF-8</charset><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">            <pattern>%m</pattern><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">            <outputPatternAsPresentationHeader>false</outputPatternAsPresentationHeader><o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in">        </encoder><o:p></o:p></p>
<p class="MsoNormal">    </appender><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><logger name=”FooAppenderTester” level=”INFO” additivity=”false”><o:p></o:p></p>
<p class="MsoNormal">                <appender-ref ref=”foo”/><o:p></o:p></p>
<p class="MsoNormal"></logger><o:p></o:p></p>
<p class="MsoNormal"><logger name=”FooAppender” level=”INFO” additivity=”false”><o:p></o:p></p>
<p class="MsoNormal">                <appender-ref ref=”fooBackup”/><o:p></o:p></p>
<p class="MsoNormal"></logger><o:p></o:p></p>
</div>
</body>
</html>