Есть несколько проблем со свойствами, которые вы определили.Я постараюсь объяснить каждый из них по одному.Однако вам следует обратиться к руководству log4j2, касающемуся конфигурации свойств , и провести собственное исследование , чтобы найти примеры, в которых используются свойства log4j2, или другие вопросы, касающиеся свойств log4j2, которые помогут вам, когда вы застрялии включите эту информацию в свой вопрос.
Вы сказали, что на консоли отображаются только уровни ошибок и фатальные ошибки.Это связано с тем, что вы не определили корневой логгер.Как указано в руководстве log4j2 :
Каждая конфигурация должна иметь корневой логгер.Если один из них не настроен, будет использован корневой каталог по умолчанию LoggerConfig, который имеет уровень ОШИБКИ и к которому подключен консольный приложение.
, поскольку аддитивность по умолчанию true
и вы не отключили его, все события журнала отправляются в корневой регистратор по умолчанию, как упоминалось выше.В результате в консоль записываются только те события, которые являются ошибочными или фатальными, так как уровень корневого регистратора по умолчанию равен ERROR
Теперь, что касается конфигурации ваших свойств, вот проблемы:
У ваших файловых приложений есть недопустимые атрибуты "MaxBackupIndex", "MaxFileSize".Следующие две строки не применимы к файловому аппендеру:
appender.user.MaxFileSize=5120KB
appender.user.MaxBackupIndex=10
Возможно, вы хотели вместо этого добавить аппликатор файлового файла?Это не совсем понятно из вашего вопроса, поэтому я прокомментировал это, добавив «#» в начале каждой строки.
Если вы используете log4j2 версии 2.6 или выше, тогда вы не понимаете 'эти строки не нужны:
appenders = console, user, system
Loggers = file
Вы не указали, какую версию вы используете, поэтому я предположил, что вы используете последнюю версию вв этом случае эти строки не нужны.Я также прокомментировал эти строки.
Оба ваших дополнения используют одно и то же имя "LOGFILE".Я изменил имя пользовательского приложения на «userLog», а имя системного приложения на «systemLog».(подробности см. далее в ответе)
Вы определили только один регистратор, и его имя не соответствует имени, которое вы используете для его получения.Вот почему все ваши события журнала идут в корневой логгер по умолчанию.У вас есть logger.file.name = de.pares.int_plan
, но de.pares.int_plan
не является одним из имен, которые вы использовали в своем коде Java для получения регистратора.Вы использовали user
и system
.Я исправил их в свойствах (см. Полные свойства позже в ответе).
Вам не хватает «%» до c{1}
в шаблоне обоих файловых дополнений.
В вашем определении логгера logger.file.appenderRefs = file
есть дополнительная строка, которая, по-видимому, не требуется на основании примера в log4j2 руководстве .
Собрав все эти исправления вместе, я получил следующие свойства:
name=PropertiesConfig
property.filename = logs
#Removed the following line since latest log4j2 does not need it
#appenders = console, user, system
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.user.type = File
appender.user.name = userLog
appender.user.fileName=${filename}/user.log
appender.user.layout.type=PatternLayout
appender.user.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
#Removed attributes that do not apply to file appender
#appender.user.MaxFileSize=5120KB
#appender.user.MaxBackupIndex=10
appender.system.type = File
appender.system.name = systemLog
appender.system.fileName=${filename}/system.log
appender.system.layout.type=PatternLayout
appender.system.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
#Removed attributes that do not apply to file appender
#appender.system.MaxFileSize=5120KB
#appender.system.MaxBackupIndex=10
#Removed the following line since latest log4j2 does not need it
#Loggers = file
logger.userFile.name = user
logger.userFile.level = All
logger.userFile.appenderRef.user.ref = userLog
logger.systemFile.name = system
logger.systemFile.level = All
logger.systemFile.appenderRef.system.ref = systemLog
#Adding the following commented lines for reference - this is how you define the root logger in the properties.
#rootLogger.level = info
#rootLogger.appenderRef.console.ref = STDOUT
Для проверки этой конфигурации я использовал следующий код:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SomeClass {
private static Logger userLog = LogManager.getLogger("user");
private static Logger systemLog = LogManager.getLogger("system");
public static void main(String[] args){
systemLog.debug("This is the top of main method");
if(userLog.isDebugEnabled())
userLog.debug("This is some debug!");
userLog.info("Here's some info!");
userLog.error("Some error happened!");
systemLog.info("This is the end of main method");
systemLog.error("woops an error occurred");
}
}
Результатдва файла журнала:
system.log
[DEBUG] 2019-02-16 18:04:04.980 [main] system - This is the top of main method
[INFO ] 2019-02-16 18:04:04.980 [main] system - This is the end of main method
[ERROR] 2019-02-16 18:04:04.980 [main] system - woops an error occurred
user.log
[DEBUG] 2019-02-16 18:04:04.980 [main] user - This is some debug!
[INFO ] 2019-02-16 18:04:04.980 [main] user - Here's some info!
[ERROR] 2019-02-16 18:04:04.980 [main] user - Some error happened!
и консольный вывод:
[DEBUG] 2019-02-16 18:04:04.980 [main] system - This is the top of main method
[DEBUG] 2019-02-16 18:04:04.980 [main] user - This is some debug!
[INFO ] 2019-02-16 18:04:04.980 [main] user - Here's some info!
[ERROR] 2019-02-16 18:04:04.980 [main] user - Some error happened!
[INFO ] 2019-02-16 18:04:04.980 [main] system - This is the end of main method
[ERROR] 2019-02-16 18:04:04.980 [main] system - woops an error occurred
Чтобы полностью понять вывод консоли, пожалуйста, обратитесь к руководству log4j2 - раздел под названием Аддитивность .
Надеюсь, это поможет!