2010-10-02 6 views
4

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

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

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 свойства?

ответ

6

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

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

+0

Я все еще получаю сообщения. – Dominik

+0

Каков путь к вашим log4j.properties? Помимо этой проблемы, рассмотрите более современные рамки ведения журнала, такие как [logback] (http://logback.qos.ch/) или [SLF4J] (http://www.slf4j.org/). – dgeske

+0

Это в «.../src». – Dominik

4

Вот как получить log4j, используя Eclipse with the Google plugin.

Изменить 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 

Вы можете выполнить проект> Очистить, затем разрешить его автоматическую сборку, build копирует файл 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/главная/WebAPP/WEB-INF/классы/log4j. свойства с тем же содержимым, что и выше.

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

mvn clean 
mvn verify 
mvn appengine:devserver 

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

+0

это не должно работать, поскольку вы устанавливаете log4j.properties как конфигурацию для java.util.logging! –

+0

Отлично работает. Спасибо, Джон. – underdog

1

Я должен поставить 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

это, кажется, вызывает странные проблемы, потому что при реальном запуске appengine stuff читает одно в classpath: log4j.properties. Пожалуйста, см. Мой ответ для альтернативного решения, которое работает для обоих. –

0

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

Решение, которое работало для меня и не создал неоднозначность была оставить июлю быть и настроить 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 в корне вашей исходной папки.

0

Существует хорошая статья о Logging in the Google AppEngine for Java (GAE/J) with Slf4j, Log4j and 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 (июль) сконфигурирован.

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

java-util-logging.properties

.level = ALL 

или другой из имен уровня Юль, как вам нравится (например, 'СЛЕД' не работает) ,

В \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> 
Смежные вопросы