Hallo,
ich habe es im Internet ´gefunden:
Es ist genau das, was ich brauche.
Was ich aber nicht verstehe, warum kann ich nicht logger.log nur im Konstruktor nutzen.
Wie kann ich auf diese Methode log zugreifen?
Ich möchte einfacj innerhalb von if Schleifen logger.log aufrufen.
WAs mache ich falsch?
Danke Euch,
seven-12
ich habe es im Internet ´gefunden:
Code:
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.apache.log4j.*;
import org.apache.log4j.xml.DOMConfigurator;
public class MeinLogger
{
private static final String LOG4J_CONFIG_FILE = "log4j.xml";
private static final String MEIN_LOGGER_NAME = "MeinLogger";
private static final String MESSAGES_RESBUNDLE = "messages.properties";
private static ResourceBundle messagesResBundle;
private static MeinLogger meinLogger;
private static Logger log4jLogger;
// private damit Singleton
private MeinLogger()
{
init();
}
private synchronized void init()
{
try {
DOMConfigurator.configureAndWatch( LOG4J_CONFIG_FILE, 60*1000 );
log4jLogger = Logger.getLogger( MEIN_LOGGER_NAME );
messagesResBundle = ResourceBundle.getBundle( MESSAGES_RESBUNDLE );
log4jLogger.setResourceBundle( messagesResBundle );
} catch( MissingResourceException ex ) {
System.err.println( "Fehler: '" + MESSAGES_RESBUNDLE + "'-.properties-Datei fehlt!" );
} catch( Exception ex ) {
System.err.println( "Fehler bei Logger-Initialisierung!" );
}
}
// Singleton-Instanz
public static synchronized MeinLogger getInstance()
{
if( meinLogger == null ) meinLogger = new MeinLogger();
return meinLogger;
}
public void log( Level level, Object caller, String id, String[] parms )
{
MDC.put( "clss", caller.getClass().getName() );
MDC.put( "id", id );
String message = id;
if( null != messagesResBundle ) {
try {
message = messagesResBundle.getString( id );
} catch( MissingResourceException ex ) {/**/}
}
if( null != parms )
message = MessageFormat.format( message, parms );
switch( level.toInt() ) {
case Priority.ALL_INT:
case Priority.DEBUG_INT: log4jLogger.debug( message ); break;
case Priority.INFO_INT: log4jLogger.info( message ); break;
case Priority.WARN_INT: log4jLogger.warn( message ); break;
case Priority.ERROR_INT: log4jLogger.error( message ); break;
case Priority.FATAL_INT: log4jLogger.fatal( message ); break;
}
}
public boolean isEnabledFor( Level level )
{
return log4jLogger.isEnabledFor( level );
}
}
Es ist genau das, was ich brauche.
Was ich aber nicht verstehe, warum kann ich nicht logger.log nur im Konstruktor nutzen.
Code:
public class MeineKlasse1
{
private static MeinLogger logger = MeinLogger.getInstance();
{
logger.log( Level.ERROR, this, "E002", new String[] { "abc", "xyz" } );
}
}
Wie kann ich auf diese Methode log zugreifen?
Ich möchte einfacj innerhalb von if Schleifen logger.log aufrufen.
WAs mache ich falsch?
Danke Euch,
seven-12