On 25.07.2012 00:31, Noremac wrote:
I found the newly released Logback-Beagle to look pretty cool. I want it!

However, I see that you need to add the tag <consolePlugin /> to the config
file. This makes me worry a little about the implications on this when that
same config file is used in test and production.

So it looks like if I add the consolePlugin then I'll be having an added
appender trying to spit out logs to the local machine (not desired).

Basically, I only want the extra appender in development. Is there any other
way to do this other than doing it programmatically (by doing a check on
which environment it is in).

You have several options:

1) use logback-text.xml for eh... testing.

2a) conditional logging. See also the documentation at [1].

Assuming "hulk" is the name of the production machine, you could enable sending events to the console plugin on machines other than hulk as follows:

<configuration>

  <if condition='!property("HOSTNAME").contains("hulk")'/>
    <consolePlugin/>
  </if>

  ..... other configuration directives
</configuration>

Note that conditional configuration requires Janino.

2b) use some preset system variable, say "deploymentType":

<configuration>

  <if condition='property("deploymentType").equals("development")'>
    <consolePlugin/>
  </if>

  ..... other configuration directives
</configuration>

2c) compute the deployment type dynamically. See the docs at [2].

<configuration>

  <define name="deploymentType"
          class="a.class.implementing.PropertyDefiner">
  </define>

  <if condition='property("deploymentType").equals("development")'>
    <consolePlugin/>
  </if>

  ..... other configuration directives
</configuration>


3) Programmatically enable sending events to the console plugin. Here is the code:

import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.net.SocketAppender;
import ch.qos.logback.classic.Logger;
import static org.slf4j.Logger.ROOT_LOGGER_NAME;

 ....

 String hostname = "localhost";
 int port = 4321;
 SocketAppender socketAppender = new SocketAppender();
 socketAppender.setRemoteHost(hostname);
 socketAppender.setPort(port);
 socketAppender.setIncludeCallerData(true);
 socketAppender.setReconnectionDelay(10000);

 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
 socketAppender.setContext(lc);

 socketAppender.start();
 // LoggerFactory return type is org.slf4j.Logger
 Logger rootLogger = (Logger) LoggerFactory.getLogger(ROOT_LOGGER_NAME);
 rootLogger.addAppender(socketAppender);


HTH,


[1] http://logback.qos.ch/manual/configuration.html#conditional
[2] http://logback.qos.ch/manual/configuration.html#definingPropsOnTheFly

--
Ceki
http://tinyurl.com/proLogback
_______________________________________________
Logback-user mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-user

Reply via email to