본문 바로가기
WAS/WEBLOGIC

43. perl 스크립트를 활용한 nohup log rotate(로그 로테이트)

by coldplayer83 2024. 6. 3.
728x90

weblogic nohup 로그의 경우 server 로그와 달리 로그 로테이트 설정이 불가능하다

=> perl 스크립트 사용 or crontab 사용으로 로그 로테이트 설정 가능

 

[perl 스크립트를 활용한 로그 로테이트 방법]

 

1. perl 스크립트 생성

아래 두 가지 중 택하여 사용

 

logs.pl

#!/usr/bin/perl
#[Window]
# start /b run 2>&1|start /b perl log.pl admin.out. 2>&1
#[Unix]
# nohup run 2>&1|nohup ./log.pl admin.out. 1>&0 2>&1 &
$SIG{INT}=$SIG{BREAK}='IGNORE';   - 해당 시그널은 무시하겠다
$DEFAULT_LOG_PFX="OUT.";   - 첫번째 ARGV 설정을 위한 임의 변수 설정
$logPfx = ($ARGV[0] eq '') ? $DEFAULT_LOG_PFX : $ARGV[0]; - 첫번째 ARGV 설정
use threads;
use threads::shared;
my $mday:shared;
threads->create(\&check);  - 서브 스레드로 계속 시간 체크
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;   - 메인 스레드 부분 시작 / 시간 체크
$logFile=$logPfx.sprintf("%04d%02d%02d",($year+1900),($mon+1),$mday); - admin.out.20201030 과 같은 형식의 로그 생성
open(logH,">> $logFile");  - 임의의 logH 선언 및 리다이렉션  
select((select(logH),$|=1)[0]);
$omday=$mday;
while($aLine = <STDIN>){
  if($omday!=$mday){  -   계속 체크하고있던 mday(날짜)가 변경되면 기존 로그를 닫고 새로운 날짜로 로그 생성
    close(logH);
    ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
    $logFile=$logPfx.sprintf("%04d%02d%02d",($year+1900),($mon+1),$mday);
    open(logH,">> $logFile");
    select((select(logH),$|=1)[0]);
    $omday=$mday;
  }
  print logH $aLine;  - 날짜가 변경되지 않으면 계속 출력함
}
close(logH);      
$_->detach for threads->list;   
sub check{  - 서브 스레드로 계속 시간 체크
  while(1){
    sleep(1);
    ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime;
  }
}

 

logs2.pl

#!/usr/bin/perl

$TRUE = 1;
$FALSE = 0;
$DEBUG = $FALSE;
$WASLOG="${/해당_시스템_웹로직_도메인_경로}/logs";

$DEFAULT_LOG_PFX = "$ARGV[0].out_";
#####$DEFAULT_LOG_PFX = "OUT.";

$logPfx = $DEFAULT_LOG_PFX;
$ignoreConsole = $FALSE;
#####$ignoreConsole = $TRUE;

while($aLine = <STDIN>) {
  ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time());

  $logFile = $logPfx.sprintf("%02d%02d%02d", ($year+1900), ($mon+1), $mday, $hour, $min, $sec);

  open(logH, ">> $WASLOG/$logFile");

  select((select(logH), $|=1)[0]);

  print logH $aLine;
  if(!$ignoreConsole) {
    print $aLine;
  }
  close(logH);
}

 

 

2. 서버 기동 스크립트 수정

nohup ./bin/startManagedWebLogic.sh ${MANAGED_NAME01} ${ADMIN_URL} | nohup ./logs.pl admin.out. 1>&0 2>&1 &
tail -f ${LOG_DIR}/${SERVER_NAME}.out.`date +'%Y%m%d'`

 

형식은 기존의 nohup 로그 작성 형식에 따라 조금씩 변경하여 작성할 것

 

또는 아래 스크립트 참조하여 수정

 

admin 서버)

mv ${LOG_DIR}/${SERVER_NAME}.out \ 
${LOG_DIR}/${SERVER_NAME}.out_`date +%Y-%m-%d`

nohup ${DOMAIN_HOME}/bin/startWebLogic.sh \ 
${SERVER_NAME} > ${LOG_DIR}/${SERVER_NAME}.out \
2>&1 | perl ./logs.pl ${SERVER_NAME} -append $TRUE &

 

managed 서버)

mv ${LOG_DIR}/${SERVER_NAME}.out \ 
${LOG_DIR}/${SERVER_NAME}.out_`date +%Y-%m-%d`

nohup ${DOMAIN_HOME}/bin/startManagedWebLogic.sh \ 
${SERVER_NAME} ${ADMIN_URL} > ${LOG_DIR}/${SERVER_NAME}.out \ 
2>&1 | perl ./logs.pl ${SERVER_NAME} -append $TRUE &

'WAS > WEBLOGIC' 카테고리의 다른 글

45. JDK 변경  (0) 2024.06.05
44. weblogic node manager(노드 매니저)  (0) 2024.06.03
42. Plan.xml  (0) 2024.06.03
41. 웹로직 thread 확인 및 튜닝  (0) 2024.05.28
40. 웹로직 인코딩 에러  (0) 2024.05.28