Поделиться через


Файл <журнала FTP LogFile>

Общие сведения

Элемент <logFile> используется для настройки параметров ведения журнала действий для ftp-сайта.

Например, можно включить или отключить ведение журнала, указать категории сведений для хранения в файле журнала и изменить каталог, в котором хранится файл журнала. Элемент также можно использовать для <logFile> управления тем, как часто СЛУЖБЫ IIS создают новый файл журнала на основе размера файла журнала или интервала времени и максимального размера (в байтах), которым может стать файл журнала.

Примечание

В отличие от веб-сайтов, которые могут использовать формат IIS, NCSA или W3C для файлов журналов, служба FTP 7 хранит файлы журналов только в формате W3C.

Категории сведений, регистрируемых в iis, можно определить, изменив атрибут logExtFileFlags . Значения по умолчанию: Date, Time, , ClientIPUserName, ServerIP, UriStemMethod, , FtpStatus, Win32Status, FtpSubStatus, ServerPort, Sessionи FullPath.

Совместимость

Версия Примечания
IIS 10.0 Элемент <logFile> не был изменен в IIS 10.0.
IIS 8,5 Элемент <logFile> не был изменен в IIS 8.5.
IIS 8,0 Элемент <logFile> не был изменен в IIS 8.0.
IIS 7,5 Элемент <logFile> элемента поставляется <ftpServer> как компонент IIS 7.5.
IIS 7.0 Элемент <logFile> элемента появился <ftpServer> в FTP 7.0, который был отдельной загрузкой для IIS 7.0.
IIS 6,0 Н/Д

Примечание

Службы FTP 7.0 и FTP 7.5 поставляются внеполосно для IIS 7.0, что требует скачивания и установки модулей по следующему URL-адресу:

https://www.iis.net/expand/FTP

В Windows 7 и Windows Server 2008 R2 служба FTP 7.5 поставляется в качестве функции для IIS 7.5, поэтому скачивание службы FTP больше не требуется.

Настройка

Чтобы обеспечить поддержку публикации FTP для веб-сервера, необходимо установить службу FTP. Для этого выполните следующие действия.

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.

  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.

  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.

  4. На странице Роли сервера разверните узел Веб-сервер (IIS) и выберите FTP-сервер.

    Примечание

    Для поддержки ASP. Проверка подлинности членства или проверка подлинности диспетчера IIS для службы FTP. Помимо службы FTP необходимо выбрать расширяемость FTP.
    Снимок экрана: выделенный параметр расширяемости F T P. .

  5. Нажмите кнопку Далее, а затем на странице Выбор компонентов нажмите кнопку Далее еще раз.

  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.

  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.

  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.

  3. Разверните узел Службы IIS, а затем выберите FTP-сервер.

    Примечание

    Для поддержки ASP. Проверка подлинности членства или проверка подлинности диспетчера IIS для службы FTP. Также необходимо выбрать расширяемость FTP.
    Снимок экрана: выделенная папка расширяемости F T P.

  4. Нажмите кнопку ОК.

  5. Щелкните Закрыть.

Windows Server 2008 R2

  1. На панели задач нажмите кнопку Пуск, выберите Администрирование, а затем диспетчер сервера.

  2. В области иерархии диспетчер сервера разверните узел Роли и выберите Веб-сервер (IIS).

  3. На панели Веб-сервер (IIS) прокрутите страницу до раздела Службы ролей и щелкните Добавить службы ролей.

  4. На странице Выбор служб ролеймастера добавления служб ролей разверните узел FTP-сервер.

  5. Выберите Служба FTP.

    Примечание

    Для поддержки ASP. Проверка подлинности членства или проверка подлинности диспетчера IIS для службы FTP. Также необходимо выбрать расширяемость FTP.
    Снимок экрана: выделенный параметр службы F T P.

  6. Щелкните Далее.

  7. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.

  8. На странице Результаты нажмите кнопку Закрыть.

Windows 7

  1. На панели задач нажмите кнопку Пуск, а затем панель управления.

  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.

  3. Разверните узел Службы IIS, а затем FTP-сервер.

  4. Выберите Служба FTP.

    Примечание

    Для поддержки ASP. Проверка подлинности членства или проверка подлинности диспетчера IIS для службы FTP. Также необходимо выбрать расширяемость FTP.
    Снимок экрана: вложенные папки служб IIS.

  5. Нажмите кнопку ОК.

Windows Server 2008 или Windows Vista

  1. Скачайте пакет установки по следующему URL-адресу:

  2. Следуйте инструкциям в следующем пошаговом руководстве, чтобы установить службу FTP:

Инструкции

