※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Log4Jがなんとなくできそうな気がした(気のせいかも)ので続けてお勉強してみることに。

Appenderってのを使うですよ。いきますよ。
出力先を指定するんです。
つまりコンソールにばっかり出してるだけじゃ能がないってやつをファイルとかに出力したいと思ったのです。


目次




参考資料


こちらを参考にさせていただいてやってみますよ。
http://www.techscore.com/tech/ApacheJakarta/Log4J/1-2.html


とりあえず作ってみる。


やってみないとわからないですはい。

コピペしてゴー。


こういうことなのかしら?って思ってこれで実行してみたの。
コピペしちゃった。手で打たないと覚えないのにね。。。
 package Log4Jtest.test.dotcom;
 import org.apache.log4j.*;
 
 public class Log4jTest {
  public static void main(String argv[]) {
  Logger logger = Logger.getLogger("Sample");
 // Appenderインスタンスの生成
  Appender appender = new ConsoleAppender();
  logger.addAppender(appender);
  logger.info("This is info.");
  }
 }

実行結果
log4j:ERROR No output stream or file set for the appender named [null].
怒られた(ノ▽`)
赤文字でしたよ!

名前がnullですか。ほう。。。?

そもそもちゃんと理解してるのかい私。
というわけで

うまくいかないので参考サイトをよく読んでみる。


先のほうも読んでから実行ないとね。
Appenderについてお勉強しなおし。

org.apache.log4j.Appender


インタフェースです。
Loggerに出力するときはこのインタフェースを使うんですね。

私いつもimportで
org.apache.log4j.*;
って省略してるから気づかなかったわ。

もひとつあるわ。もしかして私がやりたいのってこれ?

org.apache.log4j.WriterAppender


こちらはクラス。

OutputStreamとかに出力の時はこっちらしいです。
java.io.*がいりますな。

もしかしてこれじゃん?これ!!!こっちー!


外部ファイルにログをはきだしたい、を作ってみる


少しだけ利口になったような気がしたのでサンプルを動かしてみます。

テスト・サンプルで試してみる


使わせていただきました。ありがとうございます。
http://www.techscore.com/tech/ApacheJakarta/Log4J/3.html


Log4jTestクラスの中をこんな風にしてみた。
 public static void main(String argv[]) {
 
 //org.apache.log4j.PatternLayoutの生成
  PatternLayout layout = new PatternLayout();
 
 //出力ファイル名
  String file = "sample.log";
 
 //java.io.Writerオブジェクト
 //org.apache.log4j.WriterAppenderオブジェクト
  Writer writer = null;
  WriterAppender appender = null;
 
  try{
  writer = new FileWriter(file);
  appender = new WriterAppender(layout,writer);
  }catch(IOException e){
 
  }
 
  Logger logger = Logger.getLogger("Sample");
  logger.addAppender(appender);
  logger.info("This is info.");
 
  System.out.println("おわったよん");
 
 }

ファイルに書き出すので実行してもコンソールに何もでない。
それは寂しかったのでとりあえず最後に終わりメッセージを。

java.io.Writerも使うので
import java.io.*;
も忘れずに。

String file = "sample.log";
出力ファイル名がファイル名だけ。。。デフォルトで今いる場所に作られるのね。
ってことはEclipseならば、Log4jTestクラスを作ったプロジェクトのフォルダの中にあるってことだ。
workspaceフォルダの下の層を探そう。

そうをさがそう。
ベタなシャレじゃありませんよ。

実行結果!


sample.logを見つけて開いてみると、できてました。
This is info.
って入ってました。万歳。

とりあえずこれでできたようだわ。
念のためも一回実行してみよ。。。とおもったら案の定、ファイル上書きされてた(ノ▽`)

だーよねー。
というわけでちょと形を変えてみたですよ。

何度も実行してもファイルの内容を上書きしない出力方法にしてみる


上の
writer = new FileWriter(file);
writer = new FileWriter(file,true);
にしてみました。

成功。

これで簡単な形で外部ファイルに書けるようになったわ。
次はフォーマットをきれいにしてみようっと。
じかんとかいれてー。