caddy-log-converter/source/CaddyLog-To-AccessLog.ps1

57 lines
1.7 KiB
PowerShell
Raw Permalink Normal View History

2023-04-06 18:24:09 +00:00
param (
[Parameter(Mandatory = $false)][string] $inFile,
[Parameter(Mandatory = $false)][string] $outFile,
[Parameter(Mandatory = $false)][int] $lines = 0
)
if ([string]::IsNullOrWhiteSpace($inFile)) {
$inFile = [System.Environment]::GetEnvironmentVariable("INFILE")
}
if ([string]::IsNullOrWhiteSpace($outFile)) {
$outFile = [System.Environment]::GetEnvironmentVariable("OUTFILE")
}
$baseDate = (New-Object System.DateTime -ArgumentList @(1970, 1, 1, 0, 0, 0, [DateTimeKind]::Utc)).ToLocalTime()
$builder = New-Object System.Text.StringBuilder
$outputStream = [IO.File]::Open($outFile, [IO.FileMode]::Append, [IO.FileAccess]::Write, [IO.FileShare]::Read)
$outputWriter = New-Object -TypeName System.IO.StreamWriter -ArgumentList @($outputStream, [Text.Encoding]::UTF8)
Get-Content -Tail $lines -Wait -Path $inFile | ForEach-Object {
$l = ConvertFrom-Json -InputObject $_
$r = $l.request;
2023-04-06 19:03:16 +00:00
$userAgent = $r.headers.'User-Agent' | Select-Object -First 1
$referer = $r.headers.Referer | Select-Object -First 1
2023-04-06 18:24:09 +00:00
$commonLog = $builder
.Clear()
.Append($r.remote_ip)
.Append(" - [")
.Append($baseDate.AddSeconds($l.ts).ToString("yyyy-MM-dd HH:mm:ss.fff"))
.Append("] """)
.Append($r.host)
.Append(""" ")
.Append($r.method)
.Append(" ")
.Append($r.uri)
.Append(" ")
.Append($r.proto)
.Append(" ")
.Append($l.status)
.Append(" ")
.Append($l.size)
.Append(" """)
.Append($referer)
.Append(""" """)
.Append($userAgent)
.Append("""")
.ToString()
2023-04-06 18:24:09 +00:00
Write-Output $commonLog
$outputWriter.WriteLine($commonLog)
$outputWriter.Flush()
}