
[ http://jira.qos.ch/browse/LBCLASSIC-117?page=com.atlassian.jira.plugin.syste... ] Ceki Gulcu commented on LBCLASSIC-117: -------------------------------------- SiftingAppender is a perfect match for separating configurations per logging context. See http://logback.qos.ch/manual/appenders.html#SiftingAppender for documentation on SiftingAppender . You would need a new discriminator class based on application name. Here is a possible discriminator implementation: public class ContextBasedDiscriminator extends ContextAwareBase implements Discriminator<LoggingEvent> { // assume a fixed key set to "contextName" static final String KEY = "contextName"; private String defaultValue; private boolean started = false; public ContextBasedDiscriminator() { } public String getDiscriminatingValue(ILoggingEvent event) { // code valid only for logback version 0.9.15. // In logback version 0.9.16, ContextBasedDiscriminator will be part of the standard distribution. More importantly, // the structure of LoggingEvent will change considerably so that the next line of code // will no longer be valid. String contextName = event.getLoggerRemoteView().getLoggerContextView().getName(); if (contextName == null) { return defaultValue; } else { return contextName; } } public boolean isStarted() { return started; } public void start() { started = true; } public void stop() { started = false; } public String getKey() { return KEY ; } public void setKey(String key) { throw new UnsupportedOperationException("Key cannot be set. Using fixed key "+KEY); } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } } And here is a sample configuration fie on the socket server end. <configuration> <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator class="ch.qos.logback.classic.sift.ContextBasedDiscriminator"> <DefaultValue>unknown</DefaultValue> </discriminator> <sift> <appender name="FILE-${contextName}" class="ch.qos.logback.core.FileAppender"> <File>${contextName}.log</File> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</Pattern> </layout> </appender> </sift> </appender> <root level="DEBUG"> <appender-ref ref="SIFT" /> </root> </configuration> Please let me know if the above works for you.
Log context based log splitting in SocketServer -----------------------------------------------
Key: LBCLASSIC-117 URL: http://jira.qos.ch/browse/LBCLASSIC-117 Project: logback-classic Issue Type: New Feature Components: Other Affects Versions: unspecified Reporter: Rick Janda Assignee: Ceki Gulcu
Hello logback team, I have the following setup: I have several web applications running in the same Tomcat instance. The JNDIContextSelector is used to give every deployed webapp its own logging context. The logging events are transmitted to a SocketServer. On the side of the SocketServer I want to split the logging events based on their log context to different files. My idea was to use filters, that filter according the logging context name. But this context name seems to be not reachable from within a filter. Would it be possible to add the logging context name as property to the LoggingEvent class that the name is available on the socket server side? Or add another means to accomplish the logging event splitting on the SocketServer side? This would really simplify our setup as of we would only need one SocketServer for all the Webapps. Thanks in advance for your help. Kind regards, Rick
-- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira