Android Java から Fluentd にログを送信してみる
環境
- Docker
- fluent/fluentd
- Android Studio
- Java
- Gradle
手順
FluentdのDockerコンテナを準備
$ docker pull fluent/fluentd
fluent.conf を作成
$ mkdir fluent && cd fluent $ mkdir etc log $ cat > "./etc/fluent.conf" <<EOF # Receive events from 24224/tcp # This is used by log forwarding and the fluent-cat command <source> @type forward port 24224 </source> # Match events tagged with "app.*" <match app.*> @type file path /fluentd/log/app.*.log symlink_path /fluentd/log/app.log append true time_slice_format %Y%m%d time_slice_wait 1m time_format %Y%m%dT%H%M%S%z </match> EOF
configは docs.fluentd.org をベースに雑に書きました。
$ docker run -it --rm \ --name docker-fluent-logger \ -p 24224:24224 -p 24224:24224/udp \ -v $(pwd)/log:/fluentd/log \ -v $(pwd)/etc:/fluentd/etc \ -e FLUENTD_CONF=fluent.conf \ fluent/fluentd:latest
Android側
$ grep fluent app/build.gradle // https://mvnrepository.com/artifact/org.fluentd/fluent-logger api group: 'org.fluentd', name: 'fluent-logger', version: '0.3.2'
$ grep uses-permission app/src/main/AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/>
package com.example.fluentloggertest; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import org.fluentd.logger.FluentLogger; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new Thread() { @Override public void run() { FluentLogger LOG = FluentLogger.getLogger("app", "fluentdのDockerコンテナが動いているマシンIP", 24224); LOG.log("action", "MainActivity", "onClickFab"); // こんな感じ? } }.start(); } }); } ...
プロジェクトテンプレから、デフォルトでFabがあるものを使っています。
logを確認
↑のアプリでFabをクリックすると、、
$ tail -f ./log/app/* ==> ./log/app.foo-bar.log <== 2018-09-20T01:34:26+00:00 app.action {"MainActivity":"onClickFab"} 2018-09-20T01:34:28+00:00 app.action {"MainActivity":"onClickFab"}
こんな感じでログが保存されます! (あー、この app.log のシンボリックリンクはコンテナ内のpathですね…)
超雑ですが、以上です。m(_ _)m