title: log4j - filtering by class instead of level
body: <p>In my app, I need to download 3 different artifacts from a remote ftp server.  After I download each artifact, I validate the artifacts.  And, if there are any validation errors, I need to log them aka</p>
  
  <p>validation errors with Artifact A => A.log</p>
  
  <p>validation errors with Artifact B => B.log</p>
  
  <p>validation errors with Artifact C => C.log</p>
  
  <p>My log4j.properties looks like:</p>
  
  <pre><code>log4j.rootLogger=DEBUG, rollingfile
  log4j.logger.artifactALogger=INFO, AppenderA
  log4j.logger.artifactBLogger=INFO, AppenderB
  log4j.logger.artifactCLogger=INFO, AppenderC
  
  log4j.appender.AppenderA.File=A.log
  log4j.appender.AppenderA.MaxFileSize=5000KB
  log4j.appender.AppenderA.MaxBackupIndex=1
  log4j.appender.AppenderA.layout=org.apache.log4j.PatternLayout
  log4j.appender.AppenderA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
  
  log4j.appender.AppenderB.File=B.log
  log4j.appender.AppenderB.MaxFileSize=5000KB
  log4j.appender.AppenderB.MaxBackupIndex=1
  log4j.appender.AppenderB.layout=org.apache.log4j.PatternLayout
  log4j.appender.AppenderB.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
  
  log4j.appender.AppenderC.File=C.log
  log4j.appender.AppenderC.MaxFileSize=5000KB
  log4j.appender.AppenderC.MaxBackupIndex=1
  log4j.appender.AppenderC.layout=org.apache.log4j.PatternLayout
  log4j.appender.AppenderC.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
  </code></pre>
  
  <p>As you can see, I have 1 appender per logger and the configuration for each appender is exactly the same (except for the name of the log file)...alot of duplication!  Down the line, if I end up with more artifacts to download, I would need to declare another logger and another appender for each artifact.  Something just doesn't seem right to me doing it this way.  Maybe, I'm just not using log4j the way it was designed to be used?  I'm currently filtering log output by class rather than by log level.  Should I be using a different logging API that is more suitable?</p>