# two outputs by default, stdout and ./brooklyn.log
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %m%n
log4j.appender.stdout.Threshold=INFO

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=brooklyn.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %5p %c: %m%n
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=10

# default level is info
log4j.rootLogger=INFO, stdout, R

#these external items can be noisy and uninteresting
log4j.logger.org.hibernate.SQL = WARN
log4j.logger.org.hibernate.type = WARN
log4j.logger.org.hibernate.tool.hbm2ddl = WARN
log4j.logger.org.eclipse.jetty = WARN

# schmizz (sshj) is especially bad, screaming about "errors" that are normal; 
# would be nice to downgrade but difficult, but at least don't write to console
log4j.logger.net.schmizz=INFO, R
log4j.additivity.net.schmizz=false
# similarly ComputeCache is noisy with its info output, write to file only
log4j.logger.org.apache.whirr.service.ComputeCache=DEBUG, R
log4j.additivity.org.apache.whirr.service.ComputeCache=false

# these categories may be interesting
log4j.logger.brooklyn=DEBUG
log4j.logger.grails=INFO
log4j.logger.grails.app=INFO
log4j.logger.grails.app.brooklyn=INFO

# ssh i/o for entities is very useful
log4j.logger.brooklyn.SSH=DEBUG

# for some low-level activity, including jclouds+whirr, detail can be useful
# especially if something goes wrong (or you get bored); turn these off if too noisy
log4j.logger.jclouds=DEBUG
log4j.logger.org.jclouds=DEBUG
log4j.logger.org.apache.whirr=DEBUG
log4j.logger.brooklyn.location.basic.jclouds=DEBUG
log4j.logger.brooklyn.util.internal.SshJschTool=DEBUG
log4j.logger.brooklyn.util.internal.ssh=DEBUG