Index: [Article Count Order] [Thread]

Date:  Mon, 10 Nov 2003 17:57:21 +0900
From:  Mikuni-S <mikuni@ssl.fujitsu.com>
Subject:  [analog-jp:01669] Re: IIS のログ解析時の「異常ログ行数」について 
To:  analog-jp@jp.analog.cx
Message-Id:  <mid-1669-analog-jp@jp.analog.cx>
References:  <mid-1665-analog-jp@jp.analog.cx> <mid-1666-analog-jp@jp.analog.cx> <mid-1667-analog-jp@jp.analog.cx>
X-Mail-Count: 01669

三国です

想像ですが(ソースを見てみました)、
ログデータをfread()しているところで、
改行コード(CR+LF)が、片割れになってreadされる場合はないでしょうか?
CRまでしかreadされなかった場合、次のfreadでは、LFから
始まって、"corrupt line"となる場合がある(必ずではない)ような気がします。

fread()しているところ→
=====input.c=====
・・・・
choice getmoredata(FILE *f, char *start, size_t length) {

  block_end = start + fread((void *)start, 1, length, f);
  block_bell = block_end - BLOCK_EPSILON;  /* saves repeating this calc. */
  if (block_end == start)
    return(EOF);
  return(OK);
}
・・・・・


試しに以下の修正をしたところ発生しなくなりました。
=====input.c=====
・・・・

void shunt_data(FILE *f) {
  memmove((void *)block_start, (void *)record_start,
          (size_t)(block_end - record_start));
  (void)getmoredata(f, block_start + (block_end - record_start),
                    (size_t)(BLOCKSIZE - (block_end - record_start)));

/* CRから開始された場合、CRをスキップする */
if(*(block_start + (block_end - record_start)) == '\n') {
    if(block_end == record_start) {    /* この条件も必要 */
        debug('C', "CR(%.100s)",block_start+(block_end-record_start) );

        block_start++;
    }
}
・・・・


Takayuki Matsuki wrote:
> 松木です。
>
> On Thu, 6 Nov 2003 18:03:15 +0900
> Mikuni-S <mikuni@ssl.fujitsu.com> wrote:
>
>>いまだ原因は不明ですが、
>>とりあえず、例の回避策が有効そうなので
>>そのようにしようかと思います。
>
>
> On Wed, 5 Nov 2003 14:51:13 +0900
> Mikuni-S <mikuni@ssl.fujitsu.com> wrote:
>
>>なお、いろいろ試してわかったことですが、
>>ログファイルの各行の最後、改行コード(PCでは通常、CR+LF)を、
>>UNIXで通常使われるLFのみに変換して試したところ、
>>上記の異常ログ行(Corrupt line)はカウントされなくなりました。
>
>
> 多分推測にしかすぎないのですが、行末に改行コード以外の
> コードが入り込んだのではないかと思います。上記の改行コード変換は
> エディターの機能で一括変換されたのだと思いますが、行末だけの
> コードを取り出して見るということはできないでしょうか?

--