Pra fazer isso eu utilizo o Commons Logging integrado com o Log4j
private static final Log log = LogFactory.getLog(<Class>.class);
Se o ClassLoader encontrar em algum lugar o arquivo de configuração do Log4j (xml ou properties) e a sua biblioteca, seu log passa a ser definido por ele... Eu particularmente, trabalho com servidores de aplicação, sempre busco colocar em alguma pasta de configuração do servidor de aplicação, algo simples de se fazer no JBoss. Nada impede que você coloque na raiz do projeto...
Para separar por pacotes em arquivos, o log4j você pode definir um 'apprender' (não sei a tradução) indicando a saída do log para um arquivo...
Um exemplo de '
apprender' em um arquivo log4j.xml:
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="../logs/server_applications.log"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="5000KB"/>
<param name="MaxBackupIndex" value="0"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
Seu 'apprender' pode ter qualquer nome, no caso, esse chama-se FILE
Depois no arquivo de configuração você indica qual 'apprender'será utilizado pelo seu pacote, podendo definir uma prioridade (INFO, DEBUG...) se quiser.
<category name="app.package">
<priority value="DEBUG"/>
<appender-ref ref="FILE"/>
</category>
Bom!, Além disso existem muitas outras coisas possíveis de serem feitas com o Log4j, vale a pena consultar a documentação...
Abraços