#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