概述
<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()




