skip to Main Content

Cleanup logs Exchange 2013/2016/2019

Starting from Exchange 2013 and higher, logs are taking up more space on the Windows Server. This is when cleanup logs Exchange 2013/2016/2019 script plays an important role. Clear Exchange logs with PowerShell and get free space on the Exchange Server. These logs are NOT database logs! You can safely delete these logs. In fact, I recommend you to delete them.

Logs are great when you need more information and want to have a look into it when you are having issues. Exchange Servers are filling up easily with all these logs. The best way is to clear the logs because you need to free up some size on the disk. The script in this article is my edit to the original script from MVP Edward van Biljon. You can download the official script from Microsoft Technet.

Prepare the cleanup logs Exchange script

Copy the following code and paste it in Notepad. Save the file type as CleanupLogs.ps1. You can also download the CleanupLogs.ps1 script (direct link). If it does not give you a prompt to save the file, right-click on CleanupLogs.ps1 and click save link as. You should be able to save the script.

# Set execution policy if not set
$ExecutionPolicy = Get-ExecutionPolicy
if ($ExecutionPolicy -ne "RemoteSigned") {
    Set-ExecutionPolicy RemoteSigned -Force
}

# Cleanup logs older than the set of days in numbers
$days = 2

# Path of the logs that you like to cleanup
$IISLogPath = "C:\inetpub\logs\LogFiles\"
$ExchangeLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Logging\"
$ETLLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\"
$ETLLoggingPath2 = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\"

# Clean the logs
Function CleanLogfiles($TargetFolder) {
    Write-Host -Debug -ForegroundColor Yellow -BackgroundColor Cyan $TargetFolder

    if (Test-Path $TargetFolder) {
        $Now = Get-Date
        $LastWrite = $Now.AddDays(-$days)
        $Files = Get-ChildItem $TargetFolder -Recurse | Where-Object { $_.Name -like "*.log" -or $_.Name -like "*.blg" -or $_.Name -like "*.etl" } | Where-Object { $_.lastWriteTime -le "$lastwrite" } | Select-Object FullName
        foreach ($File in $Files) {
            $FullFileName = $File.FullName  
            Write-Host "Deleting file $FullFileName" -ForegroundColor "yellow"; 
            Remove-Item $FullFileName -ErrorAction SilentlyContinue | out-null
        }
    }
    Else {
        Write-Host "The folder $TargetFolder doesn't exist! Check the folder path!" -ForegroundColor "red"
    }
}
CleanLogfiles($IISLogPath)
CleanLogfiles($ExchangeLoggingPath)
CleanLogfiles($ETLLoggingPath)
CleanLogfiles($ETLLoggingPath2)

Make sure that you change line 8. At the moment it is showing $days=2. That means it will cleanup logs from the Exchange Servers that are older than 2 days.

If you have changed the path of the Exchange configuration, change the path in the line 11,12,13, and 14.

Save the file on the Exchange Server in the following path C:\scripts\. Give it the name CleanupLogs.ps1

Give your account permission access to the below four folders. If the script does not have permission, it will not cleanup logs in that folder. I recommend making a service account in Active Directory. Give the service user account read/write permission on the below four folders. Create a scheduled task to clear Exchange logs that will run every day with the service user account.

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\

Run the cleanup logs Exchange script

Before running the cleanup logs script

Before you run the script, have a look at how much free space you have on the drive. See the before cleanup screen.

Clean up logs Exchange before cleanup

Run the script as Administrator. Right-click the file CleanupLogs.ps1 and click on Run with PowerShell. A PowerShell window will show up and the script is cleaning up the logs. Wait till the PowerShell window disappears from the screen. It means that the script finished.

After running the cleanup logs script

Have a look again at how much free space you have on the drive. See the after cleanup screen.

Clean up logs Exchange after

The script did cleanup 14GB of the Exchange logs. Did the cleanup logs Exchange script help you out?

