2013-04-29 2 views
1

Я кодирую на GlassFish Server Open Source Edition 3.1.2.2 (сборка 5) с Netbeans7.3. Я использую java.util.Logging и изменил формат ведения журнала консоли - без изменений в журналах из стекловолокна. Когда я устанавливаю уровень корневого регистратора на Level.ALL, а затем точно настраиваю уровень на основе пакета или класса, я застрял в большом количестве сообщений, которые отправляются различными методами getJNDIName из com.sun.enterprise.container. common.impl.ComponentEnvManagerImpl.Glassfish logs to null Logger - как установить уровень журнала?

Проблема в том, что они, кажется, отправляются на нулевой регистратор, что, очевидно, я не могу получить, чтобы установить его на более тихий уровень.

Я пытался получить доступ к Logger используется не пустая строка, «нуль», но это не будет делать либо :)

Это мой customFormatter:

public class CustomFormatter extends Formatter { 

@Override 
public String format(LogRecord record) { 
    StringBuilder sb = new StringBuilder(); 
    sb.append(record.getLevel()); 
    sb.append(":"); 
    sb.append(record.getLoggerName()); 
    sb.append("\t["); 
    sb.append(record.getSourceMethodName()); 
    sb.append(" @ "); 
    sb.append(record.getSourceClassName()); 
    sb.append("] ");   
    sb.append(new Date(record.getMillis()).toString());   
    sb.append("\n\t\t "); 
    sb.append(formatMessage(record)); 
    sb.append("\n"); 
    return sb.toString(); 
} 

настроить его таким образом, , внутри @Startup @Singleton EJB:

protected static void configureLogger() { 
    try { 
     Logger.getLogger(StartUpSingleton.class.getName()).log(Level.INFO, "Preparing to configure Logger"); 
     Handler hh[] = Logger.getLogger("").getHandlers(); 

     Logger.getLogger(StartUpSingleton.class.getCanonicalName()).log(Level.INFO, "There are {0} available handlers", hh.length); 
     for (Handler hf : hh) { 
      Logger.getLogger(StartUpSingleton.class.getName()).log(Level.INFO, "Handler found : {0}", hf.toString()); 
      if (java.util.logging.ConsoleHandler.class.isInstance(hf)) { 
       hf.setFormatter(new CustomFormatter()); 
       CustomLogLevel.configure(hf); 
      } 

     } 


     Logger.getLogger(StartUpSingleton.class.getName()).log(Level.INFO, "Done with configure Logger"); 

    } catch (SecurityException ex) { 
     Logger.getLogger(StartUpSingleton.class.getName()).log(Level.SEVERE, null, ex); 
    } 


} 
} 

Используя следующий объект конфигурации, где я поставил все детали уровней, которые я хочу:

class CustomLogLevel { 

static void configure(Handler hf) { 

    hf.setLevel(Level.ALL); 
    Logger.getLogger("").setLevel(Level.ALL); 
    // Logger.getLogger(null).setLevel(Level.INFO) is impossible ! 
    Logger.getLogger("null").setLevel(Level.INFO); // I tried ... ;-) 
    Logger.getLogger("com.sun").setLevel(Level.INFO); 
    Logger.getLogger("org").setLevel(Level.INFO); 
    Logger.getLogger("grizzly").setLevel(Level.INFO); 
    Logger.getLogger("global").setLevel(Level.INFO); 
    Logger.getLogger("sun").setLevel(Level.INFO); 
    Logger.getLogger("LogStrings").setLevel(Level.INFO); 

    Logger.getLogger("com.myprivate.package").setLevel(Level.ALL); 
    // ... 



} 

} 

И это журнал, который я получаю на консоли, переполненный событиями FINE или FINER/FINEST, которые не связаны с моими (я хочу, однако, иметь возможность видеть мои собственные события любого уровня и, таким образом, устанавливать глобальный уровень, чтобы информация не работает для меня ...)

FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getCurrentJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getCurrentJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getCurrentJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getCurrentJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getCurrentJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getCurrentJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getCurrentJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
    ComponentEnvManagerImpl: getCurrentJndiNameEnvironment 123ProductV1_/123ProductV1 is class com.sun.enterprise.deployment.WebBundleDescriptor 
FINEST:null [getJndiNameEnvironment @ com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl] Mon Apr 29 17:11:36 CEST 2013 
.../... 

любых предложений о том, как нейтрализовать наводнение журнала (без конфигурации XML)?

Xavier

ответ

0

Решено - Это, очевидно, не ошибка (таковы AnonymousLogger?), Так как различные другие пакеты создания сообщения Вход с пустым именем. Я решил обойти эту проблему с помощью форматера, чтобы отфильтровать их из:

@Override 
public String format(LogRecord record) { 
    if(record.getLoggerName() == null) { 
      return ; 
      } 
    StringBuilder sb = new StringBuilder(); 
    sb.append(record.getLevel()); 
    sb.append(":"); 
    .../... 

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

Смежные вопросы