---
name: "Lire::W3CExtendedLog"
section: "3pm"
platform: "linux"
package: "lire"
version: "2.1.1-8"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Lire::W3CExtendedLog"
---

# Lire::W3CExtendedLog(3pm)

Base implementation of a W3C Extended Log parser

## NAME

Lire::W3CExtendedLog - Base implementation of a W3C Extended Log parser

## SYNOPSIS

use Lire::W3CExtendedLog;

my `$parser` = new Lire::W3CExtendedLog;

my `$w3c_rec` = `$parser`-\>parse( `$line` );

## DESCRIPTION

This module defines objects able to parse W3C Extended Log Format. This log format is defined at http://www.w3.org/TR/WD-logfile.html

All attributes of the created object can be overriden by e.g. modules extending the object.  The attributes are:

### type2regex

*type2regex* is a hash containing key-value pairs like

```
 'name' => '([-_.0-9a-zA-Z]+)'
```

Keys are all data formats for log file field entries as defined in the W3C specification: 'integer', 'fixed', 'uri', 'date', 'time' and 'string', along with 'name' and 'address' types.

### identifier2type

*identifier2type* is a hash containing key-value pairs like

```
 'dns'        => 'name',
 'uri-query'  => 'uri',
 'ip'         =>
```

Keys are the W3C defined Field identifiers, with their prefixes stripped off.

### field2re

*field2re* is subroutine; when called as

```
 $self->{field2re('c-ip')}
```

it will return e.g.

```
 '(\d+\.\d+\.\d+\.\d+|-)'
```

Arguments are as found in the Fields directive, so, in an ideal world, should be identifiers.  It uses *type2regex*.

### field2decoder

*field2decoder* is a subroutine; it returns one of *\\&uri\_decode* , *\\&string\_decode* or *undef*, depending on, a.o., *is\_iis*.  It is used by *build\_parser*.

### parse

*parse* is the preferred interface to this module.  It expects a line as its argument, and returns a reference to a hash (like *&w3c\_parser*), or executes *&parse\_directive*.

### parse\_directive

*parse\_directive* expects a directive in its argument, it fills the object.

### w3c\_parser

*w3c\_parser* is a subroutine; it expects a logline as argument, and returns a reference to a hash, mapping `$self`-\>{'fields'} entries to their decoded values. It uses the *&field2re* and *&field2decoder* routines.  It is build in build\_parser.

### build\_parser

*build\_parser* is a subroutine, it builds and returns *&w3c\_parser*. It is called in *&parse\_directive*.

### log\_date and log\_time

*log\_date* and *log\_time* contain strings constructed from the Date directive.

### version and sofware

*version* and *software* contain strings constructed from the Version and Software directives, respectively.

### fields

*fields* contains the entire string from the Fields directive.

### is\_iis

*is\_iis* is set in case the Software directive contains 'Microsoft Internet' as a substring.  It is used to enable IIS specific support.

### tab\_sep

*tab\_sep* is set in case tabs are found in the Fields directive.  We assume these will be used in the log itself too, and allow unescaped spaces in the log.

Summarizing:

```
 &parse --calls--> &parse_directive
        `--calls--> &w3c_parser
 &parse_directive --calls--> &build_parser
 &build_parser --calls--> &field2decoder
              `--calls--> &field2re
              `--returns--> &w3c_parser
 &field2decoder --returns--> &uri_decode, &string_decode
 &field2re --uses--> %type2regex
           `--uses--> %identifier2type
```

## BUILDING INHERITING MODULES

FIXME .  Needs to be written.  Steal from w3c\_extended2dlf's Lire::WWW::ExtendedLog, which ISA Lire::W3CExtendedLog.

## SEE ALSO

[**w3c\_extended2dlf**(1)](/w3c_extended2dlf/1.md), [**ms\_isa2dlf**(1)](/ms_isa2dlf/1.md)

## AUTHOR

```
  Francis J. Lacoste <flacoste@logreport.org>
```

## VERSION

`$Id:` W3CExtendedLog.pm,v 1.18 2006/07/23 13:16:30 vanbaal Exp $

## COPYRIGHT

Copyright (C) 2001-2002 Stichting LogReport Foundation LogReport@LogReport.org

This file is part of Lire.

Lire is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html.
