지식 공유/IT, 인공지능 정보

BAT 파일로 로그 파일 자동 정리하기

대대소소 2025. 5. 15. 01:03
728x90

시스템 관리자나 개발자라면 로그 파일이 시간이 지남에 따라 어떻게 쌓여가는지 잘 알고 계실 겁니다. 이러한 로그 파일을 수동으로 정리하는 것은 지루하고 시간 소모적인 작업입니다. 하지만 Windows 환경에서 간단한 BAT(배치) 파일을 활용하면 이 과정을 자동화할 수 있습니다. 이 글에서는 BAT 파일을 작성하여 로그 파일을 효율적으로 정리하고 관리하는 방법을 상세히 알아보겠습니다.

💡 TIP: BAT 파일은 단 몇 줄의 코드로 반복적인 파일 관리 작업을 자동화할 수 있어 시스템 관리자의 시간을 크게 절약해줍니다!

 

🔍 BAT 파일이란?

BAT 파일은 Windows 운영 체제에서 사용되는 배치 파일로, 일련의 명령어를 순차적으로 실행할 수 있게 해주는 스크립트 파일입니다. 확장자는 .bat 또는 .cmd를 사용합니다.

🌟 BAT 파일의 주요 특징:

  • 📝 메모장과 같은 텍스트 편집기로 쉽게 작성 가능
  • 🔄 반복적인 작업을 자동화하는 데 효과적
  • 🕒 작업 스케줄러와 함께 사용하여 정기적인 작업 예약 가능
  • 💻 별도의 프로그래밍 지식 없이도 간단한 스크립트 작성 가능
BAT 파일 구조
 

BAT 파일은 기본적으로 Windows 명령 프롬프트에서 실행할 수 있는 명령어들을 순차적으로 나열한 것으로, 시스템 관리와 파일 작업을 자동화하는 데 이상적입니다. 로그 파일과 같이 정기적으로 관리해야 하는 파일의 경우, BAT 파일을 통해 쉽게 자동화할 수 있습니다.


🛠️ 로그 파일 정리를 위한 BAT 파일 만들기

로그 파일을 효과적으로 정리하는 BAT 파일을 만드는 과정을 단계별로 알아보겠습니다.

1️⃣ 기본 스크립트 작성하기

다음과 같은 단계로 간단한 로그 파일 정리 스크립트를 작성할 수 있습니다:

  1. 메모장이나 다른 텍스트 편집기를 엽니다.
  2. 필요한 명령어를 작성합니다.
  3. .bat 확장자로 저장합니다.

기본적인 로그 파일 정리 BAT 파일의 예시 코드입니다:

@echo off
rem 로그 파일 정리 스크립트
setlocal enabledelayedexpansion

rem 변수 설정
set LOGDIR=C:\logs
set ARCHIVEDIR=%LOGDIR%\archive
set DAYSTOKEEP=30

rem 아카이브 디렉터리가 없으면 생성
if not exist "%ARCHIVEDIR%" mkdir "%ARCHIVEDIR%"

rem 날짜 형식 설정 (YYYY-MM-DD)
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (
    set DATESTR=%%c-%%a-%%b
)

rem 30일이 지난 로그 파일을 아카이브로 이동
forfiles /p "%LOGDIR%" /s /m *.log /d -%DAYSTOKEEP% /c "cmd /c if not @path contains 'archive' move @path %ARCHIVEDIR%\@file_%DATESTR%.log"

rem 60일이 지난 아카이브 파일 삭제
forfiles /p "%ARCHIVEDIR%" /m *.log /d -60 /c "cmd /c del @path"

echo 로그 파일 정리가 완료되었습니다.

2️⃣ 스크립트 세부 사항 조정하기

위의 기본 스크립트는 다음과 같은 작업을 수행합니다:

🗂️ 로그 디렉터리 설정: 로그 파일이 저장된 디렉터리와 아카이브용 디렉터리를 지정합니다.

보관 기간 설정: 현재 폴더에 유지할 로그 파일의 기간(일)을 설정합니다.

