IIS Website - Set log format

Octopus.Script exported 2017-12-22 by arnodenuijl belongs to ‘IIS’ category.

Sets fields included in IIS logging. Uses named checkboxes where the names are identical to the naming scheme in IIS Manager.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

SiteName

SiteName

null

Where should the logs be placed?

iisLogDirectory

Date (date)

Date = True

Time (time)

Time = True

ClientIP IP Address (c-ip)

ClientIP = True

User Name (cs-username)

UserName = True

Service Name (s-sitename)

ServiceName = False

ServerName (s-computername)

ComputerName = False

null

Server IP Address (s-ip)

ServerIP = False

Method (cs-method)

Method = True

UriStem (cs-uri-stem)

UriStem = True

null

Uri query (cs-uri-query)

UriQuery = True

null

Protocol Status (sc-status)

HttpStatus = True

Win32 Status (sc-win32-status)

Win32Status = False

null

Protocol Substatus (sc-substatus)

HttpSubStatus = True

Bytes sent (sc-bytes)

BytesSent = False

Bytes received (cs-bytes)

BytesRecv = False

null

Time taken (time-taken)

TimeTaken = True

Protocol version (cs-version)

ProtocolVersion = True

null

Host (cs-host)

Host = True

User agent (cs(UserAgent))

UserAgent = true

null

Cookie = False

Referer (cs(Referer))

Referer = False

null

Server Port (s-port)

ServerPort = True

Original IP

OriginalIP = True

From X-FORWARDED-FOR in request.

Script body

Steps based on this template will execute the following PowerShell script.

Import-Module "WebAdministration" -ErrorAction Stop

function SetIisLogPath {
    param($logPath, $IISsitename)
    write-host "#Updating IIS Log path"
    
    if (!(Test-Path "IIS:\Sites\$($IISsitename)")) {
        write-host "$IISsitename does not exist in IIS"
    } else {
        Set-ItemProperty IIS:\Sites\$($IISsitename) -name logFile.directory -value $logPath
        write-host "IIS LogPath updated to $logPath"
    }
}

function AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun
{
    param([string] $site) 

    #Clear existing log definition if it exists. We use site name to make it apparent where it belongs.
    clear-WebConfiguration -PSPath IIS:\ -Filter "system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='$site']"

    #Get current powershell execution folder
    $currentLocation = Get-Location

    #Create an empty bat which will be populated with appcmd instructions
    $stream = [System.IO.StreamWriter] "$currentLocation\$site.bat"

    $stream.WriteLine("%systemroot%\system32\inetsrv\appcmd.exe clear config ""$site"" -section:system.webServer/advancedLogging/server /commit:apphost")

    #Create site specific log definition
    $stream.WriteLine("%systemroot%\system32\inetsrv\appcmd.exe set config ""$site"" -section:system.webServer/advancedLogging/server /+`"logDefinitions.[baseFileName='$site',enabled='True',logRollOption='Schedule',schedule='Daily',publishLogEvent='False']`" /commit:apphost")

    #Get all available fields for logging
    $availableFields = Get-WebConfiguration "system.webServer/advancedLogging/server/fields"

    $targetFields = ((GetIisLogFields).iisHeader)
    Write-Host "Target fields: " (($targetFields) -join ',')
    #Add appcmd instruction to add all the selected fields above to be logged as part of the logging
    #The below section can be extended to filter out any unwanted fields
    foreach ($field in $targetFields) {
    	$f = (($availableFields.Collection) |Where-Object {$_.logHeaderName -eq "$field"})
    	Write-Host "Appending " $f.iisHeader $f.id
        $stream.WriteLine("C:\windows\system32\inetsrv\appcmd.exe set config ""$site"" -section:system.webServer/advancedLogging/server /+`"logDefinitions.[baseFileName='$site'].selectedFields.[id='$($f.id)',logHeaderName='$($f.logHeaderName)']`" /commit:apphost")
    }

    $stream.close()

    # execute the batch file create to configure the site specific Advanced Logging
    Start-Process -FilePath $currentLocation\$site.bat
    Start-Sleep -Seconds 10
}

