Как настроить log4j для регистрации на уровне пакетов? - PullRequest
2 голосов
/ 29 сентября 2011

Я хочу войти в несколько файлов журнала (flume и консоль).Как установить log4j как уровень пакета? Т.е. com.mypackage.myclass в flume и другие пакеты в консоль ..

Ответы [ 2 ]

0 голосов
/ 02 мая 2012

Прежде всего вам необходимо настроить log4j на наличие двух именованных регистраторов, один из которых отправляет приложению Console, а другой - Flume.Затем вы можете написать прокси-класс для выполнения ваших звонков в журнале, который направляет звонки log4j к различным регистраторам в зависимости от пакета, в котором находится вызывающий абонент. Это можно сделать, обратившись к стеку текущего потока, например:

public class Logger
{
    public static org.apache.log4j.Logger getLogger()
    {
            // this will get the calling frame, 0=Thread, 1=this, 2=caller
            StackTraceElement stackElement = Thread.currentThread().getStackTrace()[2];
            if(stackElement.getClassName().startsWith("the.package.that.goes.to.flume"))
            {
                return org.apache.log4j.Logger.getLogger("Flume");
            }
            else
            {
                return org.apache.log4j.Logger.getLogger("Console");
            }
        }
    }
}

Приведенный выше код предполагает, что вы назвали два регистратора «Flume» и «Console».

Когда вы совершаете вызов регистрации в своем приложении, используйте Logger.getLogger () вместоперейти к log4j напрямую.

0 голосов
/ 29 сентября 2011

Проверьте это сообщение в блоге http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/

Имеется полный PDF-файл для загрузки о том, как добавить log4j в проект.

Вам необходимо определить категории для разных пакетов. Все описано в PDF выше.

Надеюсь, это поможет.

...