컴퓨터나 서버의 Windows 이벤트 로그에서 모든 항목을 삭제해야 하는 경우가 종종 있습니다. 물론 이벤트 뷰어(Event Viewer) GUI 콘솔인 Eventvwr.msc를 통해서도 시스템 로그를 지울 수 있습니다(지우려는 로그를 마우스 오른쪽 버튼으로 클릭한 후 로그 지우기(Clear Log) 선택). 하지만 Windows Vista부터는 다양한 시스템 구성 요소마다 수십 개의 로그를 사용하기 때문에, 이벤트 뷰어에서 하나씩 수동으로 지우려면 상당한 시간이 걸립니다. 명령 프롬프트에서 PowerShell이나 Windows에 기본 포함된 콘솔 도구 Wevtutil을 활용하면 훨씬 빠르고 간편하게 로그를 정리할 수 있습니다.
PowerShell로 이벤트 로그 지우기
PowerShell 3 이상이 설치되어 있다면(Windows 8/Windows Server 이상에는 기본 설치됨) Get-EventLog와 Clear-EventLog cmdlet을 사용하여 이벤트 로그 목록을 조회하고 지울 수 있습니다.
먼저 관리자 권한으로 PowerShell 콘솔을 실행한 뒤, 아래 명령을 입력하면 시스템의 모든 표준 이벤트 로그 목록을 최대 크기와 이벤트 수 정보와 함께 확인할 수 있습니다.
Get-EventLog –LogName *
특정 이벤트 로그(예: System 로그)의 모든 항목을 지우려면 다음 명령을 사용합니다.
Clear-EventLog –LogName System
명령이 실행되면 해당 로그의 모든 이벤트가 삭제되며, EventId 104와 "System 로그 파일이 지워졌습니다(The System log file was cleared)"라는 메시지가 담긴 단 하나의 이벤트만 남게 됩니다.
모든 이벤트 로그를 한 번에 지우려면 로그 이름을 파이프라인으로 직접 전달하면 되지만, 안타깝게도 이 방식은 허용되지 않습니다. 대신 ForEach 루프를 활용해야 합니다.
Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }
이 명령을 실행하면 시스템의 모든 표준 이벤트 로그가 일괄 삭제됩니다.
WevtUtil.exe 콘솔 도구로 로그 지우기
Windows에는 오랫동안 이벤트 관련 작업을 위한 강력한 명령줄 유틸리티인 WevtUtil.exe가 포함되어 왔습니다. 처음 접하면 구문이 다소 복잡하게 느껴질 수 있지만, 익숙해지면 매우 유용합니다.
시스템에 등록된 로그 목록을 표시하려면 다음 명령을 실행합니다.
WevtUtil enum-logs
또는 더 짧은 버전을 사용할 수도 있습니다.WevtUtil el
실행하면 화면에 상당히 많은 로그 목록이 출력됩니다.
참고: 다음 명령으로 로그의 총 개수를 확인할 수 있습니다. WevtUtil el | Measure-Object 실제로 Windows 10 환경에서는 무려 1,053개의 서로 다른 로그가 존재했습니다.
특정 로그에 대한 상세 정보를 조회하려면 다음과 같이 입력합니다.
WevtUtil gl Setup
특정 로그의 이벤트를 지우는 방법은 다음과 같습니다.
WevtUtil cl Setup
이벤트를 삭제하기 전에 파일로 백업해 두는 것도 가능합니다.
WevtUtil cl Setup /bu:SetupLog_Bak.evtx
모든 로그를 한 번에 지우려면 Get-WinEvent PowerShell cmdlet으로 전체 로그 객체를 가져온 뒤 Wevtutil.exe로 삭제하면 됩니다.
Get-WinEvent -ListLog * -Force | % { Wevtutil.exe cl $_.LogName }
또는 다음 명령을 사용할 수도 있습니다.
Wevtutil el | ForEach { wevtutil cl "$" }
참고: 실제 테스트에서는 액세스 오류로 인해 3개의 로그가 삭제되지 않았습니다. 이러한 로그는 이벤트 뷰어를 통해 직접 지우는 것을 권장합니다.
표준 명령 프롬프트(cmd)에서도 다음 명령으로 로그를 일괄 삭제할 수 있습니다.
for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"