none
【教程】利用Task Scheduler定期清理Exchange服务器日志 RRS feed

  • 常规讨论

  • 当遇到服务器空间不足的情况,管理员一般选择以下方式来增加可用空间:

    1. 添加新的硬盘来扩大存储空间。
    2. 清理早期的日志来释放硬盘空间。

    今天,我们在这里简单介绍一下第二种方案。

    可以清理的日志以及清理日志的影响

    可被清理的日志:

    1. IIS日志:用户端访问IIS服务的记录 (连接时间,客户端IP,用户名,连接的用户等 )
    2. Logging 文件夹:Exchange各个组件工作情况及用户端连接日志,主要为DiagnosticETL, HttpProxyRpcHttp等;
    3. 诊断日志: Health Manager收集并记录系统运行状态的信息。

    清理日志的影响:

    日志用于记录服务/组件的活动状态,以及出现问题时追溯错误原因,如果删除日志,我们将无法获取该段时间中的这些信息。

    如何使用Task Scheduler定期清理日志

    第一部分:创建清理日志脚本

    TechNet Gallery中提供了可以清理Exchange日志的脚本:Clear Exchange 2013/2016/2019 Log & ETL Files,该脚本的作用为清理以下路径中*.log,*.blg, *.etl, *.txt格式的文件:

    • "C:\inetpub\logs\LogFiles\"
    • "C:\Program Files\Microsoft\Exchange Server\V15\Logging\"
    • "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\"
    • "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs"

    以下为对该脚本的注释,以及运行前需要对该脚本进行的修改:

    Set-Executionpolicy RemoteSigned
    
    $days=60 #清理到距今天多少天前的日志。
    
    $IISLogPath="C:\inetpub\logs\LogFiles\" #IIS日志的存储位置
    
    $ExchangeLoggingPath="C:\Program Files\Microsoft\Exchange Server\V15\Logging\" #Exchange Logging文件夹位置
    
    $ETLLoggingPath="C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\" #ETLTraces存储位置
    
    $ETLLoggingPath2="C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs" #Diagnostics日志存储位置
    
    Function CleanLogfiles($TargetFolder)
    
    {
    
        if (Test-Path $TargetFolder) {
    
            $Now = Get-Date
    
            $LastWrite = $Now.AddDays(-$days)
    
            #$Files = Get-ChildItem $TargetFolder -Include *.log,*.blg, *.etl -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
    
            $Files = Get-ChildItem "C:\Program Files\Microsoft\Exchange Server\V15\Logging\"  -Recurse | Where-Object {$_.Name -like "*.log" -or $_.Name -like "*.blg" -or $_.Name -like "*.etl"}  | where {$_.lastWriteTime -le "$lastwrite"} | Select-Object FullName 
    
            <#把上一句中"C:\Program Files\Microsoft\Exchange Server\V15\Logging\" 替换成 "$TargetFolder" ,否则脚本只会清除"Logging"文件夹下的日志#>
    
            foreach ($File in $Files)
    
                {Write-Host "Deleting file $File" -ForegroundColor "white"; Remove-Item $File.FullName -ErrorAction SilentlyContinue | out-null}
    
           }
    
        Else {
    
        Write-Host "The folder $TargetFolder doesn't exist! Check the folder path!" -ForegroundColor "white"
    
        }
    
    }
    
    CleanLogfiles($IISLogPath)
    
    CleanLogfiles($ExchangeLoggingPath)
    
    CleanLogfiles($ETLLoggingPath)
    
    CleanLogfiles($ETLLoggingPath2)

    第二部分:利用计划任务程序,实现自动清理日志

    1. 通过服务器管理器(Server Manager)打开计划任务程序:

    2. 点击新建任务并配置以下信息:

    a. 常规:使用域管理员身份运行,并选择是否允许该任务在管理员未登录的时候运行

    b. 触发器:选择运行该脚本的周期。

    c. 操作:填写该计划任务需要处理的事件:

    3. 填写完成后,会有弹窗确认管理员身份,输入凭据即可:

    4. 完成后我们可以在计划任务程序界面查看该任务的状态:

    这样计划任务程序会按照设定好的时间运行该脚本,从而实现自动清理服务器往期日志的目的。

    参考连接Exchange 2013/2016/2019 Logging - Clear out the Log files

    [关键词]:计划任务,Task Scheduler ,日志清理,Exchange 日志,Exchange 2013Exchange 2016, Exchange 2019

    希望上述信息能够帮到您。如果您对此还有其他问题,欢迎随时来我们论坛提问 (点击文章页面左上角的“提出问题”按钮快速发帖),我们会帮助您进一步调查这个问题。


    如果帖子有帮到您的话,请点击左上方“投票”按钮。这将帮助到阅读这个帖子的其他用户。

    2019年5月8日 3:22
    版主