📁 아카이브 폴더 생성: 아카이브 폴더가 없는 경우 자동으로 생성합니다.

📅 날짜 형식 설정: 오늘 날짜를 YYYY-MM-DD 형식으로 가져옵니다.

🔄 파일 이동: 지정된 기간(예: 30일)보다 오래된 로그 파일을 아카이브 폴더로 이동합니다.

🗑️ 오래된 파일 삭제: 아카이브 폴더에서 특정 기간(예: 60일)이 지난 파일을 삭제합니다.

로그 파일 관리 흐름도
 
 

📊 주요 명령어 설명

BAT 파일에서 로그 파일 정리에 사용되는 주요 명령어들을 자세히 살펴보겠습니다.

@echo off

🔇 명령 실행 시 명령어 자체를 화면에 표시하지 않도록 합니다. 이를 통해 출력이 깔끔해집니다.

setlocal enabledelayedexpansion

🔄 변수의 지연 확장을 활성화합니다. 루프 내에서 변수 값이 변경될 때 유용합니다.

set VARIABLE=value

📝 변수에 값을 할당합니다. 로그 디렉터리, 아카이브 디렉터리, 보관 기간 등을 설정할 수 있습니다.

if not exist "path" mkdir "path"

📁 특정 디렉터리가 존재하지 않는 경우 새로 생성합니다.

for /f 명령어

🔄 텍스트 출력을 처리하는 루프를 만듭니다. 날짜 정보를 파싱하는 데 사용됩니다.

forfiles 명령어

🔍 조건에 맞는 파일을 찾아 특정 명령을 실행합니다. 다음과 같은 옵션이 있습니다:

  • /p: 검색할 경로 지정
  • /s: 하위 디렉터리 포함 검색
  • /m: 검색할 파일 패턴 지정
  • /d: 날짜 필터링 (-N은 N일 이전)
  • /c: 실행할 명령어 지정

move 명령어

📦 파일을 한 위치에서 다른 위치로 이동합니다.

del 명령어

🗑️ 파일을 삭제합니다.


⏱️ 자동 실행 스케줄링하기

BAT 파일을 수동으로 실행하는 것도 가능하지만, Windows 작업 스케줄러를 사용하여 자동으로 실행되도록 설정하면 더욱 효율적입니다.

작업 스케줄러 설정 방법:

1️⃣ 작업 스케줄러 열기

  • 시작 메뉴에서 '작업 스케줄러'를 검색하거나 taskschd.msc 명령을 실행합니다.

2️⃣ 새 작업 만들기

  • 오른쪽 패널에서 '기본 작업 만들기'를 클릭합니다.

3️⃣ 작업 정보 입력

  • 작업 이름과 설명을 입력합니다 (예: "로그 파일 정리").

4️⃣ 실행 주기 설정

  • 일별, 주별, 월별 등의 옵션 중에서 원하는 주기를 선택합니다.
  • 대부분의 로그 관리는 일별로 설정하는 것이 좋습니다.

5️⃣ BAT 파일 경로 지정

  • '프로그램 시작' 작업을 선택하고 BAT 파일의 전체 경로를 입력합니다.

6️⃣ 완료

  • 설정을 검토하고 '완료' 버튼을 클릭합니다.
 

작업 스케줄러 설정

 

💡 스케줄링 팁:

  • 🕒 실행 시간 선택: 시스템 부하가 적은 시간(예: 새벽 2시)에 실행하도록 설정하는 것이 좋습니다.
  • 🔄 반복 주기: 로그 생성 빈도와 중요도에 따라 일별, 주별 또는 월별로 설정합니다.
  • 📊 실행 계정: 관리자 권한이 필요한 작업의 경우 적절한 권한을 가진 계정으로 실행되도록 설정합니다.
  • 🔔 알림 설정: 작업 성공 또는 실패 시 이메일 알림을 받을 수 있도록 설정하면 모니터링에 도움이 됩니다.

🔄 실제 사용 사례

