用于网站的默认日志文件设置 <logFile>
概述
<siteDefaults>
元素的 <logFile>
元素包含可用于为 IIS 7 及更高版本上的站点配置默认日志记录的属性。
例如,你可以启用或禁用日志记录、配置 IIS 日志文件的格式、指定要存储在日志文件中的信息类别,以及更改日志文件的存储目录。 还可以使用 <logFile>
元素来控制 IIS 根据日志文件大小或时间间隔创建新日志文件的频率,以及日志文件可以达到的最大大小(以字节为单位)。
默认情况下,IIS 7 及更高版本使用万维网联合会 (W3C) 日志文件格式。 可以通过将 logFormat 属性修改为 IIS、NCSA 或 Custom 来更改此设置。
注意
在 IIS 7 及更高版本中,ODBC 日志记录作为自定义日志记录模块实现。 因此,在 IIS 7 及更高版本中启用和配置 ODBC 日志记录包含两个单独的操作:
- 在
<odbcLogging>
元素中设置 ODBC 日志记录属性。 这些属性指定 ODBC 连接的系统数据源名称 (DSN)、表名、用户名和密码。 - 在
<logFile>
元素中设置正确的自定义日志记录属性。 这些属性必须将日志文件格式设置为“Custom”,并将自定义日志插件类 ID 设置为“{FF16065B-DE82-11CF-BC0A-00AA006111E0}”。
有关 ODBC 日志记录的详细信息,请参阅 <odbcLogging>
元素。
可以通过编辑 logExtFileFlags 属性来定义 IIS 记录的信息类别。 默认值为 Date
、Time
、ClientIP
、UserName
、ServerIP
、Method
、UriStem
、UriQuery
、TimeTaken
、HttpStatus
、Win32Status
、ServerPort
、UserAgent
、HttpSubStatus
和 Referer
。
注意
如果在特定站点的 <siteDefaults>
部分和 <site>
部分中都配置了 <logFile>
元素,则会将 <site>
部分中的配置用于该站点。
除了标准记录集之外,IIS 8.5 还支持记录自定义字段。 日志文件格式必须是 W3C 才能添加自定义字段。 有关详细信息,请参阅 customFields
。
兼容性
版本 | 说明 |
---|---|
IIS 10.0 | <logFile> 元素在 IIS 10.0 中未进行修改。 |
IIS 8.5 | 添加了 flushByEntrycountW3CLog 属性,用于指定在将事件刷新到日志文件之前存储在缓冲区中的事件数。 添加了 logTargetW3C 属性,用于指定如何处理记录的 IIS 事件。 添加了 maxLogLineLength 属性,用于指定日志文件中行的最大长度。 添加了 <customFields> 子元素。 |
IIS 8.0 | 添加了 logSiteId 属性,用于指定 -sitename 字段的内容,并在 logExtFileFlags 属性的默认值中添加了 referer 标志。 |
IIS 7.5 | <logFile> 元素在 IIS 7.5 中未进行修改。 |
IIS 7.0 | IIS 7.0 中引入了 <siteDefaults> 元素的 <logFile> 元素。 |
IIS 6.0 | <logFile> 元素取代了 IIS 6.0 IIsWebService 元数据库对象上的日志记录属性部分。 |
安装
<logFile>
元素包含在 IIS 7 及更高版本的默认安装中。
操作方式
如何编辑服务器的默认日志记录设置
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows 8 或 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows Vista 或 Windows 7:
- 在任务栏上,单击“开始”,然后单击“控制面板”。
- 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,单击要为其配置日志记录的服务器名称。
在“日志记录”窗格的“格式”框中,选择日志文件格式,然后在“目录”框中键入存储日志文件的目录的路径,或单击“浏览...”以选择要在其中存储日志文件的目录。
如果选择使用 W3C 日志文件格式:
如何为 W3C 日志配置 ETW 或文件日志记录
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开“站点”节点。
在站点的主窗格中,双击“日志记录”。
在“日志记录”主页中,对于“日志事件目标”,选择“仅日志文件”、“仅 ETW 事件”或“日志文件和 ETW 事件”。
如何配置按条目计数刷新 W3C 日志
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中选择服务器,然后双击“配置编辑器”。
在“配置编辑器”的“部分”中,展开
system.applicationHost
,然后选择“站点”。展开 siteDefaults,然后展开 logFile。
对于“flushByEntryCountW3Clog”,输入在将事件刷新到日志文件之前存储在缓冲区中的事件数。
在“操作”窗格中,单击“应用”。
如何配置最大日志行长度
打开 Internet Information Services (IIS) 管理器:
如果使用的是 Windows Server 2012 R2:
- 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”。
如果使用的是 Windows 8.1:
- 按住 Windows 键,按字母 X,然后单击“控制面板”。
- 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
在“连接”窗格中,展开服务器,然后双击“配置编辑器”。
在“配置编辑器”的“部分”中,展开
system.applicationHost
,然后选择“站点”。展开 siteDefaults,然后展开 logFile。
对于“maxLogLineLength”,输入日志文件单行的最大字节数。
在“操作”窗格中,单击“应用”。
配置
特性
属性 | 说明 | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
customLogPluginClsid |
可选的字符串属性。 按优先级顺序为自定义模块指定一个或多个 COM 对象类 ID (CLSID)。 |
||||||||||||||||||||||||||||||||||||||||||||||
directory |
可选的字符串属性。 指定日志记录目录,其中存储日志文件和与日志记录相关的支持文件。 默认值为 %SystemDrive%\inetpub\logs\LogFiles 。 |
||||||||||||||||||||||||||||||||||||||||||||||
enabled |
可选布尔属性。 指定是为站点启用 (true) 还是禁用 (false) 日志记录。 注意:ASP 和 ODBC 错误不会记录在 IIS 日志文件中。 默认值为 true 。 |
||||||||||||||||||||||||||||||||||||||||||||||
flushByEntryCountW3CLog |
可选 uint 属性。 指定在将事件刷新到日志文件之前存储在缓冲区中的事件数。 数字越小,事件刷新的速度越快,但磁盘操作次数越多,性能越差。 若要更实时地排除故障,请降低该值;若要提高性能,请提高该值。 如果值为 0 ,则指定以默认最大值 64k 进行刷新。默认值为 0 。 |
||||||||||||||||||||||||||||||||||||||||||||||
localTimeRollover |
可选布尔属性。 指定是基于本地时间还是协调世界时 (UTC)(以前称为格林威治标准时间 (GMT))创建新日志文件。 如果为 false,则基于 UTC 创建新日志文件。 注意:无论设置如何,每个 W3C 扩展日志记录的时间戳都是基于 UTC 的。 默认值为 false 。 |
||||||||||||||||||||||||||||||||||||||||||||||
logExtFileFlags |
可选 flags 属性。 指定在记录站点事件期间写入日志文件(使用 W3C 扩展日志文件格式时)或 ODBC 数据源的信息类别。 logExtFileFlags 属性可为以下一个或多个值。 如果指定多个值,请用逗号 (,) 分隔。 默认值为 Date 、Time 、ClientIP 、UserName 、ServerIP 、Method 、UriStem 、UriQuery 、TimeTaken 、HttpStatus 、Win32Status 、ServerPort 、UserAgent 、HttpSubStatus 、Referer 。
|
||||||||||||||||||||||||||||||||||||||||||||||
logFormat |
可选 enum 属性。 指定日志文件格式。 logFormat 属性可为以下值之一。 默认值为 W3C 。
|
||||||||||||||||||||||||||||||||||||||||||||||
logSiteId |
可选布尔属性。 指定 s-sitename 字段将包含站点名称 (false) 或站点 ID (true)。 如果“每个属性一个日志文件”设置为 Site (内置默认值),则默认情况下日志文件中不会出现 s-sitename 列,因为日志文件名属性将改为包含站点 ID。 如果“每个属性一个日志文件”设置为 Server ,则默认情况下日志文件中将包含 s-sitename 列。默认值为 True ,即 s-sitename 字段包含站点 ID。 若要改为记录站点名称,请将 logSiteID 设置为 False 。 |
||||||||||||||||||||||||||||||||||||||||||||||
logTargetW3C |
可选 Flags 属性。 指定 IIS 是否将使用 Windows 事件跟踪 (ETW) 和/或文件日志记录来处理记录的 IIS 事件。 ETW 提供实时日志记录,并使用 ETW 提供程序和标准查询机制。 文件日志记录将事件数据存储在文本文件中,你可以分析这些文件以访问日志记录数据。 当 IIS 使用日志文件时,HTTP.sys 在事务完成后将数据直接记录到文本日志文件中。 使用 ETW 时,HTTP.sys 使用 iislogging 提供程序将数据发送到 ETW,LOGSVC 服务则管理日志数据,包括查询 ETW 数据、直接从工作进程收集数据以及将数据发送到日志文件。 logTargetW3C 属性可能具有以下值。 默认值为 File 。 如果在 applicationHost.config 中为服务器日志文件默认值的 logTargetW3C 同时列出了 File 和 ETW ,则相当于在 IIS 管理器的服务器“日志记录”窗格中选择了“日志文件和 ETW 事件”。
|
||||||||||||||||||||||||||||||||||||||||||||||
maxLogLineLength |
可选 uint 属性。 指定日志文件中行的最大长度。 可用于限制通过日志记录累积的数据量,节省磁盘空间,尤其是在添加自定义日志记录字段时。 范围从 2 到 65,536。 默认值为 65536 。 |
||||||||||||||||||||||||||||||||||||||||||||||
period |
可选 enum 属性。 指定 IIS 创建新日志文件的频率。 period 属性可为以下值之一。 默认值为 Daily 。
|
||||||||||||||||||||||||||||||||||||||||||||||
truncateSize |
可选 int64 属性。 指定日志文件的最大大小(以字节为单位),超过该大小后将创建新日志文件。 仅当为 period 属性选择了 MaxSize 时,此值才适用。 最小文件大小为 1,048,576 字节。 如果将此特性设置为小于 1,048,576 个字节的值,则会隐式将默认值假定为 1,048,576 个字节。 默认值为 20971520 。 |
子元素
元素 | 说明 |
---|---|
customFields |
可选元素。 指定 W3C 日志中默认自定义字段的配置设置。 |
配置示例
以下配置示例指定默认 logFile
选项。
<system.applicationHost>
<sites>
<siteDefaults>
<logFile logFormat="W3C"
directory="%SystemDrive%\inetpub\logs\LogFiles"
enabled="true">
<customFields>
<clear/>
<add logFieldName="ContosoField" sourceName="ContosoSource"
sourceType="ServerVariable" />
</customFields>
</logFile>
</siteDefaults>
</sites>
</system.applicationHost>
代码示例
以下代码示例配置 IIS 7 的默认 logFile
选项。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites /siteDefaults.logFile.enabled:"True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /siteDefaults.logFile.logFormat:"W3C" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /siteDefaults.logFile.directory:"%SystemDrive%\inetpub\logs\LogFiles" /commit:apphost
注意
使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost
。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElement siteDefaultsElement = sitesSection.GetChildElement("siteDefaults");
ConfigurationElement logFileElement = siteDefaultsElement.GetChildElement("logFile");
logFileElement["logFormat"] = @"W3C";
logFileElement["directory"] = @"%SystemDrive%\inetpub\logs\LogFiles";
logFileElement["enabled"] = true;
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim siteDefaultsElement As ConfigurationElement = sitesSection.GetChildElement("siteDefaults")
Dim logFileElement As ConfigurationElement = siteDefaultsElement.GetChildElement("logFile")
logFileElement("logFormat") = "W3C"
logFileElement("directory") = "%SystemDrive%\inetpub\logs\LogFiles"
logFileElement("enabled") = True
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults");
var logFileElement = siteDefaultsElement.ChildElements.Item("logFile");
logFileElement.Properties.Item("logFormat").Value = "W3C";
logFileElement.Properties.Item("directory").Value = "%SystemDrive%\\inetpub\\logs\\LogFiles";
logFileElement.Properties.Item("enabled").Value = true;
adminManager.CommitChanges();
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set siteDefaultsElement = sitesSection.ChildElements.Item("siteDefaults")
Set logFileElement = siteDefaultsElement.ChildElements.Item("logFile")
logFileElement.Properties.Item("logFormat").Value = "W3C"
logFileElement.Properties.Item("directory").Value = "%SystemDrive%\inetpub\logs\LogFiles"
logFileElement.Properties.Item("enabled").Value = True
adminManager.CommitChanges()