powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + log4j
3 сообщений из 3, страница 1 из 1
Spring MVC + log4j
    #39140494
bananazury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Помогите подключить логирование в мое Spring MVC приложение. Все на Java без xml.
структура проекта такая: -src --main
---java
---webapp
----WEB-INF
-----resources
-----pages


public class WebInitializer implements WebApplicationInitializer{

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
FilterRegistration.Dynamic fr = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
fr.setInitParameter("encoding", "UTF-8");
fr.setInitParameter("forceEncoding", "true");
fr.addMappingForUrlPatterns(null, true, "/*");

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

ctx.register(AppConfig.class);
ctx.register(SecurityConfig.class);
servletContext.addListener(new ContextLoaderListener(ctx));
ctx.setServletContext(servletContext);
ctx.refresh();

ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);

В зависимости добавил log4j. Не могу понять куда правильно добавить log4j.prorerties и как его верно сконфигурировать, и нужно ли что то добавлять в WebInitializer.. Спасибо!
...
Рейтинг: 0 / 0
Spring MVC + log4j
    #39140525
imperfekt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конфигурация log4j довольно подробно описана в спринговском reference guide (версии 4.0 , 4.1 , 4.2 ).

В зависимости от версии log4j и версии сервлет-контейнера могут быть определенные нюансы конфигурации (версии 1.2.x , 2.x ).

При этом нужно учитывать, что создание спринговских классов само по себе что-то логирует, что может приводить к варнингам со стороны log4j (текст может варьировать в зависимости от того, какой класс спринга инициализируется):

Код: java
1.
2.
3.
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.




Перфекционисты, желающие варнинги забороть, должны отключать log4j перед инициализацией соответствующих классов, а потом инициализировать логирование вручную:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
// disable log4j warnings
Logger.getRootLogger().setLevel(Level.OFF);

// initialize spring context
ApplicationContext ctxMsg = new AnnotationConfigApplicationContext(MyConfigurationClass.class);

// start log4j logging
// variable log4jConfigFile is java.io.File
Log4jConfigurer.initLogging(log4jConfigFile.getAbsolutePath(), 600000);




При этом файл с конфигурацией log4j привязан к сервлет-контексту (т.е. должен быть запакован внутри war-файла). Если по каким-то причинам конфигурация должна быть внешней, нужно переписать метод initLogging спринговского класса Log4jConfigurer, чтобы доставать конфигурационный файл из файловой системы:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
import static org.springframework.util.Log4jConfigurer.XML_FILE_EXTENSION;
  /**
     * Initializes log4j logging
     * 
     * @param location Log4j configuration file location
     * @param refreshInterval Refreshing interval for re-reading log4j 
     * configuration file
     */
    public static void initLogging(String location, long refreshInterval) {
        
        try {
            
            // get file
            File file = Paths.get(location).toFile();
            
            // check, whether file exists
            if (!file.exists()) {
                throw new FileNotFoundException("Log4j config file [" + location + "] not found");
            }
            
            // initialize log4j from XML/properties configuration file
            if (location.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
                DOMConfigurator.configureAndWatch(file.getAbsolutePath(), refreshInterval);
            } else {
                PropertyConfigurator.configureAndWatch(file.getAbsolutePath(), refreshInterval);
            }
            
            System.out.println("Tomcat: Logging initialized");
            
        } catch (Exception e) {
            System.out.println("Tomcat exception: " + e.getMessage());
            e.printStackTrace(System.out);
            throw new RuntimeException(e);
        }
    }




Также нужно учесть, что если в самом конфиге log4j используются какие-то переменные (например, путь к папке с логами), перед инициализацией логирования их нужно передавать в System properties, иначе подхватываться они не будут.
...
Рейтинг: 0 / 0
Spring MVC + log4j
    #39140565
bananazury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Почитаю
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + log4j
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]