Мне нужно автоматизировать запись журнала для этой функции - PullRequest
0 голосов
/ 09 июля 2020

У меня есть следующая функция write-log, и я хотел бы поместить журналы, генерируемые при запуске скрипта, в подпапку и переименовать их в file.logs.old. Более того, я бы хотел сохранить последний лог в папке скриптов. Пример

ПОСЛЕДНИЙ ЖУРНАЛ:

C:\scripts\powershellscript\logs.log

СТАРЫЕ ЖУРНАЛЫ ПОД ПАПКИ:

C:\scripts\powershellscript\logfolder\

СТАРЫЕ ЖУРНАЛЫ:

C:\scripts\powershellscript\logfolder\logs1.log.old
C:\scripts\powershellscript\logfolder\logs2.log.old
C:\scripts\powershellscript\logfolder\logs3.log.old
Etc...

У меня есть следующие функция, но она сохраняет только последний журнал и заменяет его:

function write-Log
{
    Param (
        [Parameter(Mandatory = $false)]
        #Message
        $Message,

        [Parameter(Mandatory = $false)]
        #Errormessage
        $ErrorMessage,

        [Parameter(Mandatory = $false)]
        #Component that create the error
        $Component,

        [Parameter(Mandatory = $false)]
        #Error Type
        [int]$Type,

        [Parameter(Mandatory = $true)]
        #Filepath to the Logfile
        $LogFile
    )

    #Create a Timestamp
    $Date = Get-Date -Format "MM/dd/yyyy"
    $time = Get-Date -Format "HH:mm:ss.fff"

    #If you type a error message the type will automatically switch to type 3 Error
    if ($null -ne $ErrorMessage)
    { $Type = 3
    }
    #If you type no Component the Component will set to space
    if ($null -eq $Component)
    { $Component = " "
    }
    #If you set the type variable it is set to 1 automatically
    if ($null -eq $Type)
    { $Type = 1
    }

    #create the log entry
    $LogMessage = "<![LOG[$Message  $ErrorMessage ]LOG]!>" + "<time=`"$time`" date=`"$Date`" component=`"$Component`" context=`"`" type=`"$Type`" thread=`"`" file=`"`">"
    #write the log entry
    $LogMessage | Out-File -Append -Encoding UTF8 -FilePath $LogFile

}

это текущая переменная для хранения журнала

#Variable
$Logfile = "C:\Scripts\powershellscript\logs.log" #logfile path

Как я могу этого добиться? Мне нужна помощь по этой функции, которую нужно добавить в запрос пользователя. Скрипт работает, но добавляется только последний журнал. И в долгосрочной перспективе проверка старых журналов невозможна.

Спасибо

Ответы [ 3 ]

1 голос
/ 15 июля 2020

Думаю, вам может пригодиться этот модуль - https://github.com/PoShLog/PoShLog

Установите его с помощью Install-Module PoShLog

Затем вы можете настроить новый регистратор файлов следующим образом:

Import-Module PoShLog

# Setup new logger
New-Logger |
    Set-MinimumLevel -Value Verbose |
    Add-SinkFile -Path 'C:\Scripts\Logs\Script-.log' -RollingInterval Minute  | # Add logging into file
    Start-Logger

# Try some logging methods
Write-InfoLog 'Some information to be logged...'

try {
    ConvertFrom-Json 'xxx'
}
catch {
    Write-ErrorLog 'Error occured!' -ErrorRecord $_
}

Close-Logger

poshlog-filesink-dir

This will create new log file every minute, but you can change the interval with parameter RollingInterval, вы также можете ограничить количество файлов в каталоге журнала или размер файла, дополнительная информация здесь, в wiki . В приведенном выше примере я показал только два метода ведения журнала, но всего их 6 .

Надеюсь, это будет полезно, если у вас есть какие-либо вопросы, посмотрите PoShLog wiki или позвоните мне по номеру Discord . Удачного кодирования!

0 голосов
/ 13 июля 2020

Это решение сработало для меня, и на данный момент я сохраняю это:

#Variable
#Add date to the log file name and date
$day = Get-Date -Format dd
$month = Get-Date -Format MM
$year = Get-Date -Format yyyy
$hour = Get-Date -Format HH
$minute = Get-Date -Format mm
$hoy = "$day" + "$month" + "$year" + "$hour" + "$minute"
New-Item C:\Scripts\Logs\Script-$hoy.log -type file -force
#Add end date

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

Тем не менее, мы по-прежнему ценим лучшее решение. :)

0 голосов
/ 09 июля 2020

Какие журналы вы хотите переместить? Тот, который вы только что создали, или те, которые были созданы ранее?

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

mv log old_log_folder/old_log

Возможно, я не понял ваш запрос.
Best,

...