APIだけ別のログに出力する、なんて事も可能なのです〜
ログ出力をする時、◯◯◯な場合のみ、特定のログに出力したい時ってありませんか?
例えばフリーワード検索した時のログを保存し、それをサイトマップxmlに登録する時等。
では早速フリーワード検索専用のロガーを用意し、フリーワード検索用のログを出力してみましょう!
ロガーを用意する
まずはロガーを作成します。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyLogger { private static Logger LOGGER = LoggerFactory.getLogger(MyLogger.class); public static void info(String test) { LOGGER.info(test); } public static void main(String[] args) { info("yahoo!!!"); } }
どうでしょう。
なんとlogメソッドがあるだけのクラスなのです。(メソッド名はなんでもいいのです)
mainメソッドは単に実行用なので不要です。
設定ファイルでロガーを指定する
logback.xmlを以下のように編集します。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="freewordAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>freeword.log.%d{yyyy-MM-dd}</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%date{yyyy/MM/dd hh:mm:ss:SSS} %.5level - %logger{0}.%.20method %msg%n</pattern> </encoder> </appender> <logger name="hoge.logger.MyLogger" level="info"> <appender-ref ref="freewordAppender" /> </logger> <root level="info"> </root> </configuration>
ポイントは<logger>のname部分です。
パッケージではなくクラスを指定することで、そのクラスから出力したログは、指定したアペンダに従ってログ出力されるのです。
例えば検索画面でフリーワード検索実行された時、
MyLogger.log(freewordUrl);
のようにstaticメソッドであるlogを呼び出せば、先ほどのアペンダが適用され、freeword.logにURLが出力されるわけです。
fileNamePatternが指定できるので、書式も自由に決められます。
maxHistoryを指定すると世代管理が行えますが、一元管理する意味でもcronで削除した方がいいでしょう。