Wenn ich einfach auf Ihre Anforderung antworte, kann ich drei Optionen vorschlagen. Ich benutze die erste für eine Art Bootstrap-Logger-Konfiguration; aber ich dachte, der zweite wäre zuerst notwendig. Ihre dritte Wahl scheint umständlich, da Sie verschiedene log4j API-s aufrufen müssen, um konfiguriert zu werden.
Mit Log4j über die einfache Logging-Framework für Java ...
Machen Sie eine 'minimal' oder 'Standard' log4j.properties Datei in Ihren Ressourcen für die JAR-Datei. Dann erklären einige Statik ...
private static final URL LOGGER_CONFIG_URL = resolveConfigUrl();
:
private static URL resolveConfigUrl(){
URL url = LogConfig.class.getResource(LOGGER_CONFIG_NAME);
if(null == url) // Second chance, try for a file.
{
url = FileHelp.resolveUrlNameAsUrlToFile(LOGGER_CONFIG_NAME);
//-- Make this function with: url = tmpFile.toURI().toURL()
// Plus appropriate try/catch and error checks.
}
return url;
}
private static void configureLogger(){
BasicConfigurator.configure();
PropertyConfigurator.configure(LOGGER_CONFIG_URL );
LOG.info("Logging config done: " + LOGGER_CONFIG_NAME);
}
Schreiben Sie config ein Stream stattdessen eine Datei in Ihrem JAR zu platzieren und dann den Strom in die Log-Konfigurator als String geben und das obige Beispiel (mehr verwenden oder Weniger).
Sie können die slf4j API verwenden, um Ihre Log-Konfiguration zu machen, anstatt direkt in Log4j zu schreiben. Die meisten Orte, die mir gefallen haben, bevorzugen die SLF4J Route.
Persönlich bevorzuge ich Option # 1; es ist leicht zu pflegen. Einfach und Sie können den Code immer neu anordnen, um eine Datei zu akzeptieren/suchen, die zuerst geladen werden soll. Es gibt einige andere seitliche Möglichkeiten, die Sie in Betracht ziehen können, z. B. das programmatische Festlegen von Umgebungsvariablen beim Start. Das scheint mir erfunden zu sein.
Die Art und Weise, wie ich # 1 verwende, besteht darin, eine Standard-/Bootstrap-Logger-Konfiguration über die Ressourcendatei einzurichten, die ihrerseits in die JAR-Datei eingebunden wird. Sie können die Dinge 'später rekonfigurieren, während diese Option Ihnen eine minimalistische Star-Up- oder Bootstrap-Konfiguration gibt. In den frühen Phasen habe ich festgestellt, dass Dinge (noch) nicht protokolliert wurden, weil die Logger-Initialisierung noch auf eingebetteten Apps stattfinden musste. Also behielt ich die einfache Option für Bootstrap (oder Standard) als eine grundlegende seitdem. Hoffe das hilft.
Wenn Sie planen, das Logger-Jar zu schattieren, um es vollständig auszublenden, fügen Sie es als erste Zeile hinzu: LogManager.setFactory (new Log4jContextFactory()); Jetzt können Sie auch alle Konfigurations- und Eigenschaftendateien mit einem Schattenfilter weglassen. – bebbo