<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 14 (filtered medium)"><style><!--
/* Font Definitions */
@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;
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=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi Logback community,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I hope the problem is operator error, but I can’t seem to figure this out. My java webapp requirements are such that we need to programmatically create our logback logging components (i.e. no use of an XML configuration file at all). This means I am resetting the LoggerContext and programmatically creating a single PatternLayout along with a ConsoleAppender and 2 specific RollingFileAppenders – 1 for general application logging and 1 dedicated to security-related stuff. If I create these as FileAppenders, they work fine, but as soon as I try and create RollingFileAppenders, the files get created, but nothing is logged out.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’ve provided the code I’m using below. If you look at the createRollingFileAppender method, you will see that I’m creating the TimeBasedRollingPolicy as well. I believe it has something to do with how I’m building up the RollingFileAppender and the Policy.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Any suggestions would be greatly 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>Thanks,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b><span style='font-size:9.0pt;font-family:"Arial","sans-serif";color:#0F243E'>Bob DeRemer<o:p></o:p></span></b></p><p class=MsoNormal><b><span style='font-size:8.0pt;font-family:"Arial","sans-serif";color:#0F243E'>Senior Director, Architecture and Development<o:p></o:p></span></b></p><p class=MsoNormal><span style='font-family:"Arial","sans-serif"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:8.0pt;font-family:"Arial","sans-serif";color:#0F243E'><a href="http://www.burningskysoftware.com/"><span style='color:blue'>http://www.burningskysoftware.com</span></a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:8.0pt;font-family:"Arial","sans-serif";color:#0F243E'>O: 717.505.7923<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:8.0pt;font-family:"Arial","sans-serif";color:#0F243E'>M: 717.881.3986<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>=====================================================================================================================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> public void initializeLoggerContext() throws IOException<o:p></o:p></p><p class=MsoNormal> {<o:p></o:p></p><p class=MsoNormal> // clear logging context<o:p></o:p></p><p class=MsoNormal> LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();<o:p></o:p></p><p class=MsoNormal> loggerContext.reset(); <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create standard layout pattern to be used by all appenders<o:p></o:p></p><p class=MsoNormal> PatternLayout layout = new PatternLayout();<o:p></o:p></p><p class=MsoNormal> layout.setContext(loggerContext);<o:p></o:p></p><p class=MsoNormal> layout.setPattern(LAYOUT_PATTERN);<o:p></o:p></p><p class=MsoNormal> layout.start();<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> // create console appender<o:p></o:p></p><p class=MsoNormal> ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<ILoggingEvent>();<o:p></o:p></p><p class=MsoNormal> consoleAppender.setContext(loggerContext);<o:p></o:p></p><p class=MsoNormal> consoleAppender.setLayout(layout); <o:p></o:p></p><p class=MsoNormal> consoleAppender.start();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create application appender<o:p></o:p></p><p class=MsoNormal> FileAppender<ILoggingEvent> applicationAppender = this.createFileAppender(loggerContext, layout, APPLICATION_LOG);<o:p></o:p></p><p class=MsoNormal> applicationAppender.start();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create security appender<o:p></o:p></p><p class=MsoNormal> RollingFileAppender<ILoggingEvent> securityAppender = this.createRollingFileAppender(loggerContext, layout, SECURITY_LOG);<o:p></o:p></p><p class=MsoNormal> securityAppender.start();<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> // create configuration appender<o:p></o:p></p><p class=MsoNormal> RollingFileAppender<ILoggingEvent> configurationAppender = this.createRollingFileAppender(loggerContext, layout, CONFIGURATION_LOG);<o:p></o:p></p><p class=MsoNormal> configurationAppender.start();<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> // configure top-level ROOT logger<o:p></o:p></p><p class=MsoNormal> Logger rootLogger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);<o:p></o:p></p><p class=MsoNormal> rootLogger.addAppender(consoleAppender);<o:p></o:p></p><p class=MsoNormal> rootLogger.addAppender(applicationAppender);<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> // configure special security logger<o:p></o:p></p><p class=MsoNormal> Logger securityLogger = (Logger)LoggerFactory.getLogger(SECURITY_LOG);<o:p></o:p></p><p class=MsoNormal> securityLogger.setAdditive(false);<o:p></o:p></p><p class=MsoNormal> securityLogger.setLevel(Level.DEBUG);<o:p></o:p></p><p class=MsoNormal> securityLogger.addAppender(securityAppender);<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> // configure special configuration logger<o:p></o:p></p><p class=MsoNormal> Logger configurationLogger = (Logger)LoggerFactory.getLogger(CONFIGURATION_LOG);<o:p></o:p></p><p class=MsoNormal> configurationLogger.setAdditive(false);<o:p></o:p></p><p class=MsoNormal> configurationLogger.setLevel(Level.DEBUG);<o:p></o:p></p><p class=MsoNormal> configurationLogger.addAppender(configurationAppender);<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> private FileAppender<ILoggingEvent> createFileAppender(LoggerContext loggerContext, PatternLayout layout, String logName) throws IOException<o:p></o:p></p><p class=MsoNormal> {<o:p></o:p></p><p class=MsoNormal> FileAppender<ILoggingEvent> appender = new FileAppender<ILoggingEvent>();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // get logs directory from Application Context<o:p></o:p></p><p class=MsoNormal> ApplicationContext appContext = ApplicationContext.getInstance(); <o:p></o:p></p><p class=MsoNormal> String logsRoot = appContext.getLogsDirectory();<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> String logFile = this.getLogFilePath(logsRoot, logName); <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create appender<o:p></o:p></p><p class=MsoNormal> appender.setContext(loggerContext);<o:p></o:p></p><p class=MsoNormal> appender.setName(logName);<o:p></o:p></p><p class=MsoNormal> appender.setFile(logFile);<o:p></o:p></p><p class=MsoNormal> appender.setAppend(true);<o:p></o:p></p><p class=MsoNormal> appender.setLayout(layout);<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> return appender;<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal> private RollingFileAppender<ILoggingEvent> createRollingFileAppender(LoggerContext loggerContext, PatternLayout layout, String logName) throws IOException<o:p></o:p></p><p class=MsoNormal> {<o:p></o:p></p><p class=MsoNormal> // get logs directory from Application Context<o:p></o:p></p><p class=MsoNormal> ApplicationContext appContext = ApplicationContext.getInstance(); <o:p></o:p></p><p class=MsoNormal> String logsRoot = appContext.getLogsDirectory();<o:p></o:p></p><p class=MsoNormal> String logFile = this.getLogFilePath(logsRoot, logName); <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create appender<o:p></o:p></p><p class=MsoNormal> RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<ILoggingEvent>();<o:p></o:p></p><p class=MsoNormal> appender.setContext(loggerContext);<o:p></o:p></p><p class=MsoNormal> appender.setName(logName);<o:p></o:p></p><p class=MsoNormal> appender.setFile(logFile);<o:p></o:p></p><p class=MsoNormal> appender.setAppend(true);<o:p></o:p></p><p class=MsoNormal> appender.setLayout(layout);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // create rollover policy<o:p></o:p></p><p class=MsoNormal> TimeBasedRollingPolicy<ILoggingEvent> policy = new TimeBasedRollingPolicy<ILoggingEvent>();<o:p></o:p></p><p class=MsoNormal> policy.setContext(loggerContext);<o:p></o:p></p><p class=MsoNormal> policy.setFileNamePattern(this.getArchiveFileNamePattern(logsRoot, logName));<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // MUST set parent - linking appender to policy, or you get a NULL ptr exception when starting appender<o:p></o:p></p><p class=MsoNormal> policy.setParent(appender);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> // associate policy with appender<o:p></o:p></p><p class=MsoNormal> appender.setRollingPolicy(policy);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> return appender;<o:p></o:p></p><p class=MsoNormal> }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>