Penは便利なポート中継器なんですが、ログのフォーマットが(たぶんいろんな理由があってそうなっているとは思うのですが)ボクにはちょっと使いにくいところがありました。
- タイムスタンプが、いわゆるグリニッジ標準時で1970年1月1日0時0分0秒からの経過時間を秒単位であらわしたやつなので、パッと見て何時何分のイベントなのかわからない。
- 転送先サーバのIPアドレスはログに残るものの、ポート番号が残らない。1台のサーバに複数インスタンスを動かしているような場合にはどっちに対するログなのかわからない。
ということもあってコードを少しいじってみました。修正したのはlog_requestという関数のみです。
自分も変更してみたいという方は、pen.cのlog_requestを以下に置き換えてから
make & make install すればおkです。
static void log_request(FILE *fp, int i, unsigned char *b, int n) { int j; /* 時刻表示用変数 */ struct tm *ti; time_t now; char str_time[ 64 ]; /* 時刻表示用変数 */ if (n > KEEP_MAX) n = KEEP_MAX; fprintf(fp, "%s ", inet_ntoa(clients[conns[i].clt].addr)); /* 時刻表示フォーマットの変更 */ /* fprintf(fp, "%ld ", (long)time(NULL)); */ time(&now); ti = localtime(&now); strftime(str_time, 64, "%Y/%m/%d %H:%M:%S", ti); fprintf(fp, "%s ", str_time); /* 時刻表示フォーマットの変更 */ fprintf(fp, "%s:", inet_ntoa(servers[conns[i].index].addr)); /* ポート番号の出力 */ fprintf(fp, "%d ", servers[conns[i].index].port ); for (j = 0; j < n && b[j] != '\r' && b[j] != '\n'; j++) { fprintf(fp, "%c", isascii(b[j])?b[j]:'.'); } fprintf(fp, "\n"); }
ではでは
Cでかくのひっさしぶりだったので、たったこれだけなのに時間かかっちゃったなー。