barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком log4j. Показать все сообщения
Показаны сообщения с ярлыком log4j. Показать все сообщения

понедельник, 7 сентября 2015 г.

пятница, 19 июня 2015 г.

WSO2 ESB 4.8.1: логирование работы Entitlement-медиатора

В log4j.properties шины достаточно добавить строчку:
log4j.logger.org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator=DEBUG
после чего в логах шины появится достаточно отладочной информации, чтобы понять, что происходит внутри медиатора:
TID: [0] [ESB] [2015-06-19 15:16:41,294] DEBUG {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator} -  Mediation for Entitlement started {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator}
TID: [0] [ESB] [2015-06-19 15:16:41,295] DEBUG {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator} -  Subject ID is : ***** Resource ID is : /services/***** Action ID is : ****. {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator}
TID: [0] [ESB] [2015-06-19 15:16:41,993] DEBUG {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator} -  Entitlement Decision is : Deny {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator}
TID: [0] [ESB] [2015-06-19 15:16:41,993] DEBUG {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator} -  User is not authorized to perform the action {org.wso2.carbon.identity.entitlement.mediator.EntitlementMediator}

суббота, 1 июня 2013 г.

Отладка конфигурации log4j

Включается системным свойством log4j.debug, например, при старте jvm:
-Dlog4j.debug
Бывает крайне полезна, чтобы, скажем, понять, откуда из classpath log4j цепляет свой log4j.properties.

вторник, 11 декабря 2012 г.

WSO2 ESB: раздельная настройка логирования для разных прокси-сервисов


В WSO2 ESB можно разделить логи, относящиеся к разным прокси-сервисам. Для этого нужно в файл настройки логирования (repository/conf/log4j.properties) добавить следующее:
log4j.category.SERVICE_LOGGER.MyProxy=FATAL, MYPROXYADAPTER
log4j.additivity.MYPROXYADAPTER=false
log4j.appender.MYPROXYADAPTER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MYPROXYADAPTER.File=${carbon.home}/repository/logs/custom/MyProxy.log
log4j.appender.MYPROXYADAPTER.Append=true
log4j.appender.MYPROXYADAPTER.layout=org.apache.log4j.PatternLayout
log4j.appender.MYPROXYADAPTER.layout.ConversionPattern=%d{HH:mm:ss,SSS}%n%m%n
 , где "MyProxy" - имя прокси-сервиса, для которого настраивается логирование. Конфигурация аппендера может быть любой другой, здесь я её привел просто для примера.


вторник, 17 июля 2012 г.

org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.

Часа полтора ушло на казалось бы простейшую проблему: использовать apache commons logging в связке с log4j. Проблема была в следующем: в веб-приложении, разворачиваемом на Tomcat 6, имеются файлы конфигурации commons-logging и log4j со следующим содержимым:

commons-logging.properties:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
log4j.properties:
log4j.debug=false
log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%-4r [%t] %-5p %c %x - %m%n 
Первый конфигурационный файл должен подхватываться commons-logging`ом самостоятельно как первый с таким именем в CLASSPATH, путь ко второму указывается явно в web.xml. Сами jar-ники commons-logging-1.1.1.jar и log4j-1.2.15.jar в /WEB-INF/lib приложения лежат. Однако при попытке чтобы то ни было залогировать в веб-приложении валится исключение:
org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable.
Как оказалось, проблема была в следующем: commons-logging-1.1.1.jar лежал также и в %JAVA_HOME%/jre/lib/ext (так уж получилось, что он залетел туда при установке КриптоПРО JCP). Поэтому и загружался этот jar-ник не тем класслоадером, что и остальные либы веб-приложения, и jar-ника log4j в /WEB-INF/lib ему было не видно. Выход - либо закинуть jar-ник log4j туда же в %JAVA_HOME%/jre/lib/ext, либо - удалить оттуда commons-logging-1.1.1.jar (в моем случае - не вариант, т.к. нарушило бы работу JCP).

вторник, 29 мая 2012 г.

Включение логирования в Spring Security

Чтобы включить логирование в Spring Security, необходимо настроить commons-logging и log4j (наверное, можно и без log4j, воспользовавшись другими возможностями commons-logging, но я сделал так). Для этого нужно (на примере проекта веб-приложения в NetBeans):

  1. Во-первых, подключить к проекту jar-ник commons-logging и log4j (в моему случае это были commons-logging-1.1.1.jar и log4j-1.2.17.jar). 
  2. Добавить в проект properties-файл commons-logging.properties, поместив его в src/java, со следующим содержанием:
  3. org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
  4. Добавить в проект properties-файл настройки log4j. Я положил его в src/java, назвав log4j.properties. Содержимое файла следующее (для Debug-уровня логирования):
    log4j.rootLogger=DEBUG, 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 - %m%n
    В форматах паттернов особенно не разбирался, используется паттенн из мануала log4j (http://logging.apache.org/log4j/1.2/manual.html). В принципе, можно выполнить настройку отдельно для разных логгеров, используемых спрингом, заменив строку:
    log4j.rootLogger=DEBUG, console
    на строки
    log4j.logger.org.springframework.web.context.support.StandardServletEnvironment=DEBUG, console
    и др. для остальных логгеров. Какие именно логгеры использует спринг, станет понятно из лога log4j, который будет ругаться на ненастроенные для какого-либо логгера аппендеры:
    log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    Но я это делать не стал.
  5. Добавить в web.xml приложения настройку пути к файлу конфигурации log4j и listener, инициализирующий log4j:
    <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param>
    <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    Всё, теперь логов будет хоть отбавляй =).
UPDATE:
Если валится исключение org.apache.commons.logging.LogConfigurationException, возможно, поможет это: http://barbitoff.blogspot.com/2012/07/orgapachecommonslogginglogconfiguration.html.