function GetIisLogFields {
    $IisLogFields = @()
    if ($OctopusParameters['Date'] -eq "True") 		    { $IisLogFields += New-Object PSObject -Property @{id = "Date"; iisHeader = "date" } }
    if ($OctopusParameters['Time'] -eq "True") 		    { $IisLogFields += New-Object PSObject -Property @{id = "Time"; iisHeader = "time" } }
    if ($OctopusParameters['ClientIP'] -eq "True")      	{ $IisLogFields += New-Object PSObject -Property @{id = "ClientIP"; iisHeader = "c-ip"} }
    if ($OctopusParameters['UserName'] -eq "True")     	{ $IisLogFields += New-Object PSObject -Property @{id = "UserName"; iisHeader = "cs-username" } }
    if ($OctopusParameters['SiteName'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "SiteName"; iisHeader = "s-sitename" } }
    if ($OctopusParameters['ComputerName'] -eq "True")     { $IisLogFields += New-Object PSObject -Property @{id = "ComputerName"; iisHeader = "s-computername" } }
    if ($OctopusParameters['ServerIP'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "ServerIP"; iisHeader = "s-ip" } }
    if ($OctopusParameters['ServerPort'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "ServerPort"; iisHeader = "s-port" } }
    if ($OctopusParameters['Method'] -eq "True")    		{ $IisLogFields += New-Object PSObject -Property @{id = "Method"; iisHeader = "cs-method" } }
    if ($OctopusParameters['UriStem'] -eq "True") 	    	{ $IisLogFields += New-Object PSObject -Property @{id = "UriStem"; iisHeader = "cs-uri-stem" } }
    if ($OctopusParameters['UriQuery'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "UriQuery"; iisHeader = "cs-uri-query" } }
    if ($OctopusParameters['HttpStatus'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "HttpStatus"; iisHeader = "sc-status" } }
    if ($OctopusParameters['HttpSubStatus'] -eq "True") 	{ $IisLogFields += New-Object PSObject -Property @{id = "HttpSubStatus"; iisHeader = "sc-substatus" } }
    if ($OctopusParameters['Win32Status'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "Win32Status"; iisHeader = "sc-win32-status" } }
    if ($OctopusParameters['BytesSent'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "BytesSent"; iisHeader = "sc-bytes" } }
    if ($OctopusParameters['BytesRecv'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "BytesRecv"; iisHeader = "cs-bytes" } }
    if ($OctopusParameters['TimeTaken'] -eq "True")     	{ $IisLogFields += New-Object PSObject -Property @{id = "TimeTaken"; iisHeader = "TimeTakenMS" } }
    if ($OctopusParameters['ProtocolVersion'] -eq "True") 	{ $IisLogFields += New-Object PSObject -Property @{id = "ProtocolVersion"; iisHeader = "cs-version" } }
    if ($OctopusParameters['Host'] -eq "True") 		    { $IisLogFields += New-Object PSObject -Property @{id = "Host"; iisHeader = "cs(Host)" } }
    if ($OctopusParameters['UserAgent'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "UserAgent"; iisHeader = "cs(User-Agent)" } }
    if ($OctopusParameters['Cookie'] -eq "True")    		{ $IisLogFields += New-Object PSObject -Property @{id = "Cookie"; iisHeader = "cs(Cookie)" } }
    if ($OctopusParameters['Referer'] -eq "True") 		    { $IisLogFields += New-Object PSObject -Property @{id = "Referer"; iisHeader = "cs(Referer)" } }
    if ($OctopusParameters['OriginalIP'] -eq "True") 	    { $IisLogFields += New-Object PSObject -Property @{id = "OriginalIP"; iisHeader = "x-forwarded-for" } }
    return $IisLogFields    
}

