log4j, вложенные диагностические контексты - PullRequest
3 голосов
/ 25 мая 2011

У меня есть объект MySession (общий Session, а не web), который работает в его потоке.Я хочу использовать класс NDC для включения некоторых данных, взятых из полей моей MySession: пользователя, который его создал, времени запуска и т. Д. И т. Д. Я хотел бы «визуализировать» поля в сообщении.Это возможно или поддерживается только для сообщений?Заранее спасибо

public class MySession {
    String userName;
    Date startTime;

    public void doSomething() {
        NDC.push(this);                                    //cannot do something like this?
        NDC.push(this.userName 
                  + " " + startTime.toString());          //or should I do this? 
    }

}

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

NDC просто добавляет «контекст» (строку произвольной формы) ко всем сообщениям журнала (которые могут выводиться или не выводиться в зависимости от формата ведения журнала).Вложенная часть означает, что NDC.pop() возвращается в предыдущий (следующий уровень вверх) контекст.

Тем не менее, в любой заданной точке контекст представляет собой одну строку произвольной формы - так что вы правы, что вам придетсянажмите что-то вроде this.username + '.' + this.startTime.toString(), как во втором примере.Из API видно, что push принимает аргумент String;этот контекст используется только с точки зрения того, что он является частью сообщения регистрации (неявно String), поэтому было бы не выгодно принимать произвольные объекты другого типа.

2 голосов
/ 25 мая 2011

Вы можете поместить практически любой текст (или текстовое представление любого объекта) в NDC.Визуализация объектов в NDC не поддерживается, так как toString() (или, по крайней мере, должно) почти всегда достаточно.Слишком большое и / или сложное содержимое в NDC может затруднить чтение журналов, поэтому желательно ограничить содержимое NDC до необходимого минимума.

Например, в вашем случае время начала сеанса в каждом журналесообщение было бы излишним (и потенциально неоднозначным).Было бы лучше вставить только какой-то уникальный идентификатор сеанса в NDC (если у вас есть такая вещь) и записывать любые другие подробности сеанса, такие как имя пользователя, время запуска, в выделенных сообщениях сразу после установкиНДЦ.Это по-прежнему позволяет вам извлекать все необходимые данные сеанса из ваших журналов и идентифицировать соответствующий сеанс для любого конкретного сообщения журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...