ceki <ceki@...> writes:

> 
> On 28.07.2012 00:37, Noremac wrote:
> > Thank you for the reply. The problem I've been having is that I'm not
> > finding accessible some of the specific pieces of the configuration. How
> > can I test that the markerEvaluator is set up correctly? There's no method
> > to get the evaluator, only to set the evaluator.
> 
> Could you post your code and config file so we can have a look at it? 
> You can change logger names etc to protect the innocent.


So the config file is basic, as I will be programmatically adding appenders:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <!-- Conversion rules; a custom pattern token to use in the pattern layout 
class -->
  <conversionRule conversionWord="threadHash" 
converterClass="stuff.util.logging.ThreadHashConverter" />
  
  <!-- Write logs out to the console -->
  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>[\(%-6threadHash\) app=iv  %d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level 
%-25logger{25} - %msg%n</pattern>
    </encoder>
  </appender>

    
  <!-- Specify what loggers are to be used -->
  <root level="INFO">
    <appender-ref ref="stdout"/>
  </root>
</configuration>

The appender is added like so:
        public void createAdminNotifyAppender(LoggerContext lc, 
AppConfigPropertiesReader propReader)
        {
                logger.info("Setting up logback admin_notify logging");
                
            //Set up the admin notify appender programatically (needs to use 
the 
properties from the propReader above)
            OnMarkerEvaluator markerEvaluator = new OnMarkerEvaluator();
            markerEvaluator.setContext(lc);
            markerEvaluator.addMarker("ADMIN_NOTIFY");
            markerEvaluator.setName("ADMIN_NOTIFY");
            markerEvaluator.start();

            PatternLayout patternLayout = new PatternLayout();
            patternLayout.setContext(lc);
            patternLayout.setPattern("[\\(%-6threadHash\\) app=iv  
%d{yyyy-MM-dd 
HH:mm:ss.SSS}] %-5level %-25logger{25} - %msg%n");
            patternLayout.start();

            String adminEmails = propReader.getProperty("adminEmail");

            SMTPAppender adminNotifyAppender = new SMTPAppender();
            adminNotifyAppender.setContext(lc);
            adminNotifyAppender.setEvaluator(markerEvaluator);
            
adminNotifyAppender.setSMTPHost(propReader.getProperty("mail.smtp.host"));
            if (adminEmails == null)
            {
                logger.error("No Admin Emails are set! No one will be notified 
for system alerts");
            }
            else
            {
                for (String adminEmail : adminEmails.split(",")) { 
adminNotifyAppender.addTo(adminEmail); };
            }
            
adminNotifyAppender.setFrom(propReader.getProperty("sysEmailAddressNoReply"));
            adminNotifyAppender.setSubject("System Alert! [" + 
propReader.getProperty("environment") + "]");
            adminNotifyAppender.setLayout(patternLayout);
            adminNotifyAppender.setName("ADMIN_NOTIFY");
            adminNotifyAppender.start();

            Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
            rootLogger.addAppender(adminNotifyAppender);
        }

and my test case is as follows:
        private void testSimpleSMTPAppenderSetup(LoggingMarker marker, String 
email, Logger rootLogger, AppConfigPropertiesReader propReader)
        {
                SMTPAppender smtpAppender = 
(SMTPAppender)rootLogger.getAppender(LoggingMarker.ADMIN_NOTIFY.getName());
                
                //check that the necessary fields were set
                assertEquals("smtpHost set correctly", 
smtpAppender.getSMTPHost(), propReader.getProperty("mail.smtp.host"));
                assertEquals("from address set correctly", 
smtpAppender.getFrom(), propReader.getProperty("sysEmailAddressNoReply"));
                assertTrue("environment set correctly", 
smtpAppender.getSubject().contains(propReader.getProperty("environment")));
                
                List<String> appenderEmailsWithSuffix = 
smtpAppender.getToAsListOfString();
                List<String> appenderEmails = new ArrayList<String>();
                String[] propEmails = 
propReader.getProperty("adminEmail").split(",");
                
                for (String emailAddress : appenderEmailsWithSuffix)
                {
                        appenderEmails.add(emailAddress.replaceFirst("%nopex$", 
""));
                }
                assertTrue("to-emails are set correctly", 
appenderEmails.containsAll(Arrays.asList(propEmails)));
                
                //TODO find a way to test that the logs are getting filtered by 
the markerEvaluator (or that it is there set on the logger)
        }

_______________________________________________
Logback-user mailing list
Logback-user@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user

Reply via email to