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:
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 –
zu drucken machen Dafür können Sie den Link verweisen, die ich in der Antwort zur Verfügung gestellt habe. –