Как правильно инициализировать log4j?

После добавления log4j в мое приложение каждый раз, когда я выполняю свое приложение, получаю следующий вывод:

 log4j: WARN Для регистратора не найдено никаких приложений (slideselector.facedata.FaceDataParser).
 log4j: WARN Пожалуйста, правильно инициализируйте систему log4j.

Кажется, это означает, что файл конфигурации отсутствует. Где должен находиться этот файл конфигурации и что такое хорошее начальное содержание?

Я использую простой Java для разработки настольного приложения. Так что нет веб-сервера и т. Д. …

Log4j по умолчанию ищет файл с именем log4j.properties или log4j.xml в пути к classам. Вы можете контролировать, какой файл он использует для инициализации, установив свойства системы, как описано здесь (см. Раздел «Процедура инициализации по умолчанию»).

Например:

java -Dlog4j.configuration=customName .... 

Поможет log4j искать файл с именем customName в пути к classам.

Если у вас возникли проблемы, мне полезно включить log4j.debug:

 -Dlog4j.debug 

Он будет печатать на System.out множество полезной информации о том, какой файл он использовал для инициализации, который был настроен регистраторами / добавками и как и т. Д.

Конфигурационный файл может быть файлом свойств java или xml-файлом. Вот пример формата файла свойств, взятого на странице документации log4j :

 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 

Хотя настройка log4j правильна, отлично подходит для «реальных» проектов, вам может понадобиться быстрое и грязное решение, например, если вы просто тестируете новую библиотеку.

Если это так, то вызов статического метода

 org.apache.log4j.BasicConfigurator.configure(); 

установит базовую регистрацию на консоль, а сообщения об ошибках исчезнут.

Если вы просто избавляетесь от всего (например, если вы находитесь в тестах)

 org.apache.log4j.BasicConfigurator.configure(new NullAppender()); 

На странице часто задаваемых вопросов Apache Log4j :

Почему я вижу предупреждение о том, что «Нет приложений, найденных для регистратора» и «Пожалуйста, настройте log4j правильно»?

Это происходит, когда файлы конфигурации по умолчанию log4j.properties и log4j.xml не могут быть найдены, и приложение не выполняет явной конфигурации. log4j использует Thread.getContextClassLoader().getResource() для поиска файлов конфигурации по умолчанию и напрямую не проверяет файловую систему. Знание соответствующего места для размещения log4j.properties или log4j.xml требует понимания страtagsи поиска используемого загрузчика classов. log4j не предоставляет конфигурацию по умолчанию, поскольку вывод в консоль или файловая система может быть запрещен в некоторых средах.

В основном предупреждение « Нет приложений», которое можно найти для журнала, означает, что вы используете log4j регистрации log4j , но вы не добавили в свой конфигурационный файл или файл конфигурации никаких Appenders (таких как FileAppender, ConsoleAppender, SocketAppender, SyslogAppender и т. Д.) пропал, отсутствует.

Существует три способа настройки log4j: с файлом свойств ( log4j.properties ), с XML-файлом и кодом Java ( rootLogger.addAppender(new NullAppender()); ).

log4j.properties

Если у вас есть файл свойств (например, при установке Solr), вам необходимо поместить этот файл в свой каталог classов .

Путь к classам

Ниже приведены некоторые предложения команд в Linux о том, как определить значение classpath:

 $ echo $CLASSPATH $ ps wuax | grep -i classpath $ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf /usr/share/tomcat? 

или из Java: System.getProperty("java.class.path") .

Log4j XML

Ниже приведен базовый файл конфигурации XML для log4j в формате XML:

               

Кот

