Включить переменную строки подключения перед запросом MySQL. Например, $connt
в этом коде:
$results = mysql_query($connt, "SELECT * FROM users");
Это Краткое введение в руководство log4j немного устарело, но все еще актуально.
Это руководство предоставит вам некоторую информацию о том, как использовать регистраторы и приложения.
Как раз для вас, у вас есть два простых подхода, которые вы можете предпринять.
Сначала нужно просто добавить эту строку к вашему основному методу:
BasicConfigurator.configure();
Второй подход заключается в том, чтобы добавить этот стандартный файл 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
Я получаю ту же ошибку. Здесь проблема, которая приводит к этому сообщению об ошибке:
Я создаю некоторые объекты, которые используют Logger, прежде чем настраивать log4j:
Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);
Решение: Настройте log4j в начале в основной метод:
PropertyConfigurator.configure(xmlLog4JConfigFile);
// or BasicConfigurator.configure(); if you dont have a config file
Моя установка Eclipse не смогла найти log4j.properties
при запуске тестов JUnit из Eclipse, хотя файл был расположен в src/test/resources
.
Причина в том, что Eclipse ( или соединитель m2e ) не копировал содержимое из src/test/resources
в ожидаемую выходную папку target/test-classes
- основная причина заключалась в том, что в свойствах проекта в Java Build Path - > вкладка Источник -> Исходные папки на пути сборки -> src / test / resources , так или иначе появилась запись Excluded: **
. Я удалил эту запись excluded .
В качестве альтернативы я мог бы вручную скопировать src/test/resources/log4j.properties
в target/test-classes/log4j.properties
.
В моем случае ошибкой был флаг «аддитивность». Если это «ложно» для вашего корневого пакета проекта, тогда дочерние пакеты не будут иметь appender, и вы увидите ошибку «appender not found».
В java eclipse скопируйте папку conf_ref в conf.
Если log4j.properties
действительно находится в пути к классам, вы используете Spring Boot для создания файла WAR для развертывания на сервере приложений, вы опускаете файл web.xml
в пользу автоконфигурации Spring Boot, и вы не получаете любые сообщения журнала, вам нужно явно настроить Log4j. Предполагая, что вы используете Log4j 1.2.x:
public class AppConfig extends SpringBootServletInitializer {
public static void main( String[] args ) {
// Launch the application
ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args );
}
@Override
protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
PropertyConfigurator.configure(log4j);
return application;
}
// Other beans as required...
}
Убедитесь, что ваш проект открыт в Eclipse, затем щелкните в меню «Выполнить» в верхней части Eclipse и щелкните по следующему:
Сообщение об ошибке больше не должно появляться.
Еще одна причина, по которой это может произойти (в RCP4), заключается в том, что вы используете несколько фреймворков регистрации в своем целевом файле. В качестве примера это произойдет, если вы используете комбинацию slf4j, log4j и ch.qos.logback.slf4j на вкладке содержимого целевых файлов.
Я думаю, вы должны понять, где файл log4j jar или код Java ищет файлы конфигурации log4j.
src/main/resources/log4j.properties
- путь Eclipse. Поместите их в нужное место, чтобы вам не пришлось жестко кодировать абсолютный путь в коде.
Прочитайте мою статью и образец решения для этого http://askyourquestions.info/2016/ 03/27 / как просматриваемых-где-лог-это-регистратор-в-SLF4J /
Добавьте в качестве первого кода следующее:
Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);
В некоторых случаях может быть недостаток слова static
:
final static Logger logging = Logger.getLogger(ProcessorTest.class);
Если я сделаю регистратор полем экземпляра, я получаю именно это предупреждение:
No appenders could be found for logger (org.apache.kafka.producer.Sender)
Что еще хуже, предупреждение указывает не на ProcessorTest
, где находится ошибка, а на совершенно другой класс (Отправитель) в качестве источника проблем. Класс имеет правильный регистратор заданий и не нуждается в каких-либо изменениях! Мы могли бы искать проблему на века!
Как объяснялось ранее, существует 2 подхода
. Сначала нужно просто добавить эту строку к вашему основному методу:
BasicConfigurator.configure();
Второй подход заключается в добавлении этого стандарта log4j.properties файл в ваш путь к классу:
При втором подходе вам нужно убедиться, что вы правильно инициализировали файл, например.
Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");
Убедитесь, что вы создали нужную папку для хранения файлов журнала.
Я столкнулся с этой проблемой при попытке создать исполняемую банку с maven в intellij 12. Оказалось, что поскольку файл манифеста Java не содержит путь к классу, файл свойств log4j не может быть найден на корневом уровне (где файл jar был выполнен из.)
FYI Я получал регистратор следующим образом:
Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);
И мне удалось заставить его работать с файлом pom, который включили это:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mycompany.mainPackage.mainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Я столкнулся с той же проблемой, когда я использую log4j2. Моя проблема вызвана неправильной зависимой библиотекой:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>runtime</scope>
</dependency>
Вместо этого я должен использовать:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<scope>runtime</scope>
</dependency>
В моем случае у меня есть log4j2.xml, определенный в моем " ресурсов "и указали, что использовать его:
System.setProperty("log4j.configurationFile", "log4j2.xml");
Это просто предупреждение.
Это происходит, когда файлы конфигурации по умолчанию 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 , скопируйте
<solr>/example/resources/log4j.properties
в местоположение по пути class .Конфигурация образца
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
См. также:
Похоже, вам нужно добавить местоположение вашего файла log4j.properties
в Classpath в Eclipse.
Убедитесь, что ваш проект открыт в Eclipse, затем нажмите «Выполнить» в меню top of Eclipse и нажмите на следующее:
Сообщение об ошибке больше не должно появляться.
Быстрое решение:
String log4jConfPath = "/path/to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
log4j.rootLogger=INFO, 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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
Возможно, добавление соответствующего проекта содержит log4j в пути сборки java, я добавляю mahout h2o в него, когда я встретил эту проблему в проекте mahout с использованием eclipse, он работает!
Убедитесь, что файл свойств установлен правильно. И опять же, похоже, что компилятор не может найти файл свойств, вы можете установить его в pom (только при использовании проекта maven).
<build>
<sourceDirectory> src/main/java</sourceDirectory>
<testSourceDirectory> src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build >
Большинство ответов здесь предполагали, что файл log4j.properties
должен быть помещен в нужное место (для проекта maven он должен быть расположен в src/main/resources
)
Но для меня проблема в том, что мой log4j.properties
настроен неправильно. Вот пример, который работает для меня, вы можете попробовать его сначала.
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Первый импорт:
import org.apache.log4j.PropertyConfigurator;
Затем добавьте ниже код к основному методу:
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
Создайте файл по пути и добавьте нижеприведенный код в этот файл.
log4j.rootLogger=INFO, 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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
Вы используете Logger
в своем коде для регистрации сообщения. Appender
- это объект, прикрепленный к Logger
для записи сообщения в конкретную цель. Есть FileAppender
для записи в текстовые файлы или ConsoleAppender
для записи в Консоль. Для получения дополнительной справки вам нужно показать свой код настроек Logger и Appender.
, пожалуйста, прочитайте учебник для лучшего понимания взаимодействия Logger и Appender.
, если вы работаете вместе с большим количеством проектов, вы можете столкнуться с проблемой стиля.
* у вас должен быть один файл lof4j.properties, и в этот файл включены свойства журнала другого проекта.
* Кроме того, вы можете попытаться поместить файлы свойств log4j в путь src, когда проект работает. ОС Linux, файлы других файлов проекта и log4.properties могут находиться в одной папке в местоположении по пути к классам.