monotoneのチュートリアルを書き直し中。結構説明するところがあってなかなか時間かかる。
ログ記録できるようにしていきたい。
.NETに標準でロガーが無いのかと調べたらEventLogクラスがあった。Windows標準のログに記録していくやつ。これ使おうかと思ったんだけど、ログ作成に管理者権限が必要だとかセキュリティ的にどうこうとかいろいろ書いてあってちょっとばかし使い勝手が微妙だ。そんな他人のログまで読み書きしたいとかじゃなくて、自分のアプリ内限定でログを記録していければいいだけなんですけど。あとどっか適当なファイルに書き出しできれば。
monoではEventLog使うと標準では/dev/nullに捨てられていくようだ。環境変数でファイルとか指定できるみたいだけど、やっぱりちょっくら微妙だね。
他にログ記録用のライブラリがないか調べたらlog4netてのが定番らしい。調べるとコンフィグファイルを作ってどうこうという記事ばっかりみつかるな。コンフィグファイルを作るのがめんどいし書き出すログファイルを動的に変更したいんだが…。しかしちゃんとリファレンスを見たらプログラム的に設定しても簡単じゃん。じゃあこれで。
なんかlog4netを落としたらmono用のバイナリと.NET用のバイナリが別にあるんだけど何か違うんだろうか。それは困るんだが…まあたぶんどっちでも使えるんじゃないかということにしよう。
log4netを使うのはいいんだけど、あちこちでlog4netに依存しちゃうのは避けたい。なんらかの理由でlog4netじゃない物を使いたくなったとか、ログはいらないからlog4netを外したいとかいう時に全部書き換えてまわるのは大変すぎる。ちょっとめんどいけどPeerCastStation.Logger.dllとしてlog4netのラッパを作ってやろう。log4netやめる時にはこいつだけ置き換えればおっけー。
ラッパを作るのはそんなに面倒なわけもなくできた。log4netは一通り揃ってて便利だね。 で、軽くテストを書いて動かしてみたら変なところで動かねぇ…。どうもlog4netが読み込めてない。セキュリティ例外みたいなの出てるよ…。
調べたら.NET4のClientProfieでは動かないよ、ってことらしい。IronRubyから呼んでるしClientProfieしか入ってないわけないからそうではないよな。 Issueを見たら.NET4ではセキュリティ例外があがるからどうのこうのとか。パッチも上がってるんだけどまだ取り込まれてないようだし、そもそもlog4net自体それほど活発ではなさそうだし、自前でバイナリ作るのは面倒そう。面倒なうえにパッチ当てたlog4netなんていう微妙な物に依存するのはかなりどうかと思うわけよ。
仕方ないので自前でロガー作るか。log4netに依存しないようにもできるようにって分離してたのが早速役立つとは思わなんだ…。
log4netの豊富すぎる機能を駆使してたら自前で作り直すとか無理だったんだが、今回はメモリ内とコンソールとファイルにだらだら書き出していくだけしか使ってなかったので、これならまあ自作でもそうかからずに出来そうである。仕方ない、やるか…。