LoginSignup
0
1

More than 1 year has passed since last update.

log4j の出力を rsyslog に食わせる

Posted at

プロセス内から別のプロセスを呼ぶような jar があって、それぞれが同じファイルにログを出力する場合にサブプロセスからのログ出力が無視されそうな場合の対処として rsyslog を使いたい。

log4j には最初から syslog に出力するような Appender があるけれども単純にそれだけだとメッセージしか出力されずクラス名メソッド名などが拾えないのでどうにかしたい

rsyslog を更新する

CentOS7,8では出力した構造化データを解析して云々するためのモジュール mmpstrucdata.so がインストールされないので更新する

cd /etc/yum.repos.d/
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
yum install rsyslog

rsyslog.conf を編集する

以下

# 以下コメントアウトを解除する
$ModLoad imudp
$UDPServerRun 514

# モジュール mmpstrucdata をロードする
module(load="mmpstrucdata")
action(type="mmpstrucdata")

# 出力フォーマットを定義する
template(name="MyAppFormat" type="list") {
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    property(name="hostname")
    constant(value=" ")
    property(name="syslogtag")
    constant(value=" ")
    property(name="$!rfc5424-sd!location@32473!class")
    constant(value=" (")
    property(name="$!rfc5424-sd!location@32473!method")
    constant(value=":")
    property(name="$!rfc5424-sd!location@32473!line")
    constant(value=") ")
    property(name="msg" droplastlf="on")
    constant(value="\n")
}

# ファシリティ local0 の出力指定
local0.*                                                /var/log/application.log;MyAppFormat

log4j の設定

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
	<Properties>
		<Property name="ptn">
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %C#%M %m %n %throwable
    </Property>
	</Properties>
	<Appenders>
		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout pattern="${ptn}" />
		</Console>
		<RollingFile name="file" fileName="/var/log/fooapp/fooapp.log"
			filePattern="/var/log//fooapp/fooapp_%d{yyyyMMdd}_%i.log"
			append="true">
			<PatternLayout pattern="${ptn}" />
			<Policies>
				<SizeBasedTriggeringPolicy size="10 MB" />
			</Policies>
			<DefaultRolloverStrategy max="10" />
		</RollingFile>
		<Syslog name="syslog" host="localhost" port="514" protocol="UDP" facility="local0" appName="app" >
			<Rfc5424Layout appName="MyApp" facility="LOCAL0">
				<LoggerFields enterpriseId="32473" sdId="location">
				  <KeyValuePair key="logger" value="%c" />
				  <KeyValuePair key="class" value="%C" />
				  <KeyValuePair key="method" value="%M" />
				  <KeyValuePair key="line" value="%L" />
				</LoggerFields>
			</Rfc5424Layout>
		</Syslog>   
	</Appenders>
	<Loggers>
		<Root level="trace">
			<AppenderRef ref="syslog" />
			<AppenderRef ref="file" />
		</Root>
	</Loggers>
</Configuration>

Appender "Syslog" を追加する

その他

syslog出力はたしか fluentd に拾わせることが出来たと思うので、出力を mongodbに食わせるとかもできるかも。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1