Ситуация следующая: Для логирования использую log4j2
в связке с slf4j
. Проект деплою на tomcat8
. Конфигурация програмная(без xml)
Проблема следующая: В тестах логирование работает: файлы создаются, в консоль все пишется. После деплоя во время работы приложения на сервере логирование(ни в файл ни в консоль) не работает(используется стандартное).
Думал проблема с правами, но дело не в них(на всякий случай выдал права 777).
В web-app
тоже на всякий случай закидывал свой конфиг, но ничего не изменилось.
Конфигурационный файл log4j:
@Plugin(name = "Log4j2Config", category = "ConfigurationFactory")
@Order(0)
public class Log4j2Config extends ConfigurationFactory {
private static final String NAME_ROLLING_FILE = "com.bla";
private static final String NAME_CONSOLE = "Console";
private static final String PATTERN_LAYOUT = "%d [%t] %-5level %logger{36}: %msg%n";
private static final String PATH = "Documents/tomcat/logs/socialNetLogs/";
private static final String LOG_FILE_NAME = "socialNet.log";
private static final String LOG_FILE_NAME_PATTERN = "socialNet-%d{dd-MM-yyyy}-%i.log";
@Override
public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
return getConfiguration(loggerContext, source.toString(), null);
}
@Override
public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {
return new Log4jConfiguration();
}
@Override
protected String[] getSupportedTypes() {
return new String[]{"*"};
}
private static class Log4jConfiguration extends DefaultConfiguration {
public Log4jConfiguration() {
super.doConfigure();
initAppenderLogger(getRollingFileAppender(NAME_ROLLING_FILE), getLogger(NAME_ROLLING_FILE, Level.DEBUG), Level.DEBUG, NAME_ROLLING_FILE);
initAppenderLogger(getConsoleAppender(NAME_CONSOLE), getLogger(NAME_CONSOLE, Level.DEBUG), Level.DEBUG, NAME_CONSOLE);
initAppenderLogger(getConsoleAppender(getRootLogger().getName()), getRootLogger(), Level.ERROR, getRootLogger().getName());
}
private void initAppenderLogger(Appender appender, LoggerConfig loggerConfig, Level level, String loggerName) {
appender.start();
addAppender(appender);
addLogger(loggerName, loggerConfig);
getLogger(loggerName).addAppender(appender, level, null);
System.out.println("success" + getLogger(loggerName).getName() + appender.getName());
}
private Appender getRollingFileAppender(String appenderName) {
final TimeBasedTriggeringPolicy timeBasedTriggeringPolicy = TimeBasedTriggeringPolicy.newBuilder()
.withInterval(1)
.withModulate(true)
.build();
String oneMB = "1 M";
final SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy = SizeBasedTriggeringPolicy.createPolicy(oneMB);
final CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(timeBasedTriggeringPolicy,
sizeBasedTriggeringPolicy);
final DefaultRolloverStrategy rolloverStrategy = DefaultRolloverStrategy.newBuilder()
.withMax("14")
.withMin("1")
.withFileIndex("max")
.withConfig(this)
.withCompressionLevelStr(Deflater.NO_COMPRESSION + "")
.build();
System.out.println("in rolling file");
return RollingFileAppender.newBuilder()
.withName(appenderName)
.withAdvertise(Boolean.parseBoolean(null))
.withAdvertiseUri(null)
.withAppend(true)
.withBufferedIo(true)
.withBufferSize(8192)
.withLayout(PatternLayout.newBuilder()
.withPattern(PATTERN_LAYOUT)
.withConfiguration(this)
.build())
.withPolicy(policy)
.withStrategy(rolloverStrategy)
.withFilePattern(PATH + LOG_FILE_NAME_PATTERN)
.withFileName(PATH + LOG_FILE_NAME)
.build();
}
private Appender getConsoleAppender(String appenderName) {
return ConsoleAppender.newBuilder()
.withName(appenderName)
.withLayout(
PatternLayout.newBuilder()
.withPattern(PATTERN_LAYOUT)
.withConfiguration(this)
.build())
.build();
}
private LoggerConfig getLogger(String loggerName, Level level) {
//System.out.println("in logger for rolling");
return LoggerConfig.createLogger(false, level,
loggerName, null, new AppenderRef[]{}, null, this, null);
}
}
}
В мавене все зависимости проставлены
Структура проекта
Класс конфигурации точно инициализируется(добавил внутрь несколько SOUT)
Работаю на Mac OS(на всякий случай ибо причину ищу очень долго)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В гугла есть апи для работы с переводчиком (https://translategoogle
У меня есть настройки в виде txt файла, этот txt файл будет находится в jar архиве
ЗдравствуйтеСегодня получил отчет от Firebase Crash Reporting и это уже второй такой отчет