Настройка параметров ведения журнала для FTP-сайта

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните имя сервера, а затем перейдите на сайт, на котором требуется настроить ведение журнала.

  3. На панели Главная дважды щелкните ведение журнала FTP.
    Снимок экрана: панель - В разделе Смена файла журнала щелкните Выбрать поля W3C...

  4. Выберите поля для файлов журнала и нажмите кнопку ОК.
    Снимок экрана: диалоговое окно

  5. В разделе Каталог укажите путь для хранения файла журнала. Значение по умолчанию — %SystemDrive%\inetpub\logs\LogFiles.

  6. В разделе Смена файла журнала укажите следующие параметры:

    • Расписание: для создания нового файла журнала, основанного на одном из следующих значений:

      • Каждый час: новый файл журнала создается каждый час.
      • Ежедневно: новый файл журнала создается каждый день.
      • Еженедельно: новый файл журнала создается каждую неделю.
      • Ежемесячно: новый файл журнала создается ежемесячно.
    • Максимальный размер файла (в байтах): для создания нового файла журнала, когда файл достигает определенного размера (в байтах). Минимальный размер файла — 1 048 576 байтов. Если установленное значение этого атрибута меньше, чем 1 048 576 байтов, неявно принимается значение по умолчанию, равное 1 048 576 байтам.

    • Не создавайте новый файл журнала. Существует один файл журнала, который будет продолжать увеличиваться по мере записи в журнал.

    • Выберите Использовать местное время для именования и смены файлов , чтобы указать, что для именования файлов журнала и времени для смены файлов журнала используется локальное время сервера. Когда этот флажок не установлен, используется время в формате UTC.
      Снимок экрана: раздел

  7. Щелкните Применить в области Действия.

Параметр Configuration

Атрибуты

Атрибут Описание
directory Необязательный строковый атрибут.

Указывает каталог ведения журнала, в котором хранятся файл журнала и файлы поддержки, связанные с ведением журнала.

Значение по умолчанию — %SystemDrive%\inetpub\logs\LogFiles.
enabled Дополнительный логический атрибут.

Значение true , если ведение журнала включено; в противном случае — false.

Значение по умолчанию — true.
localTimeRollover Дополнительный логический атрибут.

Значение true , если новый файл журнала создается на основе местного времени; в противном случае значение false для времени в формате UTC, которое ранее называлось среднее время по Гринвичу (GMT).

Примечание: Независимо от параметра, метка времени для каждой записи журнала расширенного ведения журнала W3C основана на формате UTC.

Значение по умолчанию — false.
logExtFileFlags Необязательный атрибут flags.

Указывает категории сведений, которые записываются либо в файл журнала (при использовании расширенного формата файла журнала W3C), либо в источник данных ODBC во время ведения журнала событий для сайта. Атрибут logExtFileFlags может иметь одно или несколько следующих значений. Если указано несколько значений, разделите их запятой (,).

Значения по умолчанию: , , , UserNameClientIP, MethodServerIP, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Sessionи FullPath. TimeDate
Значение Описание
BytesRecv Зайдите в журнал количество байтов, полученных сервером.

Числовое значение равно 8192.
BytesSent Зайдите в журнал количество байтов, отправленных сервером.

Числовое значение равно 4096.
ClientIP Зайдите в журнал IP-адрес клиента, который сделал запрос.

Числовое значение равно 4.
ClientPort Зайдите в журнал порт клиента, который сделал запрос.

Числовое значение равно 33554432.
ComputerName Зайдите в журнал имя сервера, на котором была создана запись файла журнала.

Числовое значение равно 32.
Date Зайдите в журнал дату, в которую произошло действие.

Числовое значение равно 1.
FtpStatus Зайдите в журнал код состояния FTP.

Числовое значение равно 1024.
FtpSubStatus Зайдите в журнал код подсостояния ошибки FTP.

Числовое значение равно 2097152.
FullPath Зайдите в журнал полный относительный путь. Примечание. Это может быть другой URI, запрошенный клиентом, который регистрируется путем установки флага UriStem .

Числовое значение равно 8388608.
Host Зайдите в журнал имя виртуального узла, если оно есть.

Числовое значение равно 1048576.
Info Зайдите в журнал расширенные сведения об отладке, если таковые имеются.

Числовое значение равно 16777216.
Method Зайдите в журнал запрошенное действие. Например, USER , PASS и т. д.

Числовое значение равно 128.
ServerIP Зайдите в журнал IP-адрес сервера, на котором была создана запись файла журнала.

Числовое значение равно 64.
ServerPort Зайдите в журнал номер порта сервера, настроенный для сайта.

Числовое значение равно 32768.
Session Зайдите в журнал уникальный идентификатор сеанса FTP. Это полезно для анализа активности сеанса в журналах.

Числовое значение равно 4194304.
SiteName Зайдите в журнал имя и номер экземпляра веб-службы для сайта.

Числовое значение равно 16.
Time Зайдите в журнал время в формате UTC, в которое произошло действие.

Числовое значение равно 2.
TimeTaken Зайдите в журнал время, затраченное на выполнение запроса. Затраченное время записывается в миллисекундах.

Числовое значение равно 16384.
UriStem Зайдите в журнал сведения о стволе универсального идентификатора ресурса (URI), который является целевым объектом действия. Примечание. При этом URI отображается точно так, как запрашивал клиент, что может быть неполным относительным путем. Для полного относительного пути используйте FullPath флаг .

Числовое значение равно 256.
UserName Зайдите в журнал имя пользователя, прошедшего проверку подлинности, который обращается к серверу. Анонимные пользователи обозначаются дефисом.

