Это просто предупреждение.
Это происходит, когда файлы конфигурации по умолчанию log4j.properties
и log4j.xml
не могут быть найдены, и приложение не выполняет явной конфигурации.
Чтобы исправить это, просто создайте / скопируйте log4j.properties
или log4j.xml
в свое местоположение по пути classpath (как правило, такие же, как файлы jar).
Необязательно задайте опцию java: -Dlog4j.configuration=file:///path/to/log4j.properties
.
blockquote>
log4j
используетThread.getContextClassLoader().getResource()
для поиска файлов конфигурации по умолчанию и напрямую не проверяет файловую систему. Знание соответствующего места размещенияlog4j.properties
илиlog4j.xml
требует понимания стратегии поиска используемого загрузчика классов.log4j
не предоставляет конфигурацию по умолчанию, поскольку вывод на консоль или файловая система может быть запрещен в некоторых средах.Отладка
Для отладки вы можете попробуйте использовать параметр
-Dlog4j.debug=true
.Конфигурация
log4j.properties
Пример конфигурации
log4j.properties
:# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN
Вот еще один файл конфигурации, который использует несколько добавок:
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Apache Solr
Если вы используете Solr , скопируйте
в местоположение по пути class .
/example/resources/log4j.properties Конфигурация образца
log4j.properties
из Solr выглядит следующим образом:# Logging level solr.log=logs/ log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n #- size rotation with log cleanup. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=4MB log4j.appender.file.MaxBackupIndex=9 #- File to log to and log format log4j.appender.file.File=${solr.log}/solr.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n log4j.logger.org.apache.zookeeper=WARN log4j.logger.org.apache.hadoop=WARN # set to INFO to enable infostream log messages log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
См. также:
Я не могу указать на Вас ни на какую статью о том, как сделать это, но я думаю, что существует несколько библиотек, которые могут быть хорошими моделями о том, как разработать Ваше собственное.
PyAws, например. Я не видел исходный код, таким образом, я не могу сказать Вам, насколько хороший это как пример кода, но функции, и примерами использования в их веб-сайте должна быть полезная модель
дизайна, Универсальный Синтаксический анализатор Канала не является оберткой для веб-сервиса (это - библиотека синтаксического анализатора RSS), но это - яркий пример дизайна, который располагает по приоритетам гибкость использования и скрывающиеся детали реализации. Я думаю, что можно получить очень хорошие идеи использования для обертки там.
Эта учебная страница могла быть хорошим стартовым местом (но она не содержит все, в чем Вы нуждаетесь).
Моя любимая комбинация является httplib2 (или pycurl для производительности) и simplejson. Поскольку REST - больше "способ дизайна" затем реальный "протокол", там не действительно допускающая повторное использование вещь (что я знаю о). На Ruby у Вас есть что-то как ActiveResource. И честно говоря, даже который просто выставил бы некоторые таблицы как веб-сервис, тогда как питание xml/json состоит в том, что они больше похожи на "представления", которые могут содержать несколько объектов, оптимизированных для Вашего приложения. Я надеюсь, что это имеет смысл :-)
Вам стоит взглянуть на PyFacebook. Это оболочка Python для API Facebook, и это один из самых хорошо выполненных API, которые я когда-либо использовал.
Вы можете проверить pythenic jobs , красивую, простую, но хорошо сформированную «оболочку Python вокруг Authentic Jobs ... API» в качестве хорошего примера. Вот чем я сейчас занимаюсь :)