이제 로그 파일 정리를 위한 BAT 파일의 실제 사용 사례를 살펴보겠습니다.

사례 1: 웹 서버 로그 관리

웹 서버(예: IIS, Apache)는 방대한 양의 로그 파일을 생성합니다. 다음은 이러한 로그를 관리하는 BAT 파일 예시입니다:

@echo off
setlocal enabledelayedexpansion

rem 웹 서버 로그 디렉터리 설정
set LOGDIR=C:\inetpub\logs\LogFiles
set ARCHIVEDIR=D:\LogArchive\WebServer
set DAYSTOKEEP=14

rem 아카이브 디렉터리 생성
if not exist "%ARCHIVEDIR%" mkdir "%ARCHIVEDIR%"

rem 날짜 형식 설정
for /f "tokens=1-3 delims=/" %%a in ('echo %date%') do (
    set DATESTR=%%c-%%a-%%b
)

rem 지정된 일수보다 오래된 로그 파일 압축 및 이동
forfiles /p "%LOGDIR%" /m *.log /d -%DAYSTOKEEP% /c "cmd /c echo 압축: @path && compact /c @path && move @path %ARCHIVEDIR%\@file_%DATESTR%.log"

rem 90일 이상 된 아카이브 파일 삭제
forfiles /p "%ARCHIVEDIR%" /m *.log /d -90 /c "cmd /c echo 삭제: @path && del @path"

echo 웹 서버 로그 정리가 완료되었습니다.

사례 2: 애플리케이션 로그 백업 및 정리

애플리케이션 로그를 백업하고 정리하는 예시입니다:

@echo off
setlocal enabledelayedexpansion

rem 애플리케이션 로그 디렉터리 설정
set APPLOGDIR=C:\Program Files\MyApp\logs
set BACKUPDIR=E:\Backups\AppLogs
set DAYSTOKEEP=7

rem 백업 디렉터리 생성
if not exist "%BACKUPDIR%" mkdir "%BACKUPDIR%"

rem 년-월-일 형식의 폴더 생성
for /f "tokens=1-3 delims=/" %%a in ('echo %date%') do (
    set YEAR=%%c
    set MONTH=%%a
    set DAY=%%b
    set DATEDIR=%BACKUPDIR%\%%c-%%a-%%b
)

rem 백업용 날짜 폴더 생성
if not exist "%DATEDIR%" mkdir "%DATEDIR%"

rem 모든 로그 파일을 날짜 폴더로 복사
xcopy /y "%APPLOGDIR%\*.log" "%DATEDIR%\"

rem 7일 이상 된 로그 파일 삭제
forfiles /p "%APPLOGDIR%" /m *.log /d -%DAYSTOKEEP% /c "cmd /c echo 삭제: @path && del @path"

rem 30일 이상 된 백업 폴더 삭제
forfiles /p "%BACKUPDIR%" /d -30 /c "cmd /c if @isdir==TRUE echo 폴더 삭제: @path && rd /s /q @path"

echo 애플리케이션 로그 백업 및 정리가 완료되었습니다.
BAT 파일 실행 콘솔
 

❓ 자주 묻는 질문 (FAQ)

❓ BAT 파일 실행 시 '액세스가 거부되었습니다' 오류가 발생합니다.

💬 답변: 이 오류는 대개 권한 문제로 발생합니다. 다음과 같은 해결 방법을 시도해 보세요:

  • BAT 파일을 관리자 권한으로 실행합니다 (우클릭 > '관리자 권한으로 실행').
  • 작업 스케줄러에서 '가장 높은 권한으로 실행' 옵션을 선택합니다.
  • 대상 파일 및 폴더에 대한 적절한 읽기/쓰기 권한이 있는지 확인합니다.

❓ 특정 로그 파일만 제외하고 싶습니다.

💬 답변: findstr 명령과 함께 파이프를 사용하거나, 조건문을 추가하여 특정 패턴의 파일을 제외할 수 있습니다:

