うなぎや

Javaとかについて書いています。

log4j2を使う

個人開発で一からlog4j2を使うので備忘録です。

Log4j2を使用するには
Apache Log4j Core
Apache Log4j API の2つが必要です。
mavenリポジトリから取ってきます。現時点で最新のバージョンの2.18.0をダウンロードします。
https://mvnrepository.com/artifact/org.apache.logging.log4j

ライブラリをダウンロードしたら、log4j2の設定ファイルを作成します。 設定は色々ありますがざっくりと見ると
・ログの出力パターンレイアウト
・ログの出力場所
・ログローテート
を定義しています。

設定ファイルはクラスパスが通っているフォルダ(src配下など)に置くことで自動的に読み込まれます。 形式は.properties、.yml、.json、.xmlが使用できるようです。一般的にはxmlファイルで書かれます。
ファイル名はlog4j2-test.xmlまたはlog4j2.xmlとつける必要があります。

以下、log4j2.xmlの使用例です。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration>
<Configuration status="OFF">
    <Properties>
        <Property name="layout">%d{yyyy-MM-dd HH:mm:ss.SSS}, %level, %t, %c, %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${layout}" />
        </Console>
        <RollingFile name="file" fileName="/log/log4j2.log"
            filePattern="/log/%d{yyyyMM}/log4j2_%d{yyyyMMdd}_%i.log">
            <PatternLayout pattern="${layout}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="all">
            <AppenderRef ref="console" />
            <AppenderRef ref="file" />
        </Root>
    </Loggers>
</Configuration>
<Configuration> ・・・log4j2自身のログを出力するかどうかをstatus属性で指定できる。通常はoff
<Properties> ・・・設定ファイル内で使用するプロパティを設定できる。何度も使用するものはここに記載しておく。
PatternLayout ・・・ %d 日時、%level ログレベル、%t スレッド名、%c ロガー名、%m ログメッセージ、%n 改行
<Appenders> ・・・ログの出力方式、ログローテートの設定を行う
<Console> ・・・コンソールにログを出力する。
<RollingFile> ・・・ログファイルの出力場所、ファイル名、ログローテートの設定。
<Loggers> ・・・ログを出力するJavaパッケージ、ログレベル、ログの出力先を指定する。
<Root> ・・・Appenderに対して一律の設定を行います。

Gradleについて

最近Gradleを勉強しているので、その書き残し。

 

Gradleとは

2007年頃に開発がスタートし、SpringフレームワークAndroidアプリケーション開発のビルドツールとして採用されるなどで注目される。

大きな特徴としてはビルドスクリプトを「シンプルに記述出来る」という点。

また、AntやMavenと言った既存のビルドツールを活用しているため、既存の資産を活かしてGradleを取り込めます。

 

ビルドツールとは

ソースコードコンパイルしてクラスファイルを生成する。

・テストを実行してテスト結果やカバレッジ測定結果を出力する。

Javadocなどのドキュメントを生成する。

・jarやwarを生成する

・ライブラリを自動でダウンロードし、依存関係の解決を行う

 

Javaの主なビルドツール

Ant

JavaのビルドツールでXMLスクリプトを構成する。

提供機能は多くないため、シンプルで使いやすい。

しかし、複雑なことをするにはビルドスクリプトが冗長になってしまい、メンテナンスが困難になる。

ライブラリの依存関係を管理できないため、手作業での解決となる。

 

Maven

Antと同じくXMLスクリプトを構成する。

POM(プロジェクトオブジェクトモデル)という概念を持ち、Antのビルドスクリプトが冗長するという弱点を解決。

POMにメタデータを持たせることでライブラリの依存関係を自動的に解決することができるようになる。高機能だが仕様の理解が重要であり、仕様外のことをするのは難易度が高い。

 

Gradle

Antの柔軟性とMavenの依存性解決という良い点を組み合わせ、シンプルなスクリプトで記述が出来る。言語はGroovy言語で書かれている。GroovyとJavaは言語として似ている部分があり、Javaエンジニアにとっては理解しやすい。

 

 

便利機能

Gradle ラッパー

プロジェクトにGradleを導入する際、メンバーや担当者がGradleをインストールする必要がない。

GradleにはGradleラッパー機能というものがあり、gradleプロジェクトのフォルダを配布するだけ、インストール不要でビルドや各タスクを実行することが出来る。

通常Gradleの実行にはコマンド gradle ~~ の用に指定するが、未インストール環境では gradlew ~~ の用にwを一文字つけるだけで同じようにタスクを実行出来る。