HTTP_LOGGING_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Flags | HTTP_PROPERTY_FLAGS | 4 | +0 | +0 | プロパティが存在するかどうかを指定する HTTP_PROPERTY_FLAGS 構造体です。 | ||||||||||
| LoggingFlags | DWORD | 4 | +4 | +4 | 省略可能なログ記録フラグは、既定のログ記録動作を変更します。 次の HTTP_LOGGING_FLAG 値の 1 つ以上を指定できます。
| ||||||||||
| SoftwareName | LPWSTR | 8/4 | +8 | +8 | W3C 形式のログ記録で使用される、省略可能なソフトウェア名の文字列です。この名前は、他の種類のログ記録では使用されません。このパラメーターが NULL の場合、HTTP Server API は既定の文字列をログに記録します。 | ||||||||||
| SoftwareNameLength | WORD | 2 | +16 | +12 | ソフトウェア名の長さ (バイト単位) です。長さは MAX_PATH を超えることはできません。 SoftwareName メンバーが NULL の場合、この長さは 0 でなければなりません。 | ||||||||||
| DirectoryNameLength | WORD | 2 | +18 | +14 | ディレクトリ名の長さ (バイト単位) です。長さは 424 バイトを超えることはできません。 | ||||||||||
| DirectoryName | LPWSTR | 8/4 | +24 | +16 | ログファイルが作成されるログ記録用ディレクトリです。ディレクトリの文字列は、ドライブ文字を含む完全修飾パスでなければなりません。 アプリケーションは、リモートコンピューターへの UNC パスを使用して UNC でのログ記録を有効にできます。 | ||||||||||
| Format | HTTP_LOGGING_TYPE | 4 | +32 | +20 | 次のログファイル形式のいずれかを指定する HTTP_LOGGING_TYPE 列挙型のメンバーです。 | ||||||||||
| Fields | DWORD | 4 | +36 | +24 | 形式が W3C に設定されている場合にログに記録されるフィールドです。HTTP_LOG_FIELD_ 定数の値を 1 つ以上指定できます。 ログ記録形式が W3C の場合、アプリケーションはログフィールドを指定しなければなりません。指定しないと、フィールドは一切ログに記録されません。 | ||||||||||
| pExtFields | void* | 8/4 | +40 | +28 | 予約済みです。0 (ゼロ) または NULL を設定します。 | ||||||||||
| NumOfExtFields | WORD | 2 | +48 | +32 | 予約済みです。0 (ゼロ) または NULL を設定します。 | ||||||||||
| MaxRecordSize | WORD | 2 | +50 | +34 | 予約済みです。0 (ゼロ) または NULL を設定します。 | ||||||||||
| RolloverType | HTTP_LOGGING_ROLLOVER_TYPE | 4 | +52 | +36 | ログファイルのロールオーバー条件を指定する HTTP_LOGGING_ROLLOVER_TYPE 列挙型の、次のメンバーのいずれかです。 | ||||||||||
| RolloverSize | DWORD | 4 | +56 | +40 | ログファイルがロールオーバーされる最大サイズ (バイト単位) です。HTTP_LIMIT_INFINITE の値は、サイズが無制限であることを示します。最小値は HTTP_MIN_ALLOWED_LOG_FILE_ROLLOVER_SIZE (1024 * 1024) より小さくすることはできません。 このフィールドは HttpLoggingRolloverSize のロールオーバーの種類でのみ使用され、それ以外のすべての種類では 0 を設定してください。 ロールオーバーの種類が HttpLoggingRolloverSize の場合、アプリケーションはログファイルの最大サイズを指定しなければなりません。 | ||||||||||
| pSecurityDescriptor | PSECURITY_DESCRIPTOR | 8/4 | +64 | +44 | ログファイルのディレクトリおよびそのすべてのサブディレクトリに適用されるセキュリティ記述子です。このメンバーが NULL の場合、システムの既定の ACL が使用されるか、親ディレクトリから ACL が継承されます。 |
公式ドキュメント
HTTP_LOGGING_INFO 構造体は、URL グループまたはサーバーセッションでサーバー側のログ記録を有効にするために使用します。
この構造体は、URL グループまたはサーバーセッションで HttpServerLoggingProperty を設定または照会するときに使用しなければなりません。
解説(Remarks)
HttpServerLoggingProperty プロパティは、サーバー側のログ記録として HttpLoggingTypeW3C、HttpLoggingTypeIIS、HttpLoggingTypeNCSA、HttpLoggingTypeRaw の 4 種類のいずれかを設定します。このプロパティをサーバーセッションに設定すると、そのサーバーセッション配下のすべての URL グループに対する集中ログ記録として機能します。サーバーセッション配下のいずれかの URL グループにルーティングされた要求は、1 つの集中ログファイルに記録されます。ログファイルの構成パラメーターは、HttpSetServerSessionProperty の呼び出しで HTTP_LOGGING_INFO 構造体として渡されます。
このプロパティを URL グループに設定した場合、ログ記録はその URL グループにルーティングされた要求に対してのみ行われます。 ログファイルは、URL グループまたはサーバーセッションに要求が到着したときに作成され、ログ記録を構成した時点では作成されません。
アプリケーションは、DirectoryName メンバーに指定するディレクトリが一意であることを保証しなければなりません。
ログファイルの名前は、指定されたロールオーバーの種類に基づいて決まります。次の表は、ログファイルの命名規則を示しています。
| 形式 | ロールオーバーの種類 | ファイル名のパターン |
|---|---|---|
| Microsoft IIS ログ形式 | サイズ | inetsvnn.log |
| 毎時 | inyymmddhh.log | |
| 毎日 | inyymmdd.log | |
| 毎週 | inyymmww.log | |
| 毎月 | inyymm.log | |
| NCSA 共通ログファイル形式 | サイズ | ncsann.log |
| 毎時 | ncyymmddhh.log | |
| 毎日 | ncyymmdd.log | |
| 毎週 | ncyymmww.log | |
| 毎月 | ncyymm.log | |
| W3C 拡張ログファイル形式 | サイズ | extendnn.log |
| 毎時 | exyymmddhh.log | |
| 毎日 | exyymmdd.log | |
| 毎週 | exyymmww.log | |
| 毎月 | exyymm.log |
表中の yy、mm、ww、dd、hh、nn の各文字は、次の数字を表します。
- yy: 年を 2 桁で表したものです。
- mm: 月を 2 桁で表したものです。
- ww: 週を 2 桁で表したものです。
- dd: 日を 2 桁で表したものです。
- hh: 24 時間表記の時を 2 桁で表したものです。
- nn: 連番を 2 桁で表したものです。
HTTP バージョン 2.0 API では、HttpSendHttpResponse と HttpSendResponseEntityBody が改訂され、応答をログに記録できるようにアプリケーションが HTTP_LOG_FIELDS_DATA 構造体を渡せるようになっている点に注意してください。サーバーセッションまたは URL グループに HttpServerLoggingProperty プロパティを設定しても、HTTP 応答がログに記録されるとは限りません。HttpSendResponseEntityBody および HttpSendHttpResponse の呼び出しに省略可能な HTTP_LOG_FIELDS_DATA 構造体が含まれていない限り、URL グループやサーバーセッションでのログ記録は行われません。詳細については、HTTP_LOG_FIELDS_DATA のトピックを参照してください。
ログファイル形式の詳細については、IIS ログファイル形式のトピックを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// HTTP_PROPERTY_FLAGS (x64 4 / x86 4 バイト)
typedef struct HTTP_PROPERTY_FLAGS {
DWORD _bitfield;
} HTTP_PROPERTY_FLAGS;
// HTTP_LOGGING_INFO (x64 72 / x86 48 バイト)
typedef struct HTTP_LOGGING_INFO {
HTTP_PROPERTY_FLAGS Flags;
DWORD LoggingFlags;
LPWSTR SoftwareName;
WORD SoftwareNameLength;
WORD DirectoryNameLength;
LPWSTR DirectoryName;
HTTP_LOGGING_TYPE Format;
DWORD Fields;
void* pExtFields;
WORD NumOfExtFields;
WORD MaxRecordSize;
HTTP_LOGGING_ROLLOVER_TYPE RolloverType;
DWORD RolloverSize;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
} HTTP_LOGGING_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_PROPERTY_FLAGS
{
public uint _bitfield;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_LOGGING_INFO
{
public HTTP_PROPERTY_FLAGS Flags;
public uint LoggingFlags;
public IntPtr SoftwareName;
public ushort SoftwareNameLength;
public ushort DirectoryNameLength;
public IntPtr DirectoryName;
public int Format;
public uint Fields;
public IntPtr pExtFields;
public ushort NumOfExtFields;
public ushort MaxRecordSize;
public int RolloverType;
public uint RolloverSize;
public IntPtr pSecurityDescriptor;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_PROPERTY_FLAGS
Public _bitfield As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_LOGGING_INFO
Public Flags As HTTP_PROPERTY_FLAGS
Public LoggingFlags As UInteger
Public SoftwareName As IntPtr
Public SoftwareNameLength As UShort
Public DirectoryNameLength As UShort
Public DirectoryName As IntPtr
Public Format As Integer
Public Fields As UInteger
Public pExtFields As IntPtr
Public NumOfExtFields As UShort
Public MaxRecordSize As UShort
Public RolloverType As Integer
Public RolloverSize As UInteger
Public pSecurityDescriptor As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class HTTP_PROPERTY_FLAGS(ctypes.Structure):
_fields_ = [
("_bitfield", wintypes.DWORD),
]
class HTTP_LOGGING_INFO(ctypes.Structure):
_fields_ = [
("Flags", HTTP_PROPERTY_FLAGS),
("LoggingFlags", wintypes.DWORD),
("SoftwareName", ctypes.c_void_p),
("SoftwareNameLength", ctypes.c_ushort),
("DirectoryNameLength", ctypes.c_ushort),
("DirectoryName", ctypes.c_void_p),
("Format", ctypes.c_int),
("Fields", wintypes.DWORD),
("pExtFields", ctypes.c_void_p),
("NumOfExtFields", ctypes.c_ushort),
("MaxRecordSize", ctypes.c_ushort),
("RolloverType", ctypes.c_int),
("RolloverSize", wintypes.DWORD),
("pSecurityDescriptor", ctypes.c_void_p),
]#[repr(C)]
pub struct HTTP_PROPERTY_FLAGS {
pub _bitfield: u32,
}
#[repr(C)]
pub struct HTTP_LOGGING_INFO {
pub Flags: HTTP_PROPERTY_FLAGS,
pub LoggingFlags: u32,
pub SoftwareName: *mut core::ffi::c_void,
pub SoftwareNameLength: u16,
pub DirectoryNameLength: u16,
pub DirectoryName: *mut core::ffi::c_void,
pub Format: i32,
pub Fields: u32,
pub pExtFields: *mut core::ffi::c_void,
pub NumOfExtFields: u16,
pub MaxRecordSize: u16,
pub RolloverType: i32,
pub RolloverSize: u32,
pub pSecurityDescriptor: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type HTTP_PROPERTY_FLAGS struct {
_bitfield uint32
}
type HTTP_LOGGING_INFO struct {
Flags HTTP_PROPERTY_FLAGS
LoggingFlags uint32
SoftwareName uintptr
SoftwareNameLength uint16
DirectoryNameLength uint16
DirectoryName uintptr
Format int32
Fields uint32
pExtFields uintptr
NumOfExtFields uint16
MaxRecordSize uint16
RolloverType int32
RolloverSize uint32
pSecurityDescriptor uintptr
}type
HTTP_PROPERTY_FLAGS = record
_bitfield: DWORD;
end;
HTTP_LOGGING_INFO = record
Flags: HTTP_PROPERTY_FLAGS;
LoggingFlags: DWORD;
SoftwareName: Pointer;
SoftwareNameLength: Word;
DirectoryNameLength: Word;
DirectoryName: Pointer;
Format: Integer;
Fields: DWORD;
pExtFields: Pointer;
NumOfExtFields: Word;
MaxRecordSize: Word;
RolloverType: Integer;
RolloverSize: DWORD;
pSecurityDescriptor: Pointer;
end;const HTTP_PROPERTY_FLAGS = extern struct {
_bitfield: u32,
};
const HTTP_LOGGING_INFO = extern struct {
Flags: HTTP_PROPERTY_FLAGS,
LoggingFlags: u32,
SoftwareName: ?*anyopaque,
SoftwareNameLength: u16,
DirectoryNameLength: u16,
DirectoryName: ?*anyopaque,
Format: i32,
Fields: u32,
pExtFields: ?*anyopaque,
NumOfExtFields: u16,
MaxRecordSize: u16,
RolloverType: i32,
RolloverSize: u32,
pSecurityDescriptor: ?*anyopaque,
};type
HTTP_PROPERTY_FLAGS {.bycopy.} = object
_bitfield: uint32
HTTP_LOGGING_INFO {.bycopy.} = object
Flags: HTTP_PROPERTY_FLAGS
LoggingFlags: uint32
SoftwareName: pointer
SoftwareNameLength: uint16
DirectoryNameLength: uint16
DirectoryName: pointer
Format: int32
Fields: uint32
pExtFields: pointer
NumOfExtFields: uint16
MaxRecordSize: uint16
RolloverType: int32
RolloverSize: uint32
pSecurityDescriptor: pointerstruct HTTP_PROPERTY_FLAGS
{
uint _bitfield;
}
struct HTTP_LOGGING_INFO
{
HTTP_PROPERTY_FLAGS Flags;
uint LoggingFlags;
void* SoftwareName;
ushort SoftwareNameLength;
ushort DirectoryNameLength;
void* DirectoryName;
int Format;
uint Fields;
void* pExtFields;
ushort NumOfExtFields;
ushort MaxRecordSize;
int RolloverType;
uint RolloverSize;
void* pSecurityDescriptor;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; HTTP_LOGGING_INFO サイズ: 48 バイト(x86)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Flags : HTTP_PROPERTY_FLAGS (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; LoggingFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; SoftwareName : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; SoftwareNameLength : WORD (+12, 2byte) wpoke st,12,値 / 値 = wpeek(st,12)
; DirectoryNameLength : WORD (+14, 2byte) wpoke st,14,値 / 値 = wpeek(st,14)
; DirectoryName : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Format : HTTP_LOGGING_TYPE (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Fields : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pExtFields : void* (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; NumOfExtFields : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; MaxRecordSize : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; RolloverType : HTTP_LOGGING_ROLLOVER_TYPE (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; RolloverSize : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pSecurityDescriptor : PSECURITY_DESCRIPTOR (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HTTP_LOGGING_INFO サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; Flags : HTTP_PROPERTY_FLAGS (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; LoggingFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; SoftwareName : LPWSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; SoftwareNameLength : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; DirectoryNameLength : WORD (+18, 2byte) wpoke st,18,値 / 値 = wpeek(st,18)
; DirectoryName : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; Format : HTTP_LOGGING_TYPE (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; Fields : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pExtFields : void* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; NumOfExtFields : WORD (+48, 2byte) wpoke st,48,値 / 値 = wpeek(st,48)
; MaxRecordSize : WORD (+50, 2byte) wpoke st,50,値 / 値 = wpeek(st,50)
; RolloverType : HTTP_LOGGING_ROLLOVER_TYPE (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; RolloverSize : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pSecurityDescriptor : PSECURITY_DESCRIPTOR (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global HTTP_PROPERTY_FLAGS
#field int _bitfield
#endstruct
#defstruct global HTTP_LOGGING_INFO
#field HTTP_PROPERTY_FLAGS Flags
#field int LoggingFlags
#field intptr SoftwareName
#field short SoftwareNameLength
#field short DirectoryNameLength
#field intptr DirectoryName
#field int Format
#field int Fields
#field intptr pExtFields
#field short NumOfExtFields
#field short MaxRecordSize
#field int RolloverType
#field int RolloverSize
#field intptr pSecurityDescriptor
#endstruct
stdim st, HTTP_LOGGING_INFO ; NSTRUCT 変数を確保
st->LoggingFlags = 100
mes "LoggingFlags=" + st->LoggingFlags