Использование log4j в Google App Engine - PullRequest
4 голосов
/ 02 октября 2010

Мне нужно использовать log4j в моем приложении, но я не знаю, как мне загрузить свойства. Файлы свойств по умолчанию говорят, что я должен поместить log4j.properties в папку / WEB-INF / classes /, но в eclipse я не вижу эту папку и не могу ее создать, потому что она уже существует. И я не могу добавить файлы в эту папку.

Вот ошибка, которую я получаю:

log4j:WARN No appenders could be found for logger (DataNucleus.ClassLoading).
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?

Ответы [ 5 ]

6 голосов
/ 02 октября 2010

Поместите файл log4j.properties в исходный каталог вашего проекта, например, / src.Eclipse скопирует его в целевой каталог сборки.

Я рекомендую использовать SLF4J с Log4J и SpringSource Tool Suite (STS) для вашего проекта.

5 голосов
/ 31 января 2013

Вот как заставить log4j работать, используя Eclipse с плагином Google .

Измените appengine-web.xml следующим образом:

<system-properties> 
  <property name="java.util.logging.config.file" value="WEB-INF/classes/log4j.properties"/> 
</system-properties> 

Вы можете добавить следующий код в ваш сервлет:

import org.apache.log4j.Logger; 
... 
Logger logger = Logger.getLogger("com.foo"); 
logger.debug("Yay2!"); 

Поместите файл log4j.properties в каталог src / со следующим содержимым:

log4j.rootLogger=DEBUG, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n 

Вы можете выполнить Проект> Очистить, а затем разрешить его автоматическую сборку. Сборка копирует файл log4j.properties в / war / WEB-INF / classes /. Вы увидите журнал, отображаемый при запуске от имени> веб-приложения и запросе URL-адреса.

Я знаю, что вы не используете Maven, но я добавлю нижеприведенные инструкции на тот случай, если они понадобятся кому-то еще. Эти инструкции будут работать с com.google.appengine.archetypes: guestbook-archetype .

Добавьте в файл pom.xml следующее:

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.16</version> 
</dependency> 

Добавьте следующий код в guestbook.jsp:

<%@ page import="org.apache.log4j.Logger" %> 
... 
<% 
Logger logger = Logger.getLogger("com.foo"); 
logger.debug("Yay2!"); 
%> 

Создайте src / main / webapp / WEB-INF / classes / log4j.properties с тем же содержимым, что и выше.

Затем запустите:

mvn clean 
mvn verify 
mvn appengine:devserver 

Вы увидите вывод журнала в нашей консоли после вызова http://localhost:8080/.

1 голос
/ 12 июля 2013

Я должен поместить log4j.properties и затем настроить его в web.xml:

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener> 
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

Таким образом, он работает до загрузки пути к классам и работает.Не отправляйте JUL-файлы в log4j, поэтому для этого вам потребуется отдельная конфигурация.

0 голосов
/ 06 мая 2015

Есть хорошая статья о Вход в Google AppEngine для Java (GAE / J) с использованием Slf4j, Log4j и JUL .

В \src\main\webapp\WEB-INF\appengine-web.xml нужно иметь

AppEngine-web.xml

<!-- Configure java.util.logging -->
<system-properties>
    <property name="java.util.logging.config.file" value="WEB-INF/java-util-logging.properties"/>
</system-properties>

, чтобы сообщить GAE, где сконфигурирован java.util.logging (JUL).

В \src\main\webapp\WEB-INF\java-util-logging.properties вам нужно

java-util-logging.properties

.level = ALL

или другое имя уровня JUL, как вам нравится (т.е. «TRACE» не работает).

В \src\main\resources\log4j.properties файле у вас будет

log4j.properties

log4j.rootLogger=ALL, stdout
# or a lower log level such as DEBUG, INFO or WARN. 

# Define the destination and format of our logging
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p: %m  at %C.(%F:%L) on %d{ISO8601}%n

Вам нужно добавить log4j к CLASSPATH. Я использую Gradle для управления зависимостями, поэтому вот мой сценарий сборки:

build.gradle

configurations {
    all*.exclude group: "commons-logging", module: "commons-logging"
}

dependencies {
    // Logging
    compile 'org.slf4j:slf4j-api:1.7.+'
    runtime 'org.slf4j:slf4j-jdk14:1.7.+'
    runtime ('log4j:log4j:1.2.17') {
        exclude group: "com.sun.jdmk", module: "jmxtools"
        exclude group: "com.sun.jmx", module: "jmxri"
        exclude group: "javax.mail", module: "mail"
        exclude group: "javax.jms", module: "jms"
    }    
}

Если вы используете Spring WebMVC , чтобы предоставить файл конфигурации Log4J при запуске приложения, добавьте следующий прослушиватель в дескриптор развертывания.

web.xml

<!-- The definition of the Log4j Configuration -->
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
0 голосов
/ 12 июля 2013

Игнорируйте все, что вы видите в интернете по ключевым словам spring + log4j + appengine.

Решение, которое работало для меня и не создавало двусмысленности, состояло в том, чтобы оставить JUL be и настроить log4j с пружиной отдельно следующим образом:

public class CustomXmlWebApplicationContext extends XmlWebApplicationContext {
@Override
protected void initBeanDefinitionReader(XmlBeanDefinitionReader beanDefinitionReader) {
    super.initBeanDefinitionReader(beanDefinitionReader);

    try {
        Resource res = beanDefinitionReader.getResourceLoader().getResource("classpath:log4j.properties");
        Properties props = new Properties();
        props.load(res.getInputStream());
        PropertyConfigurator.configure(props);
    }
    catch(Throwable e) {
        e.printStackTrace();
    }
}

}

Тогдапросто поместите ваши log4j.properties в корень вашей исходной папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...