RotateLogs

아파치 웹서버의 로그를 1일 단위로 나누어 저장하는 방법


/etc/httpd/conf.d/00-macro.conf
<Macro RotateLogs $domain>
    LogLevel    warn
    ErrorLog    "|/usr/sbin/rotatelogs /var/log/httpd/$domain/error_log.%Y%m%d   86400 +540"
    TransferLog "|/usr/sbin/rotatelogs /var/log/httpd/$domain/access_log.%Y%m%d  86400 +540"
    CustomLog   "|/usr/sbin/rotatelogs /var/log/httpd/$domain/request_log.%Y%m%d 86400 +540" \
                    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%{SSL_CLIENT_I_DN_CN}x][%{SSL_CLIENT_S_DN_CN}x] \"%r\" %b"
</Macro>

<Macro DbgRotateLogs $domain>
    LogLevel    debug
    ErrorLog    "|/usr/sbin/rotatelogs /var/log/httpd/$domain/error_log.%Y%m%d   86400 +540"
    TransferLog "|/usr/sbin/rotatelogs /var/log/httpd/$domain/access_log.%Y%m%d  86400 +540"
    CustomLog   "|/usr/sbin/rotatelogs /var/log/httpd/$domain/request_log.%Y%m%d 86400 +540" \
                    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%{SSL_CLIENT_I_DN_CN}x][%{SSL_CLIENT_S_DN_CN}x] \"%r\" %b"
</Macro>

(참고) 86400 : 1일을 초로 환산한 것, 540 : KST, UTC+9; 9시간을 초로 환산한 것


/etc/httpd/conf.d/a_kreonet_net.conf
<VirtualHost *:443>
ServerName a.kreonet.net
Use RotateLogs a.kreonet.net
...
</VirtualHost>


/etc/httpd/conf.d/a_kreonet_net.conf
<VirtualHost *:443>
ServerName b.kreonet.net
Use RotateLogs b.kreonet.net
...
</VirtualHost>


로그 확인
$ sudo tree tree /var/log/httpd
/var/log/httpd
├── a.kreonet.net/
│   ├── access_log.20210517
│   ├── access_log.20210518
│   ├── error_log.20210517
│   ├── error_log.20210518
│   ├── request_log.20210517
│   └── request_log.20210518
└── b.kreonet.net/
    ├── access_log.20210517
    ├── access_log.20210518
    ├── error_log.20210517
    ├── error_log.20210518
    ├── request_log.20210517
    └── request_log.20210518

로그가 저장될 폴더는 서버 구동 전 미리 생성되어 있어야 한다; /var/log/httpd/a.kreonet.net, /var/log/httpd/b.kreonet.net