PSOutLog.psm1

$logColor=@{"[INFO]"="Green";"[WARN]"="Yellow";"[ERR]"="Red"}
function Add-Logging ([string]$str, [string]$lvl){
    $psPath = (Get-PSCallStack)[2].ScriptName
    $slash = ($IsWindows) ? "\" : "/"
    $path = $psPath ? $psPath.Replace($slash+$psPath.Split($slash)[-1],"") : "."
    $logPath="$path/logs/$($psPath.Split($slash)[-1].Split('.ps1')[0]).log"
    if(!(Test-Path $logPath)){New-Item $logPath -Force}
    $logStr="$(Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff")`t$lvl $str"
    Write-Host $logStr -ForegroundColor:$logColor[$lvl]
    Add-Content -Path $logPath -Value $logStr
}
function Out-Log ([string]$str){Add-Logging $str "[INFO]"}
function Out-WarnLog ([string]$str){Add-Logging $str "[WARN]"}
function Out-ErrLog ([string]$str){Add-Logging $str "[ERR]";exit; }