Если вы используете Tomcat, вы можете поместить свои log4j.properties в: /usr/share/tomcat?/lib/ или /var/lib/tomcat?/webapps/*/WEB-INF/lib/ папку.

Solr

Для справки файл log4j.properties умолчанию log4j.properties выглядит так:

 # 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 не может найти файл свойств в приложении J2EE или WAR?

Короткий ответ: classы log4j и файл свойств не входят в объем одного и того же загрузчика classов.

Log4j использует только метод Class.forName() по умолчанию для загрузки classов. Ресурсы обрабатываются аналогичным образом. Подробнее см. Документацию для java.lang.ClassLoader .

Поэтому, если у вас возникли проблемы, попробуйте загрузить class или ресурс самостоятельно. Если вы не можете найти его, то log4j не будет. 😉


Смотрите также:

  • Краткое введение в log4j на сайте Apache
  • Apache: службы ведения журналов: часто задаваемые вопросы на сайте Apache

Найдите log4j.properties или log4j.xml онлайн с корневым приложением и поместите его в свой путь к classам.

 ### 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.SimpleLayout log4j.rootLogger=debug, stdout 

будет записываться на консоль. Я предпочитаю вести журнал в файл, чтобы потом исследовать его.

 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.maxFileSize=100KB log4j.appender.file.maxBackupIndex=5 log4j.appender.file.File=test.log log4j.appender.file.threshold=debug log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=debug,file 

хотя для подробных протоколирующих приложений 100 КБ обычно необходимо увеличить до 1 МБ или 10 МБ, особенно для отладки.

Лично я настраивал несколько регистраторов и устанавливал корневой журнал для предупреждения или уровня ошибки вместо отладки.

Вы можете установить местоположение своих log4j.properties из своего приложения java, используя:

 org.apache.log4j.PropertyConfigurator.configure(file/location/log4j.properties) 

Дополнительная информация доступна здесь: https://logging.apache.org/log4j/1.2/manual.html

Другой способ сделать это, не помещая файл свойств в путь к classам, заключается в том, чтобы напрямую установить свойство из java-кода. Вот пример кода.

 public class Log4JSample { public static void main(String[] args) { Properties properties=new Properties(); properties.setProperty("log4j.rootLogger","TRACE,stdout,MyFile"); properties.setProperty("log4j.rootCategory","TRACE"); properties.setProperty("log4j.appender.stdout", "org.apache.log4j.ConsoleAppender"); properties.setProperty("log4j.appender.stdout.layout", "org.apache.log4j.PatternLayout"); properties.setProperty("log4j.appender.stdout.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n"); properties.setProperty("log4j.appender.MyFile", "org.apache.log4j.RollingFileAppender"); properties.setProperty("log4j.appender.MyFile.File", "my_example.log"); properties.setProperty("log4j.appender.MyFile.MaxFileSize", "100KB"); properties.setProperty("log4j.appender.MyFile.MaxBackupIndex", "1"); properties.setProperty("log4j.appender.MyFile.layout", "org.apache.log4j.PatternLayout"); properties.setProperty("log4j.appender.MyFile.layout.ConversionPattern","%d{yyyy/MM/dd HH:mm:ss.SSS} [%5p] %t (%F) - %m%n"); PropertyConfigurator.configure(properties); Logger logger = Logger.getLogger("MyFile"); logger.fatal("This is a FATAL message."); logger.error("This is an ERROR message."); logger.warn("This is a WARN message."); logger.info("This is an INFO message."); logger.debug("This is a DEBUG message."); logger.trace("This is a TRACE message."); } 

}

Вы можете настроить уровень журнала с помощью setLevel () .

Уровни полезны, чтобы легко установить тип информации, которую вы хотите отобразить в программе.

Например:

 Logger.getRootLogger().setLevel(Level.WARN); //will not show debug messages 

Набор возможных уровней:

TRACE,

ОТЛАЖИВАТЬ,

ИНФОРМАЦИЯ,

WARN,

ОШИБКА и

FATAL

Согласно руководству Logging Services

 import org.apache.log4j.BasicConfigurator; 

Вызовите этот метод

 BasicConfigurator.configure(); 

Чтобы включить -Dlog4j.debug , я -Dlog4j.debug к системным, расширенным системным настройкам, переменным среды и _JAVA_OPTIONS системную переменную _JAVA_OPTIONS на -Dlog4j.debug .

В чем вы развиваетесь? Вы используете Apache Tomcat?

 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n 

У меня есть свойства, подобные этому в приложении Java.

Мой log4j был исправлен ниже файлом свойств:

 ## 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.SimpleLayout log4j.rootLogger=debug, stdout log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.maxFileSize=100KB log4j.appender.file.maxBackupIndex=5 log4j.appender.file.File=./logs/test.log log4j.appender.file.threshold=debug log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=debug,file 

Я создал файл log4j.properties в папке ресурсов рядом с файлом hibernate.cfg.xml и заполнил его текстом ниже:

 log4j.rootLogger=INFO, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n 

теперь я избавился от предупреждений и ошибок

Просто создайте log4j.properties в папке src / main / assembly. В зависимости от того, хотите ли вы, чтобы сообщения журнала отображались в консоли или в файле, вы изменяете свой файл. Следующие сообщения будут отображаться на консоли.

 # 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 

Как объяснялось ранее, существует 2 подхода

Сначала нужно просто добавить эту строку к вашему основному методу:

 BasicConfigurator.configure(); 

Второй подход заключается в том, чтобы добавить этот стандартный файл log4j.properties в ваш путь к classам:

При использовании второго подхода вам необходимо убедиться, что вы правильно инициализировали файл.

Например.

 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"); 

Убедитесь, что вы создали необходимую папку для хранения файлов журнала.

Попробуйте установить атрибут debug в лог4j: узел конфигурации в значение true.

  

Он печатает информацию, когда файл конфигурации считывается и используется для настройки среды log4j. У вас может быть больше информации, чтобы решить вашу проблему.

API протоколированияAPI протоколирования Java облегчает обслуживание и обслуживание программного обеспечения на сайтах клиентов, создавая отчеты журналов, подходящие для анализа конечными пользователями, системными администраторами, инженерами полевых служб и командами разработки программного обеспечения. API-интерфейсы регистрации регистрируют информацию, такую ​​как сбои безопасности, ошибки конфигурации, узкие места производительности и / или ошибки в приложении или платформе. Основной пакет включает поддержку доставки текстовых или отформатированных записей журнала XML в память, выходные streamи, консоли, файлы и сокеты. Кроме того, API протоколирования могут взаимодействовать с службами ведения журналов, которые уже существуют в операционной системе хоста.

Пакет java.util.logging «Предоставляет classы и интерфейсы основных средств регистрации Java-платформы.


Log4j 1.x «log4j – популярная утилита ведения журнала на Java. Log4j – проект с открытым исходным кодом, основанный на работе многих авторов. Он позволяет разработчику контролировать, какие операторы журналов выводятся в различные местоположения, используя Appenders [консоль, файлы, БД и электронная почта]. Он полностью настраивается во время выполнения, используя внешние файлы конфигурации.

Log4j имеет три основных компонента:

  • Регистраторы – [OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE]
  • Appenders

    • Регистрация журнала Apache: ConsoleAppender, FileAppender, RollingFileAppender, DailyRollingFileAppender, JDBCAppender- Driver , SocketAppender

    • Log4J Appender для MongoDB: MongoDbAppender – Driver

  • Макеты – [PatternLayout, EnhancedPatternLayout]

Файлы конфигурации могут быть записаны в формате XML или в свойствах Java (ключ = значение).

  1. log4j_External.properties «Формат Java-свойств (ключ = значение)

Строка между открытием « $ { » и закрытием « } » интерпретируется как ключ. Значение замещенной переменной может быть определено как системное свойство или в самом файле конфигурации. Задайте специальные параметры приложения. «Log4j.appender.appenderName.option = значение. Для каждого именованного приложения вы можете настроить свой макет.

 log4j.rootLogger=INFO, FILE, FILE_PER_SIZE, FILE_PER_DAY, CONSOLE, MySql #log.path=./ log.path=E:/Logs # https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html # {%-5p - [WARN ,INFO ,ERROR], %5p 0- [ WARN, INFO,ERROR]} log.patternLayout=org.apache.log4j.PatternLayout log.pattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n # System.out | System.err log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=System.err log4j.appender.CONSOLE.layout=${log.patternLayout} log4j.appender.CONSOLE.layout.ConversionPattern=${log.pattern} # File Appender log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=${log.path}/logFile.log #log4j:ERROR setFile(null,false) call failed. - Defaults setFile(null,true) #log4j.appender.FILE.Append = false log4j.appender.FILE.layout=${log.patternLayout} log4j.appender.FILE.layout.ConversionPattern=${log.pattern} # BackUP files for every Day. log4j.appender.FILE_PER_DAY=org.apache.log4j.DailyRollingFileAppender # [[ Current File ] - logRollingDayFile.log ], { [BackUPs] logRollingDayFile.log_2017-12-10, ... } log4j.appender.FILE_PER_DAY.File=${log.path}/logRollingDayFile.log log4j.appender.FILE_PER_DAY.DatePattern='_'yyyy-MM-dd log4j.appender.FILE_PER_DAY.layout=${log.patternLayout} log4j.appender.FILE_PER_DAY.layout.ConversionPattern=${log.pattern} # BackUP files for size rotation with log cleanup. log4j.appender.FILE_PER_SIZE=org.apache.log4j.RollingFileAppender # [[ Current File ] - logRollingFile.log ], { [BackUPs] logRollingFile.log.1, logRollingFile.log.2} log4j.appender.FILE_PER_SIZE.File=${log.path}/logRollingFile.log log4j.appender.FILE_PER_SIZE.MaxFileSize=100KB log4j.appender.FILE_PER_SIZE.MaxBackupIndex=2 log4j.appender.FILE_PER_SIZE.layout=${log.patternLayout} log4j.appender.FILE_PER_SIZE.layout.ConversionPattern=${log.pattern} # MySql Database - JDBCAppender log4j.appender.MySql=org.apache.log4j.jdbc.JDBCAppender log4j.appender.MySql.driver=com.mysql.jdbc.Driver log4j.appender.MySql.URL=jdbc:mysql://localhost:3306/automationlab log4j.appender.MySql.user=root log4j.appender.MySql.password= log4j.appender.MySql.layout=org.apache.log4j.EnhancedPatternLayout log4j.appender.MySql.layout.ConversionPattern=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m'); #log4j.appender.MySql.sql=INSERT INTO `logdata` VALUES ('%p', '%d{yyyy-MM-dd HH:mm:ss}', '%C', '%M', '%L', '%m'); # Direct log events[Messages] to MongoDB Collection - MongoDbAppender log.mongoDB.hostname=loalhost log.mongoDB.userName=Yash777 [email protected] log.mongoDB.DB=MyLogDB log.mongoDB.Collection=Logs log4j.appender.MongoDB=org.log4mongo.MongoDbAppender log4j.appender.MongoDB.hostname=${log.mongoDB.hostname} log4j.appender.MongoDB.userName=${log.mongoDB.userName} log4j.appender.MongoDB.password=${log.mongoDB.password} log4j.appender.MongoDB.port=27017 log4j.appender.MongoDB.databaseName=${log.mongoDB.DB} log4j.appender.MongoDB.collectionName=${log.mongoDB.Collection} log4j.appender.MongoDB.writeConcern=FSYNCED 

Структура таблицы MySQL для табличных logdata

 CREATE TABLE IF NOT EXISTS `logdata` ( `Logger_Level` varchar(5) COLLATE utf8_unicode_ci NOT NULL, `DataTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `ClassName` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `MethodName` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `LineNumber` int(10) NOT NULL, `Message` text COLLATE utf8_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
  1. log4j_External.xml «XML log4j: конфигурация с открытым DTD-файлом
                                          

  1. Конфигурация Log4j из URL-адреса в программе Java:

Чтобы указать пользовательскую конфигурацию с внешним файлом, используемый class должен реализовать интерфейс Configurator .

когда файлы конфигурации по умолчанию «log4j.properties», «log4j.xml» недоступны

  • Для «log4j.properties» вы можете использовать метод PropertyConfigurator .configure (java.net.URL).
  • Для «log4j.xml» будет использоваться DOMConfigurator .
 public class LogFiles { // Define a static logger variable so that it references the Logger instance named "LogFiles". static final Logger log = Logger.getLogger( LogFiles.class ); @SuppressWarnings("deprecation") public static void main(String[] args) { System.out.println("CONFIGURATION_FILE « "+LogManager.DEFAULT_CONFIGURATION_FILE); System.out.println("DEFAULT_XML_CONFIGURATION_FILE = 'log4j.xml' « Default access modifier"); String fileName = //""; //"log4j_External.xml"; "log4j_External.properties"; String configurationFile = System.getProperty("user.dir")+"/src/" + fileName; if( fileName.contains(".xml") ) { DOMConfigurator.configure( configurationFile ); log.info("Extension *.xml"); } else if ( fileName.contains(".properties") ) { PropertyConfigurator.configure( configurationFile ); log.info("Extension *.properties"); } else { DailyRollingFileAppender dailyRollingAppender = new DailyRollingFileAppender(); dailyRollingAppender.setFile("E:/Logs/logRollingDayFile.log"); dailyRollingAppender.setDatePattern("'_'yyyy-MM-dd"); PatternLayout layout = new PatternLayout(); layout.setConversionPattern( "%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS} %C{1}:%12.20M:%L - %m %n" ); dailyRollingAppender.setLayout(layout); dailyRollingAppender.activateOptions(); Logger rootLogger = Logger.getRootLogger(); rootLogger.setLevel(Level.DEBUG); rootLogger.addAppender(dailyRollingAppender); log.info("Configuring from Java Class."); } log.info("Console.Message."); method2(); methodException(0); } static void method2() { log.info("method2 - Console.Message."); } static void methodException(int b) { try { int a = 10/b; System.out.println("Result : "+ a); log.info("Result : "+ a); } catch (Exception ex) { // ArithmeticException: / by zero log.error(String.format("\n\tException occurred: %s", stackTraceToString(ex))); } } public static String stackTraceToString(Exception ex) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); ex.printStackTrace(pw); return sw.toString(); } } 

Если мы используем apache commons logging wrapper поверх log4j, тогда нам нужно иметь как банки, доступные в classpath. Кроме того, commons-logging.properties и log4j.properties/xml должны быть доступны в classpath.

Мы также можем передать имя classа реализации и имя log4j.properties как JAVA_OPTS либо с использованием -Dorg.apache.commons.logging.Log= -Dlog4j.configuration= . То же самое можно сделать, установив JAVA_OPTS в случае приложения / веб-сервера.

Это поможет экстернализировать свойства, которые можно изменить при развертывании.

Это альтернативный способ использования .yaml

Логическая структура:

 Configuration: Properties: Appenders: Loggers: 

Образец:

 Configutation: name: Default Properties: Property: name: log-path value: "logs" Appenders: Console: name: Console_Appender target: SYSTEM_OUT PatternLayout: pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" File: name: File_Appender fileName: ${log-path}/logfile.log PatternLayout: pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" Loggers: Root: level: debug AppenderRef: - ref: Console_Appender Logger: - name: ...<...> level: debug AppenderRef: - ref: File_Appender level: error 

Ссылка: LOG4J 2 КОНФИГУРАЦИЯ: ИСПОЛЬЗОВАНИЕ YAML

Для тестирования быстрый, грязный способ, включая настройку уровня журнала:

 org.apache.log4j.BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.WARN); // set to Level.DEBUG for full, or Level.OFF.. 
  • Использование другого Web.config в среде разработки и производства
  • Как добавить class фильтра в Spring Boot?
  • Данный URL-адрес не разрешен конфигурацией приложения
  • Включить удаленные подключения tcp \ ip к серверу sql. Экспресс уже установленная firebase database с кодом или скриптом (запрос)
  • Как настроить gtk на Visual Studio 2010
  • Как получить конфигурационные параметры в Symfony2 Twig Templates
  • Как настроить 2 навигации в zf2?
  • конфигурация страtagsи именования spring - hibernate 5
  • Как изменить имя машины по умолчанию «по умолчанию»?
  • Как исправить: обработчик «PageHandlerFactory-Integrated» имеет плохой модуль «ManagedPipelineHandler» в своем списке модhive
  • Что я должен установить JAVA_HOME на OSX
  • Interesting Posts

    Ошибка в Process.Start () – система не может найти указанный файл

    В чем преимущество непрерывности String?

    Удалить стрелку из ярлыков в Windows 8

    C # 4.0 необязательные аргументы out / ref

    Каков приоритет оператора запятой внутри условного оператора в C ++?

    Что означает, что свойство должно быть и значение NULL?

    Пример использования андроидов lrucache

    Как обновить новую версию eclipse вместо использования нового загруженного пакета

    Файлы Windows 7 HOSTS продолжают возвращать свое разрешение обратно на READ-ONLY

    Включение драйвера AMD Catalyst в Windows 8 приводит к отключению дисплея ноутбука

    SOAP-клиент в .NET – ссылки или примеры?

    Как преобразовать несколько файлов в кодировку UTF-8 с помощью инструментов командной строки * nix?

    Анимация пунктирной линии с помощью java.awt.BasicStroke

    Есть ли способ сделать R звуковой сигнал / воспроизвести звук в конце скрипта?

    Как рекурсивно найти последний измененный файл в каталоге?

    Давайте будем гением компьютера.