comscom@Wiki
外部ファイルにログをはく
最終更新:
Bot(ページ名リンク)
-
view
Log4Jがなんとなくできそうな気がした(気のせいかも)ので続けてお勉強してみることに。
Appenderってのを使うですよ。いきますよ。
出力先を指定するんです。
つまりコンソールにばっかり出してるだけじゃ能がないってやつをファイルとかに出力したいと思ったのです。
出力先を指定するんです。
つまりコンソールにばっかり出してるだけじゃ能がないってやつをファイルとかに出力したいと思ったのです。
目次
参考資料
こちらを参考にさせていただいてやってみますよ。
http://www.techscore.com/tech/ApacheJakarta/Log4J/1-2.html
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についてお勉強しなおし。
Appenderについてお勉強しなおし。
org.apache.log4j.Appender
インタフェースです。
Loggerに出力するときはこのインタフェースを使うんですね。
Loggerに出力するときはこのインタフェースを使うんですね。
私いつもimportで
org.apache.log4j.*;
って省略してるから気づかなかったわ。
もひとつあるわ。もしかして私がやりたいのってこれ?
org.apache.log4j.WriterAppender
こちらはクラス。
OutputStreamとかに出力の時はこっちらしいです。
java.io.*がいりますな。
java.io.*がいりますな。
もしかしてこれじゃん?これ!!!こっちー!
外部ファイルにログをはきだしたい、を作ってみる
少しだけ利口になったような気がしたのでサンプルを動かしてみます。
テスト・サンプルで試してみる
使わせていただきました。ありがとうございます。
http://www.techscore.com/tech/ApacheJakarta/Log4J/3.html
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フォルダの下の層を探そう。
ってことはEclipseならば、Log4jTestクラスを作ったプロジェクトのフォルダの中にあるってことだ。
workspaceフォルダの下の層を探そう。
そうをさがそう。
ベタなシャレじゃありませんよ。
ベタなシャレじゃありませんよ。
実行結果!
sample.logを見つけて開いてみると、できてました。
This is info.
って入ってました。万歳。
とりあえずこれでできたようだわ。
念のためも一回実行してみよ。。。とおもったら案の定、ファイル上書きされてた(ノ▽`)
念のためも一回実行してみよ。。。とおもったら案の定、ファイル上書きされてた(ノ▽`)
だーよねー。
というわけでちょと形を変えてみたですよ。
というわけでちょと形を変えてみたですよ。
何度も実行してもファイルの内容を上書きしない出力方法にしてみる
上の
writer = new FileWriter(file);
を
writer = new FileWriter(file,true);
にしてみました。
成功。
これで簡単な形で外部ファイルに書けるようになったわ。
次はフォーマットをきれいにしてみようっと。
じかんとかいれてー。
次はフォーマットをきれいにしてみようっと。
じかんとかいれてー。