Файл производственных настроек для log4j? - PullRequest
15 голосов
/ 21 августа 2010

Вот мой текущий файл настроек log4j.Являются ли эти настройки идеальными для производственного использования, или я должен что-то удалить / настроить или изменить?Я спрашиваю, потому что все мои потоки зависали из-за блокировки log4j.Я проверил свои дескрипторы открытых файлов, которые я использовал только 113.

# ***** Set root logger level to WARN and its two appenders to stdout and R.
log4j.rootLogger=warn, stdout, R

# ***** stdout is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# ***** stdout uses PatternLayout.
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

# ***** R is set to be a RollingFileAppender.
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=logs/myapp.log
# ***** Max file size is set to 100KB
log4j.appender.R.MaxFileSize=102400KB
# ***** Keep one backup file
log4j.appender.R.MaxBackupIndex=5
# ***** R uses PatternLayout.
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %d %c - %m%n


#set httpclient debug levels
log4j.logger.org.apache.component=ERROR,stdout 
log4j.logger.httpclient.wire=ERROR,stdout 
log4j.logger.org.apache.commons.httpclient=ERROR,stdout 
log4j.logger.org.apache.http.client.protocol=ERROR,stdout

ОБНОВЛЕНИЕ *** Добавление образца дампа потока из всех моих потоков (100)

"pool-1-thread-5" - Thread t@25
   java.lang.Thread.State: BLOCKED on org.apache.log4j.spi.RootLogger@1d45a585 owned by: pool-1-thread-35
    at org.apache.log4j.Category.callAppenders(Category.java:201)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.error(Category.java:302)

Ответы [ 4 ]

31 голосов
/ 30 октября 2012

Log4j 1.2 уязвим для взаимоблокировок , когда toString() создает вложенную запись в журнал.

См. Старые, еще нерешенные проблемы, такие как Log4J может создавать условия взаимоблокировки (одновременное пожертвование пакета) и Deadlock с RollingFileAppender .

Он также имеет производительностьубивает проблемы синхронизации блокировки при большой одновременной нагрузке.Как и Категория, вызывающая синхронизацию callAppenders, вызывает java.lang.Thread.State: BLOCKED и Перемещение org.apache.log4j.Category для повторного ввода блокировки чтения / записи .

Even AsyncAppender не свободен от чрезмерных блокировок: AsyncAppender.doAppend () не нужно синхронизировать и Взаимная блокировка в 1.2.15, вызванная классами AsyncAppender и ThrowableInformation .Также остерегайтесь переполнения AsyncAppender .

Одно предостережение - всегда ограничивать уровень корневой категории как минимум до уровня INFO или выше.Это предотвратит регистрацию вызовов от получения ненужных блокировок, упомянутых в вышеупомянутых проблемах.Недостаточно просто ограничить порог аппендера, поскольку это будет учтено позже.См. объяснение с аналогией публикации / подписки :

Чтобы ответить на ваш вопрос о том, как порог взаимодействует с категорией, в основном представьте, что он является публикацией / подпиской.Категория устанавливает то, что публикуется регистратором, а пороговое значение устанавливает уровень подписки приложения.

В случае необходимости вложенным категориям интереса могут быть индивидуально присвоены более низкие приоритеты.

2 голосов
/ 21 августа 2010

Вы создаете Logger для каждого класса, используя стандарт private static final Logger logger = Logger.getLogger(Foo.class);, где Foo - класс, в котором объявлен регистратор?Если у вас всего 1 экземпляр Logger во всем приложении, может возникнуть некоторая конкуренция, если ведется много журналов.

1 голос
/ 21 августа 2010

% F:% L оказывает серьезное влияние на производительность.Хотя я не понимаю, как они могут вызывать блокировку, я бы хотел исключить их для производства.

0 голосов
/ 21 августа 2010

Это выглядит нормально.Я не вижу, как это само по себе может вызвать блокировку log4j.Может быть, вы могли бы опубликовать дамп темы вашей проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...