Числовое значение равно 8.
Win32Status Зайдите в журнал код состояния Windows.

Числовое значение равно 2048.
period Необязательный атрибут перечисления.

Указывает, как часто служба FTP создает новый файл журнала. Атрибут period может иметь одно из следующих возможных значений.

Значение по умолчанию — Daily.
Значение Описание
Daily Ежедневно создавайте новый файл журнала.

Числовое значение равно 1.
Hourly Создавайте новый файл журнала ежечасно.

Числовое значение равно 4.
MaxSize Создайте новый файл журнала при достижении максимального размера. Максимальный размер указывается в атрибуте truncateSize.

Числовое значение равно 0.
Monthly Создавайте новый файл журнала ежемесячно.

Числовое значение равно 3.
Weekly Создавайте новый файл журнала еженедельно.

Числовое значение равно 2.
selectiveLogging Необязательный атрибут flags.

Задает уровень детализации для ведения журнала FTP.

Значение по умолчанию — LogSuccessful,LogError,LogInfrastructure.
Значение Описание
LogError Указывает, что будут регистрироваться ошибки. Объем фактически регистрированных данных также зависит от настройки флага LogInfrastructure .

Числовое значение равно 2.
LogInfrastructure Указывает, что будут зарегистрированы все ftp-команды и низкоуровневые действия канала данных. Например, журналы будут содержать записи для DataChannelOpened, DataChannelClosed, PORT/EPRT, PASV/EPSV, если LogInfrastructure установлен флаг .

Числовое значение равно 4.
LogSuccessful Указывает, что успешное действие будет зарегистрировано в журнале. Объем фактически регистрированных данных также зависит от настройки флага LogInfrastructure .

Числовое значение равно 1.
truncateSize Необязательный атрибут int64.

Указывает максимальный размер файла журнала (в байтах), по истечении которого создается новый файл журнала. Это значение применимо только в том случае, если MaxSize выбрано для атрибута period . Минимальный размер файла — 1 048 576 байт. Если для этого атрибута задано значение меньше 1 048 576 байт, значение по умолчанию неявно принимается как 1 048 576 байт.

Значение по умолчанию — 20971520.

Дочерние элементы

Отсутствует.

Образец конфигурации

В следующем примере конфигурации показан FTP с настраиваемыми параметрами ведения журнала, которые указывают, что команды инфраструктуры не будут записываться в журнал, файлы журналов будут ежедневно сменяться, а в поля по умолчанию добавлен дополнительный параметр отладки.

<site name="ftp.example.com" id="5">
   <application path="/">
      <virtualDirectory path="/" physicalPath="c:\inetpub\www.example.com" />
   </application>
   <bindings>
      <binding protocol="ftp" bindingInformation="*:21:" />
   </bindings>
   <ftpServer serverAutoStart="true">
      <security>
          <authentication>
            <basicAuthentication enabled="true" />
            <anonymousAuthentication enabled="false" />
          </authentication>
      </security>
      <logFile period="Daily"
         logExtFileFlags="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, ServerPort, FtpSubStatus, Session, FullPath, Info"
         selectiveLogging="LogSuccessful, LogError" />
   </ftpServer>
</site>

Пример кода

В следующих примерах иллюстрируется включение ведения журнала для ftp-сайта, настройка каталога файлов журнала для ftp-сайта для определенного пути и указание ежедневного перезапуска файлов журнала.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.directory:"C:\logs\LogFiles" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.period:"Daily" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.enabled:"True" /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра 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");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"ftp.example.com");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");
         ConfigurationElement logFileElement = ftpServerElement.GetChildElement("logFile");
         logFileElement["directory"] = @"C:\logs\LogFiles";
         logFileElement["period"] = @"Daily";
         logFileElement["enabled"] = true;

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

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 sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "ftp.example.com")

      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim ftpServerElement As ConfigurationElement = siteElement.GetChildElement("ftpServer")
      Dim logFileElement As ConfigurationElement = ftpServerElement.GetChildElement("logFile")
      logFileElement("directory") = "C:\logs\LogFiles"
      logFileElement("period") = "Daily"
      logFileElement("enabled") = True

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


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 sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "ftp.example.com"]);

if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var ftpServerElement = siteElement.ChildElements.Item("ftpServer");
var logFileElement = ftpServerElement.ChildElements.Item("logFile");
logFileElement.Properties.Item("directory").Value = "C:\\logs\\LogFiles";
logFileElement.Properties.Item("period").Value = "Daily";
logFileElement.Properties.Item("enabled").Value = true;

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "ftp.example.com"))

If siteElementPos = -1 Then
Wscript.Echo "Element not found!"
WScript.Quit
End If

Set siteElement = sitesCollection.Item(siteElementPos)
Set ftpServerElement = siteElement.ChildElements.Item("ftpServer")
Set logFileElement = ftpServerElement.ChildElements.Item("logFile")
logFileElement.Properties.Item("directory").Value = "C:\logs\LogFiles"
logFileElement.Properties.Item("period").Value = "Daily"
logFileElement.Properties.Item("enabled").Value = true

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function