function SetForIISAboveV7 {
    param($SiteName)
    [System.Collections.ArrayList]$logFields = ((GetIisLogFields).id)
    $filter = "/system.applicationHost/sites/site[@Name=""$SiteName""]/logFile"
    write-host "Filter: $filter"
    
    #Clear all existing custom fields...
    clear-WebConfiguration -PSPath IIS:\ -Filter "$filter/customFields"
    
    if ($logFields.Contains("OriginalIP")) { 
      add-WebConfiguration -PSPath IIS:\ -Filter "$filter/customFields" -Value @{logFieldName='OriginalIP';sourceType='RequestHeader';sourceName='X-FORWARDED-FOR'}
    }
    
    Write-Host (($logFields) -join ',')
    # This is part of extended logging and cannot be set using the syntax below.
    $logFields.Remove("OriginalIP")
    Set-WebConfigurationProperty -Filter $filter -Value (($logFields) -join ',') -Name "LogExtFileFlags"
}

function SetForIISV7 {
    param($site, $logDirectory)
    Write-Host 'Disables http logging module'
    Set-WebConfigurationProperty -Filter system.webServer/httpLogging -PSPath machine/webroot/apphost -Name dontlog -Value true
    Write-Host 'Adding X-Forwarded-For as OriginalIP to advanced logging'
    if (Get-WebConfigurationProperty "system.webServer/advancedLogging/server/fields" -Name Collection |Where-Object {$_.id -eq "OriginalID"}) {
	write-host "OriginalID field already exists. Will not modify existing definition."
    } else {
        Add-WebConfiguration "system.webServer/advancedLogging/server/fields" -value @{id="OriginalID";sourceName="X-Forwarded-For";sourceType="RequestHeader";logHeaderName="X-Forwarded-For";category="Default";loggingDataType="TypeLPCSTR"}
    }
    # Disables the default advanced logging config
    Set-WebConfigurationProperty -Filter "system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='%COMPUTERNAME%-Server']" -name enabled -value false
    # Enable Advanced Logging
    Set-WebConfigurationProperty -Filter system.webServer/advancedLogging/server -PSPath machine/webroot/apphost -Name enabled -Value true
    
    # Set log directory at server level
    Set-WebConfigurationProperty -Filter system.applicationHost/advancedLogging/serverLogs -PSPath machine/webroot/apphost -Name directory -Value $logDirectory
    
    # Set log directory at site default level
    Set-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/advancedLogging -PSPath machine/webroot/apphost -Name directory -Value $logDirectory	

    AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun $site	
}