forfiles /p "%LOGDIR%" /m *.log /d -%DAYSTOKEEP% /c "cmd /c if not @file contains \"important\" move @path %ARCHIVEDIR%\@file_%DATESTR%.log"

❓ 로그 파일을 삭제하기 전에 압축하고 싶습니다.

💬 답변: PowerShell 명령이나 외부 도구를 사용하여 압축할 수 있습니다. 예시:

rem PowerShell을 사용한 압축
powershell -command "Compress-Archive -Path '%LOGDIR%\*.log' -DestinationPath '%ARCHIVEDIR%\logs_%DATESTR%.zip'"

rem 압축 후 원본 파일 삭제
forfiles /p "%LOGDIR%" /m *.log /d -%DAYSTOKEEP% /c "cmd /c del @path"

❓ 로그 파일 정리 작업의 성공 여부를 알고 싶습니다.

💬 답변: 작업 결과를 로그 파일에 기록하고, 오류 발생 시 이메일 알림을 보내도록 설정할 수 있습니다:

@echo off
echo 로그 정리 작업 시작: %date% %time% > "%LOGDIR%\cleanup_log.txt"

rem 로그 정리 작업 수행
if errorlevel 1 (
    echo 오류 발생: %errorlevel% >> "%LOGDIR%\cleanup_log.txt"
    
    rem 이메일 알림 (외부 도구 필요)
    blat -to admin@example.com -subject "로그 정리 오류" -body "로그 정리 중 오류가 발생했습니다."
) else (
    echo 작업 완료: 성공 >> "%LOGDIR%\cleanup_log.txt"
)

echo 로그 정리 작업 종료: %date% %time% >> "%LOGDIR%\cleanup_log.txt"

❓ 매우 큰 로그 파일(1GB 이상)을 처리할 때 성능 문제가 있습니다.

💬 답변: 대용량 파일을 처리할 때는 다음과 같은 방법을 고려해 보세요:

  • 로그 순환 주기를 짧게 조정하여 파일이 너무 커지지 않도록 합니다.
  • 백그라운드 작업으로 처리하거나 시스템 부하가 적은 시간에 실행하도록 스케줄링합니다.
  • PowerShell이나 Python 같은 더 강력한 스크립팅 언어를 사용하는 것을 고려해 보세요.

📝 정리 및 결론

BAT 파일을 사용한 로그 파일 정리는 Windows 환경에서 시스템 관리자의 일상적인 작업을 자동화하는 효과적인 방법입니다. 이 글에서 살펴본 내용을 요약하면 다음과 같습니다:

🔹 BAT 파일의 장점:

  • 간단한 문법으로 빠르게 스크립트 작성 가능
  • 별도의 소프트웨어 설치 없이 Windows에서 바로 실행
  • 작업 스케줄러와 연동하여 완전 자동화 가능

🔹 로그 관리 전략:

  • 최신 로그는 빠른 접근을 위해 원본 위치에 유지
  • 오래된 로그는 아카이브 폴더로 이동하여 저장 공간 관리
  • 매우 오래된 로그는 자동으로 삭제하여 디스크 공간 확보

🔹 추가 고려사항:

  • 중요한 로그는 삭제 전 반드시 백업
  • 정기적으로 스크립트 실행 결과 확인
  • 로그 순환 정책을 시스템 요구사항에 맞게 조정

💡 TIP: 처음에는 간단한 BAT 파일로 시작하고, 필요에 따라 기능을 추가하며 확장하세요. 복잡한 작업의 경우 PowerShell이나 Python과 같은 더 강력한 스크립팅 도구로 전환하는 것도 고려해 보세요!

로그 파일 정리 자동화는 시스템 관리의 기본적인 부분이지만, 이를 효과적으로 구현하면 시스템 안정성을 높이고 관리자의 시간을 절약할 수 있습니다. 이 글에서 제공한 예시와 팁을 활용하여 여러분의 환경에 맞는 최적의 로그 관리 솔루션을 구축하시기 바랍니다.

 

728x90