私の職場では、誰かが Tomcat を syslog にログを記録するように設定したことがあります。問題は、これらのメッセージがコンソールにも送信されてしまうことです。
システムはRHEL6で、関係するRPMは次のとおりです。
rsyslog-5.8.10-10.el6_6.x86_64
tomcat-7.0.64-1.x86_64
次の 2 つのコマンドを使用して、コンソールへのメッセージを無音にしようとしました。
dmesg -n 1
sysctl -w kernel.printk="1 4 1 3"
これらは何の違いも生まず、これらのメッセージは引き続き届き続けます。ログ4jこのシステムでは使用されていないようです。Tomcatserver.xml
からのこのセクションはログ記録用です。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" rotatable="false"
pattern="%h %l %u %t "%r" %s %b" />
停止すると、rsyslog
これらのメッセージは停止します。Tomcat からのログ記録を設定するために何が行われたかはわかりません。rsyslog
私は Tomcat の専門家ではありません。Tomcat はコンソールにメッセージを送信する唯一のアプリケーションです。他のメッセージも送信されますrsyslog
が、Tomcat 以外のメッセージはコンソールに記録されません。
コマンドを試したので、dmesg -n 1
Tomcat が最高レベルでメッセージを送信していると思われますが、その原因となるコードは見つかりません。
コンソール上のメッセージの例 (tomcat-instance06 と表示されていることに注意してください。これは、複数の Tomcat インスタンスを可能にするために自作した RPM です)。コンソールには常に [FATAL] メッセージが表示され、その後に同じ内容の 2 番目のメッセージが表示されることに気付きました。
Message from syslogd@localhost at Jun 22 16:52:12 ...
[FATAL] some.portal-app: [model.website.PageService] RequestID already used - ...#012Detail: #012detail#012Tag context: #012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 486#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 484#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, l...
Message from [email protected] at Jun 22 16:52:12 ...
482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 482#012/opt/tomcat-instance06/webapps/ROOT/model/WebserviceRequest.cfc, line 268#012/opt/tomcat-instance06/webapps/ROOT/model/website/PageService.cfc, line 194#012/opt/tomcat-instance06/webapps/ROOT/model/website/PageService.cfc, line 86#012/opt/tomcat-instance06/webapps/ROOT/model/RequestContextDecorator.cfc, line 16#012/opt/tomcat-instance06/webapps/ROOT/model/RequestContextDecorator.cfc, line 232#012/opt/tomcat-instance06/webapps/ROOT/handlers/General.cfc, line 596#012/opt/tomcat-instance06/webapps/ROOT/coldbox/system/web/Controller.cfc, line 764#012/opt/tomcat-instance06/webapps/ROOT/coldbox/system/web/Controller.cfc, line 648#012/opt/tomcat-instance06/webapps/ROOT/coldbox/system/web/services/ExceptionService.cfc, line 51#012/opt/tomcat-instance06/webapps/ROOT/coldbox/system/Coldbox.cfc, line 350#012/opt/tomcat-instance06/webapps/ROOT/coldbox/system/Coldbox.cfc, line 382#012/opt/tomcat-instance06/webapps/ROOT/Application.cfc, line 60
以下の内容です/etc/rsyslog.conf
:
#
# Use traditional timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog
# Provides --MARK-- message capability
$ModLoad immark
# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock
# set ratelimit interval
$SystemLogRateLimitInterval 2
$SystemLogRateLimitBurst 150
# Provides UDP syslog reception
$ModLoad imudp
# Syslog server listen address
$UDPServerAddress 127.0.0.1
# Syslog server listen UDP port
$UDPServerRun 514
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local0.none;local6.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/mail.log
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local6.warning /var/log/audit_orcl.log
LOCAL6.WARNING /var/log/audit_orcl.log
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# Log all messages to the following syslog servers
<I have removed this section containing ip's of syslogservers>
/etc/rsyslog.conf で kern.* をコメントアウトしようとしました。
#kern.* /dev/console
しかし、rsyslog を再起動した後も、これらの Tomcat メッセージがコンソールに記録されます :(
これらのメッセージを無効にするにはどこを確認すればよいかご存知ですか?
答え1
見つかりました(当然)。
これをコメントアウトすると、/etc/rsyslog.conf
メッセージが停止します。
# Everybody gets emergency messages
*.emerg *
また、Tomcat がこれに継続的にログ記録する唯一のアプリケーションであるという事実は、不適切にプログラムされたアプリケーションが各メッセージを致命的としてログ記録し、コンソールに出力しているためであることもわかりました。