2016-04-19 3 views
2

Dies ist meine log4j-Eigenschaftendatei. Ich schreibe Protokolle in db. Ich mag die DB-Anmeldeinformationen zur Laufzeit festgelegtSo legen Sie die DB-Anmeldeinformationen von log4j zur Laufzeit fest

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.DB.URL=jdbc:sqlserver://172.16.0.201:1433;databaseName=databaseone;autoReconnect=true 
log4j.appender.DB.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver 
log4j.appender.DB.user=username 
log4j.appender.DB.password=password$123 
log4j.appender.DB.sql=INSERT INTO usage_fact(accessed_date,accessed_item_id,user_id,tenant_id,log_level) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%X{accessed_item_id}','%X{user_id}','%X{tenant_id}','%p') 
log4j.appender.DB.layout=org.apache.log4j.PatternLayout 

Und wie fange ich die SQL-Ausnahme auftritt, während log4j zu db anschließen oder in der Tabelle zu schreiben. Alle Exception-Stack-Traces werden auf der Konsole gedruckt. Ich möchte dies nicht auf der Konsole ausgeben.

public class CoreLogger { 
    public static Logger getLogger(final Class moduleName) { 
     Logger logger = Logger.getLogger(moduleName); 
     Properties prop = new Properties(); 
     try { 
      prop.load(new FileReader("log4j.properties")); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     prop.put("log4j.appender.DB.user", "root"); 
     prop.put("log4j.appender.DB.password", "root"); 
     PropertyConfigurator.configure(prop); 
     return logger; 
    } 
} 

und

static Logger log = CoreLogger.getLogger(Demo.class); 

In Klassen verwenden, um die Instanz des Loggers zu bekommen, auf diese Weise Sie die Anmeldeinformationen festlegen können:

Antwort

3

Sie können die Logging-Framework durch Java-Code wie folgt initialisieren Laufzeit

In Bezug auf Fehler in Dateien aufnehmen, können Sie stdout und stderr auf Ihre Log-Dateien Dario's Antwort, um weitere Informationen darüber zu log4j redirect stdout to DailyRollingFileAppender siehe umleiten.

+0

Runtime Eigenschaften ändern funktioniert gut, aber vor dem log4j versucht, mit der Datenbank seine Druck sql Ausnahme auf meiner Tomcat-Konsole zu verbinden. Wie Log4j interne Protokolle nicht auf der Konsole –

+0

zu drucken machen Dafür können Sie den Link verweisen, die ich in der Antwort zur Verfügung gestellt habe. –

Verwandte Themen