Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + log4j / 3 сообщений из 3, страница 1 из 1
30.12.2015, 10:17
    #39140494
bananazury
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC + log4j
Добрый день! Помогите подключить логирование в мое 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
30.12.2015, 11:31
    #39140525
imperfekt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC + log4j
Конфигурация 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
30.12.2015, 12:25
    #39140565
bananazury
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring MVC + log4j
Спасибо! Почитаю
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC + log4j / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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