Как я могу изменить localhost.localdomain в сообщениях, написанных Log4j в системный журнал Linux

#java #linux #log4j #syslog

#java #linux #log4j #системный журнал

Вопрос:

Я пишу сообщения в системный журнал Linux, используя Log4j и его SyslogAppender. Выводимые сообщения выглядят следующим образом:

 Oct 12 09:06:03 localhost.localdomain 3364 [Thread-5] INFO TEST MESSAGE MyApplicationLogger - This is my message
  

Я хотел бы заменить localhost.localdomain именем сервера, на котором запущено приложение, но, похоже, не могу понять, как. Вот мой файл конфигурации, на случай, если это полезно:

 log4j.logger.MyApplicationLogger=INFO, SyslogAppender
log4j.appender.SyslogAppender=org.apache.log4j.net.SyslogAppender
log4j.appender.SyslogAppender.syslogHost=localhost
log4j.appender.SyslogAppender.Facility=USER
log4j.appender.SyslogAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.SyslogAppender.layout.ConversionPattern= %-4r [%t] %-5p %c %x - %m%n
log4j.appender.SyslogAppender.source=My Application
  

Редактировать: имя компьютера настроено на сервере, и команда hostname возвращает следующее:

 $ hostname
server12
  

Однако я замечаю, что первая строка файла hosts является

 127.0.0.1   localhost.localdomain localhost
  

Однако я не решаюсь это изменить.

Ответ №1:

Это то, что вам нужно:

 log4j.appender.SyslogAppender.header = true
  

Ответ №2:

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

Если у вас есть права root, вы можете задать имя своего хоста с помощью

 $ hostname myServersHostname
  

страница руководства

Чтобы сделать это изменение постоянным при перезагрузках, вам нужно будет установить файл конфигурации где-нибудь в / etc (какой именно, зависит от вашего дистрибутива).

  • Debian/ ubuntu: /etc/hostname
  • Redhat/CentOS/Fedora: /etc/sysconfig/network

Ответ №3:

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

В файле свойств поместите это:

 log4j.appender.SyslogAppender.syslogHost=server12
  

Не уверен, почему это работает, но использование имени сервера вместо localhost сработало для меня.

Комментарии:

1. Спасибо, что поделились этим решением. Мы используем виртуальные IP-адреса («VIP») и хотели бы, чтобы имя хоста оставалось таким, какое оно есть, но, к сожалению, log4j преобразует его в IP-адрес. Тем не менее, по крайней мере, с этой информацией мы могли бы настроить текущий IP-адрес VIP.

Ответ №4:

Если вы не хотите «жестко кодировать» имя хоста в свойствах log4j или XML-файле, лучшим решением является комбинация того, что предложено dtyler и yegor256. Убедитесь, что ваше имя хоста установлено правильно, а затем используйте log4j.appender.SyslogAppender.header = true или <param name="Header" value="true"/> в вашем log4j.xml