Write-Host "Value of UriQuery parameter " $OctopusParameters['UriQuery']
$logPath = $OctopusParameters['IISLogPath']
$IISsitename = $OctopusParameters['webSiteName']
$iisMajorVersion = (get-itemproperty HKLM:\SOFTWARE\Microsoft\InetStp\ |select MajorVersion).MajorVersion
if ($iisMajorVersion -gt 7) {
  SetForIISAboveV7 $OctopusParameters['SiteName'] 
  SetIisLogPath $OctopusParameters['iisLogDirectory'] $OctopusParameters['SiteName']
} elseif ($iisMajorVersion -lt 7) {
   Write-Host 'Cannot handle IIS versions below 7. Found IIS version ' $iisMajorVersion
   exit 1
} else {
    SetForIISV7 $OctopusParameters['SiteName'] $OctopusParameters['iisLogDirectory']
}


Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "e46aad55-5484-48a7-a90d-970d40129893",
  "Name": "IIS Website - Set log format",
  "Description": "Sets fields included in IIS logging. Uses named checkboxes where the names are identical to the naming scheme in IIS Manager.",
  "Version": 14,
  "ExportedAt": "2017-12-22T14:56:00.000Z",
  "ActionType": "Octopus.Script",
  "Author": "arnodenuijl",
  "Parameters": [
    {
      "Id": "1a1520b9-58b1-44ae-b9df-991b34f6b62b",
      "Name": "SiteName",
      "Label": "SiteName",
      "HelpText": null,
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "66d6d9d2-3cc0-47f3-bcd1-6b1d9f0846dc",
      "Name": "iisLogDirectory",
      "Label": "Where should the logs be placed?",
      "HelpText": "",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "61656b11-a130-494d-aac4-a352db00a405",
      "Name": "Date",
      "Label": "Date (date)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "0c9f888f-5187-4218-b69b-e3b02f5f84d0",
      "Name": "Time",
      "Label": "Time (time)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "816117df-bedb-4c2b-8b17-046be5f04954",
      "Name": "ClientIP",
      "Label": "ClientIP IP Address (c-ip)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "8b56b533-52b2-4c90-9c8c-bff00e05104c",
      "Name": "UserName",
      "Label": "User Name (cs-username)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "97c865b4-cd9f-4e7c-9163-eb3bafdf7a31",
      "Name": "ServiceName",
      "Label": "Service Name (s-sitename)",
      "HelpText": "",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "d84fd363-736d-4f2f-94df-48833c240c32",
      "Name": "ComputerName",
      "Label": "ServerName (s-computername)",
      "HelpText": null,
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "52514137-54a9-4f7c-b701-3f16b0702ff7",
      "Name": "ServerIP",
      "Label": "Server IP Address (s-ip)",
      "HelpText": "",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "66c3b111-8c40-4100-bae2-df4cee69c7a4",
      "Name": "Method",
      "Label": "Method (cs-method)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "c049ab95-a33b-401e-be55-1e5a4f216eab",
      "Name": "UriStem",
      "Label": "UriStem (cs-uri-stem)",
      "HelpText": null,
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "ed535131-6fcd-440c-bf41-9356cc1a6b2f",
      "Name": "UriQuery",
      "Label": "Uri query (cs-uri-query)",
      "HelpText": null,
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "2d2d5072-8d94-4098-99a9-646918128f1a",
      "Name": "HttpStatus",
      "Label": "Protocol Status (sc-status)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "26839cc3-d338-4637-ba34-09134378dbc9",
      "Name": "Win32Status",
      "Label": "Win32 Status (sc-win32-status)",
      "HelpText": null,
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "b3ddf483-63c6-4f5d-a3db-7e7fc802d8f5",
      "Name": "HttpSubStatus",
      "Label": "Protocol Substatus (sc-substatus)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "cc63cdc5-6ce0-4476-960e-aa59eb064095",
      "Name": "BytesSent",
      "Label": "Bytes sent (sc-bytes)",
      "HelpText": "",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "cd121c63-7f76-4259-92aa-d013c7fedb97",
      "Name": "BytesRecv",
      "Label": "Bytes received (cs-bytes)",
      "HelpText": null,
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "da122f26-639e-49fa-b49c-25c281d24bc6",
      "Name": "TimeTaken",
      "Label": "Time taken (time-taken)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "1343443a-d3d9-4d84-a16b-76ed7d07d668",
      "Name": "ProtocolVersion",
      "Label": "Protocol version (cs-version)",
      "HelpText": null,
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "7ba34ff4-b677-4d4d-8302-a42b6a774295",
      "Name": "Host",
      "Label": "Host (cs-host)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "96379a19-d9c8-4808-9e2c-29a7e13f89a9",
      "Name": "UserAgent",
      "Label": "User agent (cs(UserAgent))",
      "HelpText": null,
      "DefaultValue": "true",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "c8d37be1-16e7-46de-92e0-c037c5227aa0",
      "Name": "Cookie",
      "Label": "Cookie (cs(Cookie))",
      "HelpText": "",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "4b4877b4-80f0-46fd-b272-26781706d717",
      "Name": "Referer",
      "Label": "Referer (cs(Referer))",
      "HelpText": null,
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "986223cd-eb82-4744-a27c-3dfba3d8c87a",
      "Name": "ServerPort",
      "Label": "Server Port (s-port)",
      "HelpText": "",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "779b89aa-8631-443f-9108-a44acd92f5ef",
      "Name": "OriginalIP",
      "Label": "Original IP",
      "HelpText": "From X-FORWARDED-FOR in request.",
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.ScriptBody": "Import-Module \"WebAdministration\" -ErrorAction Stop\n\nfunction SetIisLogPath {\n    param($logPath, $IISsitename)\n    write-host \"#Updating IIS Log path\"\n    \n    if (!(Test-Path \"IIS:\\Sites\\$($IISsitename)\")) {\n        write-host \"$IISsitename does not exist in IIS\"\n    } else {\n        Set-ItemProperty IIS:\\Sites\\$($IISsitename) -name logFile.directory -value $logPath\n        write-host \"IIS LogPath updated to $logPath\"\n    }\n}\n\nfunction AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun\n{\n    param([string] $site) \n\n    #Clear existing log definition if it exists. We use site name to make it apparent where it belongs.\n    clear-WebConfiguration -PSPath IIS:\\ -Filter \"system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='$site']\"\n\n    #Get current powershell execution folder\n    $currentLocation = Get-Location\n\n    #Create an empty bat which will be populated with appcmd instructions\n    $stream = [System.IO.StreamWriter] \"$currentLocation\\$site.bat\"\n\n    $stream.WriteLine(\"%systemroot%\\system32\\inetsrv\\appcmd.exe clear config \"\"$site\"\" -section:system.webServer/advancedLogging/server /commit:apphost\")\n\n    #Create site specific log definition\n    $stream.WriteLine(\"%systemroot%\\system32\\inetsrv\\appcmd.exe set config \"\"$site\"\" -section:system.webServer/advancedLogging/server /+`\"logDefinitions.[baseFileName='$site',enabled='True',logRollOption='Schedule',schedule='Daily',publishLogEvent='False']`\" /commit:apphost\")\n\n    #Get all available fields for logging\n    $availableFields = Get-WebConfiguration \"system.webServer/advancedLogging/server/fields\"\n\n    $targetFields = ((GetIisLogFields).iisHeader)\n    Write-Host \"Target fields: \" (($targetFields) -join ',')\n    #Add appcmd instruction to add all the selected fields above to be logged as part of the logging\n    #The below section can be extended to filter out any unwanted fields\n    foreach ($field in $targetFields) {\n    \t$f = (($availableFields.Collection) |Where-Object {$_.logHeaderName -eq \"$field\"})\n    \tWrite-Host \"Appending \" $f.iisHeader $f.id\n        $stream.WriteLine(\"C:\\windows\\system32\\inetsrv\\appcmd.exe set config \"\"$site\"\" -section:system.webServer/advancedLogging/server /+`\"logDefinitions.[baseFileName='$site'].selectedFields.[id='$($f.id)',logHeaderName='$($f.logHeaderName)']`\" /commit:apphost\")\n    }\n\n    $stream.close()\n\n    # execute the batch file create to configure the site specific Advanced Logging\n    Start-Process -FilePath $currentLocation\\$site.bat\n    Start-Sleep -Seconds 10\n}\n\nfunction GetIisLogFields {\n    $IisLogFields = @()\n    if ($OctopusParameters['Date'] -eq \"True\") \t\t    { $IisLogFields += New-Object PSObject -Property @{id = \"Date\"; iisHeader = \"date\" } }\n    if ($OctopusParameters['Time'] -eq \"True\") \t\t    { $IisLogFields += New-Object PSObject -Property @{id = \"Time\"; iisHeader = \"time\" } }\n    if ($OctopusParameters['ClientIP'] -eq \"True\")      \t{ $IisLogFields += New-Object PSObject -Property @{id = \"ClientIP\"; iisHeader = \"c-ip\"} }\n    if ($OctopusParameters['UserName'] -eq \"True\")     \t{ $IisLogFields += New-Object PSObject -Property @{id = \"UserName\"; iisHeader = \"cs-username\" } }\n    if ($OctopusParameters['SiteName'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"SiteName\"; iisHeader = \"s-sitename\" } }\n    if ($OctopusParameters['ComputerName'] -eq \"True\")     { $IisLogFields += New-Object PSObject -Property @{id = \"ComputerName\"; iisHeader = \"s-computername\" } }\n    if ($OctopusParameters['ServerIP'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"ServerIP\"; iisHeader = \"s-ip\" } }\n    if ($OctopusParameters['ServerPort'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"ServerPort\"; iisHeader = \"s-port\" } }\n    if ($OctopusParameters['Method'] -eq \"True\")    \t\t{ $IisLogFields += New-Object PSObject -Property @{id = \"Method\"; iisHeader = \"cs-method\" } }\n    if ($OctopusParameters['UriStem'] -eq \"True\") \t    \t{ $IisLogFields += New-Object PSObject -Property @{id = \"UriStem\"; iisHeader = \"cs-uri-stem\" } }\n    if ($OctopusParameters['UriQuery'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"UriQuery\"; iisHeader = \"cs-uri-query\" } }\n    if ($OctopusParameters['HttpStatus'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"HttpStatus\"; iisHeader = \"sc-status\" } }\n    if ($OctopusParameters['HttpSubStatus'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"HttpSubStatus\"; iisHeader = \"sc-substatus\" } }\n    if ($OctopusParameters['Win32Status'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"Win32Status\"; iisHeader = \"sc-win32-status\" } }\n    if ($OctopusParameters['BytesSent'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"BytesSent\"; iisHeader = \"sc-bytes\" } }\n    if ($OctopusParameters['BytesRecv'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"BytesRecv\"; iisHeader = \"cs-bytes\" } }\n    if ($OctopusParameters['TimeTaken'] -eq \"True\")     \t{ $IisLogFields += New-Object PSObject -Property @{id = \"TimeTaken\"; iisHeader = \"TimeTakenMS\" } }\n    if ($OctopusParameters['ProtocolVersion'] -eq \"True\") \t{ $IisLogFields += New-Object PSObject -Property @{id = \"ProtocolVersion\"; iisHeader = \"cs-version\" } }\n    if ($OctopusParameters['Host'] -eq \"True\") \t\t    { $IisLogFields += New-Object PSObject -Property @{id = \"Host\"; iisHeader = \"cs(Host)\" } }\n    if ($OctopusParameters['UserAgent'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"UserAgent\"; iisHeader = \"cs(User-Agent)\" } }\n    if ($OctopusParameters['Cookie'] -eq \"True\")    \t\t{ $IisLogFields += New-Object PSObject -Property @{id = \"Cookie\"; iisHeader = \"cs(Cookie)\" } }\n    if ($OctopusParameters['Referer'] -eq \"True\") \t\t    { $IisLogFields += New-Object PSObject -Property @{id = \"Referer\"; iisHeader = \"cs(Referer)\" } }\n    if ($OctopusParameters['OriginalIP'] -eq \"True\") \t    { $IisLogFields += New-Object PSObject -Property @{id = \"OriginalIP\"; iisHeader = \"x-forwarded-for\" } }\n    return $IisLogFields    \n}\n\nfunction SetForIISAboveV7 {\n    param($SiteName)\n    [System.Collections.ArrayList]$logFields = ((GetIisLogFields).id)\n    $filter = \"/system.applicationHost/sites/site[@Name=\"\"$SiteName\"\"]/logFile\"\n    write-host \"Filter: $filter\"\n    \n    #Clear all existing custom fields...\n    clear-WebConfiguration -PSPath IIS:\\ -Filter \"$filter/customFields\"\n    \n    if ($logFields.Contains(\"OriginalIP\")) { \n      add-WebConfiguration -PSPath IIS:\\ -Filter \"$filter/customFields\" -Value @{logFieldName='OriginalIP';sourceType='RequestHeader';sourceName='X-FORWARDED-FOR'}\n    }\n    \n    Write-Host (($logFields) -join ',')\n    # This is part of extended logging and cannot be set using the syntax below.\n    $logFields.Remove(\"OriginalIP\")\n    Set-WebConfigurationProperty -Filter $filter -Value (($logFields) -join ',') -Name \"LogExtFileFlags\"\n}\n\nfunction SetForIISV7 {\n    param($site, $logDirectory)\n    Write-Host 'Disables http logging module'\n    Set-WebConfigurationProperty -Filter system.webServer/httpLogging -PSPath machine/webroot/apphost -Name dontlog -Value true\n    Write-Host 'Adding X-Forwarded-For as OriginalIP to advanced logging'\n    if (Get-WebConfigurationProperty \"system.webServer/advancedLogging/server/fields\" -Name Collection |Where-Object {$_.id -eq \"OriginalID\"}) {\n\twrite-host \"OriginalID field already exists. Will not modify existing definition.\"\n    } else {\n        Add-WebConfiguration \"system.webServer/advancedLogging/server/fields\" -value @{id=\"OriginalID\";sourceName=\"X-Forwarded-For\";sourceType=\"RequestHeader\";logHeaderName=\"X-Forwarded-For\";category=\"Default\";loggingDataType=\"TypeLPCSTR\"}\n    }\n    # Disables the default advanced logging config\n    Set-WebConfigurationProperty -Filter \"system.webServer/advancedLogging/server/logDefinitions/logDefinition[@baseFileName='%COMPUTERNAME%-Server']\" -name enabled -value false\n    # Enable Advanced Logging\n    Set-WebConfigurationProperty -Filter system.webServer/advancedLogging/server -PSPath machine/webroot/apphost -Name enabled -Value true\n    \n    # Set log directory at server level\n    Set-WebConfigurationProperty -Filter system.applicationHost/advancedLogging/serverLogs -PSPath machine/webroot/apphost -Name directory -Value $logDirectory\n    \n    # Set log directory at site default level\n    Set-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/advancedLogging -PSPath machine/webroot/apphost -Name directory -Value $logDirectory\t\n\n    AdvancedLogging-GenerateAppCmdScriptToConfigureAndRun $site\t\n}\n\nWrite-Host \"Value of UriQuery parameter \" $OctopusParameters['UriQuery']\n$logPath = $OctopusParameters['IISLogPath']\n$IISsitename = $OctopusParameters['webSiteName']\n$iisMajorVersion = (get-itemproperty HKLM:\\SOFTWARE\\Microsoft\\InetStp\\ |select MajorVersion).MajorVersion\nif ($iisMajorVersion -gt 7) {\n  SetForIISAboveV7 $OctopusParameters['SiteName'] \n  SetIisLogPath $OctopusParameters['iisLogDirectory'] $OctopusParameters['SiteName']\n} elseif ($iisMajorVersion -lt 7) {\n   Write-Host 'Cannot handle IIS versions below 7. Found IIS version ' $iisMajorVersion\n   exit 1\n} else {\n    SetForIISV7 $OctopusParameters['SiteName'] $OctopusParameters['iisLogDirectory']\n}\n\n",
    "Octopus.Action.RunOnServer": "false",
    "Octopus.Action.Script.ScriptFileName": null,
    "Octopus.Action.Package.FeedId": null,
    "Octopus.Action.Package.PackageId": null
  },
  "Category": "IIS",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/iis-website-set-log-format.json",
  "Website": "/step-templates/e46aad55-5484-48a7-a90d-970d40129893",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Friday, December 22, 2017