Do you like to automate the script? Read more on how to Cleanup Exchange logs automatically with scheduled task.

Conclusion

In this article, you learned how to clear Exchange logs with PowerShell. It’s a great script to cleanup logs on Exchange 2013/2016/2019 and get free space. Don’t forget to create a scheduled task to cleanup logs on the Exchange Server to automate the process.

If you enjoyed this article, you may also like Move mailbox to another database with PowerShell. Don’t forget to follow us.

ALI TAJRAN

ALI TAJRAN

ALI TAJRAN is a passionate IT Architect, IT Consultant, and Microsoft Certified Trainer. He started Information Technology at a very young age, and his goal is to teach and inspire others. Read more »

This Post Has 22 Comments

  1. Thank you, Mr. Tajran! I just freed up 40GB of logs on an Exchange server that was put in production this past May. I have it set to run every week now.
    Why Microsoft doesn’t automatically clear these log files automatically is a mystery to me.

  2. Hi,

    Nice article! Now the Microsoft PowerShell Gallery is defunct, do you know where to find the original script? Thanks!

  3. The script does not clean up c:\inetpub\logs\logfiles
    Several services needed to be stopped in order to delete those log files. I did not delete the log files but until stopping services it gave a retry on an attempt to delete the log files. Even after stopping those services and running the script again they did not clean up. Please advise.

    1. Start File Explorer. Go to the C:\inetpub\logs\LogFiles. You will see two folders, which are: “W3SVC1” and “W3SVC2”. Ensure that both the “SYSTEM” and “Administrators” groups have full access permissions (Security tab). After that, try to remove the .log files manually. If that works, the script needs to work too.

  4. Hi Ali,

    Thanks for the wonderful advice – I just have one question if that’s okay. The Microsoft TechNet article seems to suggest that, within the C:\Program Files\Microsoft\Exchange Server\V15\Logging\ folder, only the contents of the Bin\Search\Ceres\Diagnostics\ETLTraces and Bin\Search\Ceres\Diagnostics\Logs are safe to delete, but your script suggests the entire contents of the C:\Program Files\Microsoft\Exchange Server\V15\Logging\ can safely be removed (obviously where the log files exceed the value in the script file) – can you please confirm which is correct ? Because if your version is accurate, I could save a *tonne* more space (which I desperately need right now) – I just don’t want to run the risk of breaking something as a result.

    Thank you so much for your time, I really appreciate it =]

  5. This is a great script.
    Adjusted the paths as needed and ran it and it works great.
    Thank you for sharing!

  6. thanks,
    works wonder full.
    i am not a full time exchange guru. but this realy helps. ( and cleans the standard MS stuff )

  7. Hi, anyone can help me?
    My exchange path is :
    $IISLogPath = “C:\inetpub\logs\LogFiles\”
    $ExchangeLoggingPath = “D:\Exchange Server\V15\Logging\”
    $ETLLoggingPath = “D:\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\”
    $ETLLoggingPath2 = “D:\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\”

    do i still need to save this script in C:\ ?

  8. Hi,

    thank you for the script.

    How to clean correctly the Database Logs even if these logs are in a dedicated Drive L:\logs\database_logs_1 ?

    My database logs are going full and I wanted to know how to clean it.

    1. Hi George,

      In this article, I explained how to cleanup Exchange logs. These are not database logs. Unfortunately, they will not truncate with a backup. That’s why I recommend using the PowerShell script to free up space.

      A good backup should truncate the database logs. It can happen that it’s not working at the moment, and you need to free up space. You can follow the article Truncate Exchange logs with PowerShell.

  9. Never did check those logs, then suddenly the mail queue is hanging. This script was a real life saver, thank you very much!

  10. Great script which regained me around 20GB of space on my server that was slowly but surely running low on space. I now have time to address my disk space issue at a more leisurely pace. Thanks.

Leave a Reply

Your email address will not be published. Required fields are marked *