[MySQL][Admin] 로그종류와 특징

■ MySQL Log

DBMS에서는 자신의 상태를 기록하기 위해 로그라는 방법으로 자신의 상태를 기록합니다. MySQL에서도 마찬가지로 여러가지 로그를 제공합니다. 시스템에 관련된 로그, 복제를 구성하기 위해 사용되는 바이너리 로그, 시스템 에러에 관련된 로그, SQL 성능에 관련된 로그까지 여러가지 로그들을 제공합니다. MySQL에서 제공되는 로그들에 대해서 자세히 한번 알아보겠습니다.

 

■ MySQL Log종류

MySQL에서 제공되는 로그들이 어떤것들이 있으며 어떤 역활을 하는지 간단히 알아보겠습니다.

 

+ Error Log

mysqld 시작, 운영, 종료때 나오는 문제들을 작성합니다.

 

+ General query log

클라이언트로부터 접속된 접속 내용과 수행된 SQL문법을 기록합니다.

 

+ Binary Log

변경된 데이터 혹은 수행된 SQL문을 기록합니다.

 

+ Relay Log

복제 마스터 서버로부터 변경된 데이터를 수신합니다.

 

+ Slow query log

long_query_time 파라미터에서 설정된 시간보다 오래 수행될 경우 기록되는 로그입니다.

 

+ DDL Log

DDL 문법이 수행될때 기록되는 로그입니다.

 

■ MySQL Log 공통사항

특정 환경설정으로 설정하지 않는 기본적으로 data directory 기록됩니다. 그리고 flush logs라는 명령으로 관리가 됩니다. mysqladmin, mysqldump --flush-log 명령어는 명령을 기반으로 수행됩니다. flush 명령은 메모리에 있는 데이터를 디스크에 쓰는 명령어로 메모리와 디스크의 데이터를 동기화 시키는 명령어입니다. flush 명령을 사용할때는 주의깊게 사용하셔야 합니다.

 

■ General Query Log Slow Query Log 공통 파라미터

General Query Log Slow Query Log 파라미터는 공통되는 파라미터가 있습니다. 그리고 용도가 비슷합니다. 바로 Query 남기는 것입니다. 그러나 하나는 수행된 모든 쿼리가 나오고 하나는 속도가 느린 쿼리만 나옵니다. 설정방법과 특징에 대해 알아봅니다. 참고로 여기에 나오는 설정법은 my.cnf 환경설정 파일 안에 파라미터를 설정하는 방법입니다.

 

+ log_output

쿼리가 어떤 방식으로 쌓일지 결정하는 파라미터입니다. General Query Log, Slow Query Log Table 혹은 File 방식으로 쌓이게되는데 이게 각각의 특징이 있습니다.

File일경우 터미널에서 특정 편집기나 명령어로 내용을 확인 있습니다. 또한 File 되어 있는만큼 터미널에서 편하게 조작이 가능하며, 이동 수집이 편리합니다.

테이블일 경우 SQL 쿼리로 내용을 조회를 있다는 점이 장점일 것입니다. File 되어 있을 경우 터미널로 다시 들어가야 한다는 점이 있는데 쿼리 툴로 SQL문법을 이용해서 바로 조회가 가능하다는 것이 장점입니다.

기본값은 File입니다. 설정하지 않을 MySQL 시작될 기본적으로 File 설정이 됩니다. 원한다면 file, table 두가지 방법으로 쌓을수도 있습니다. 하지만 MySQL 서버에 부하가 걸리는게 단점입니다.

 

+ general_log & general_log_file
위의 두개 파라미터는 서로 밀접한 관련이 있습니다. general_log general query log 사용할지 말지를 나타내는 파라미터 입니다. 사용은 1, 사용하지 않음은 0으로 표시합니다. 또한 genral_log_file genera query log 파일을 어떤 디렉토리에 어떤 파일명으로 쌓을지 나타냅니다. 물론 운영중에도 제어가 가능합니다. 만약 현제 접속 세션에서 general query log 제어하고 싶다면 이름이 약간 틀립니다. sql_log_off 명령으로 on, off 해주시면 됩니다. 전체 로그를 on, off하는것이 아님을 다시한번 말씀드립니다.

 

+ slow_query_log & slow_query_log_file

위의 두개 파라미터 또한 서로 밀접한 관련이 있습니다. 눈치채셨겠지만 general query log 사용법이 비슷합니다. slow_query_log 0 1 사용할지 말지를 표현하는 것이고, slow_query_log_file 로그가 쌓일 디렉토리와 파일명을 지정하는 것입니다. 이것또한 마찬가지로 운영중에 제어가 가능합니다.

 

+ table방식의 로그 쌓기 특징.

먼저 위에서 말씀드렸듯이 SQL Query 조회가 가능하다는 점입니다. file 하게 되면 DB서버의 터미널에 접속해서 로그를 확인해 봐야 합니다. 개발 DB일경우 사용자만큼 유저를 할당해 주어야 하고, DB 접속 계정까지 할당해 주어야 합니다. 그리고 로그 위치까지 알려주어야 하기 때문에 작업에 에로사항이 있을수도 있습니다. 그러나 테이블 방식으로 로그를 쌓게 되면 쿼리 접속만으로도 General Query Log, Slow query log 있기 때문에 훨씬 작업이 수월할 수도 있습니다. 개발자들에게 테이블을 조회할 있는 권한을 부여해 직접 보면서 개발 하게 있기 때문입니다. 또한 로그 테이블들은 alter table, drop table 이용해서 제어할 있습니다. 물론 제약사항을 따라야 하지만 그만큼 유지보수도 쉬울 있습니다. 

 

+ Log table 유지보수

로그 테이블은 기본적으로 csv 방식의 스토리지 엔진으로 구성되어 있습니다. csv 알다시피 ,(콤마)방식으로 필드를 구분하기 때문에 성능적으로 좋지 않습니다. 그래서 다른 스토리지 엔진으로 바꾸어주면 인덱스가 가능하고 유지보수도 편안하기 때문에 엔진을 바꾸어 사용하시는 것을 추천드립니다.

 

- 엔진 바꾸는 방법

1. 시스템 변수인 @@GLOBAL.general_log 다른 로컬 변수로 임시 할당을 합니다.

mysql> SET @old_log_state = @@GLOBAL.general_log;

2. 임시로 할당된 변수를 중지시키니다.

mysql> SET GLOBAL general_log = 'OFF';

3. 현제 스토리지 엔진 타입을 변경합니다.

mysql> ALTER TABLE mysql.general_log ENGINE = MyISAM;

4. 임시 변수의 값을 원래 시스템 변수로 다시 할당시킵니다.

mysql> SET GLOBAL general_log = @old_log_state;

이렇게 하면 좀더 쾌적한 Query Log Table 사용할 있습니다.

물론 Slow Query Log 위와 비슷한 방식으로 하시면 됩니다.

대신 GLOBAL.general_log GLOBAL.slow_query_log 변경하시면 됩니다.

 

- 테이블 이름 변경 방법

테이블에 너무 많이 데이터가 적재되어 속도가 느려질 경우 다른 이름으로 백업 새로운 테이블을 만들어 이곳에 적재하게 있습니다. 사용방법은 다음과 같습니다.

 

1. mysql Database 접속합니다.

mysql> USE mysql;

2. 신규 테이블을 만듭니다. 원본 테이블과 똑같은 컬럼과 구조를 가진 테입블을 만들어야 합니다.

mysql> CREATE TABLE general_log2 LIKE general_log;

3. 테이블을 기존 사용중인 테이블과 교체합니다.

mysql> RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;

4. MySQL서버가 인식할 있도록 명령을 실행합니다. 2가지 방법이 있는데 가능하면 첫번째 방법을 권해 드립니다.

 

* 첫번째 방법

mysql > flush logs

모든 log 파일들에 대해서 메모리에 있는 내용을 해당 로그내용을 디스크에 쓰기를 수행합니다.

 

* 두번째 방법

mysql > flush tables

모든 테이블에 대해서 메모리에 있는 내용을 디스크로 쓰기를 수행합니다. 작업을 수행할 순간적으로 모든 테이블에 대해 일순간 lock 걸리게 됩니다. 작업을 수행할때는 신중하게 작업해야 합니다.

 

- 그외 특징들..

tuncate table 지원합니다. 로그가 필요없거나 너무 오래되었다면 편하게 데이터 정리를 있습니다.

Lock table update, delete, update 지원하지 않습니다. 시스템 테이블이니 인위적으로 데이터를 조작하거나 변경하면 log로써의 의미를 잃어버릴 것입니다.

 

+ general query log

앞서 공통적인 특징에 대해서 알아보았습니다. 이번엔 general_log 대해서 좀더 깊게 알아보겠습니다. general log 정확히 얘기하면 사용자가 요청한 쿼리에 대해서 mysqld 수행한 내용을 남가는 로그입니다. 프로토콜 타입(TCP/IP, SSL/TSL) 사용자 IP 그리고 수행한 쿼리를 남기게 됩니다.

보통 개발 데이터베이스 시스템에서 사용으로 쓰입니다. 부하가 많은 프로덕트, 혹은 온라인 데이터베이스라면 쌓이는 로그가 상당하기 때문에 부하가 수도 있습니다. 그리고 파일 사이즈를 조절하지 않으면 엄청나게 파일이 비대해져 성능상 문제를 일으키기도 합니다. 만약 시스템 감사나 쿼리 실행 이력을 의무적으로 남겨야 한다면 반드시 로그 파일 관리 전략을 세우셔야 합니다.

general query log 쓰이는 메카니즘은 다음과 같습니다.

사용자가 데이터가 변경되는 쿼리를 수행합니다. 그러면 테이블에 Lock 걸립니다. 그리고 테이블의 데이터를 변경 시킵니다. lock 해제되면 비로소 이진로그에 데이터가 작성이 되고 general log 기록이 됩니다. 실제 수행된 쿼리만 작성이 됩니다. 만약 중간에 쿼리가 어떤 이유로 거부되게 되면 로그에는 작성이 되지 않습니다.

 

위에서 예기했듯이 log_output, general_log, general_log_file 파라미터에 영향을 받습니다. log_output 어떤 옵션도 주지 않고 general_log= 1 주었다면 general_log_file 작동하게 됩니다. general_log값은 기본적으로 off(0)입니다. log_output  my.cnf 명시적으로 작성하지 않았더라도 자동으로 기본값인 file으로 활성화가 됩니다. general_log_file 어떤 입력값도 주지 않았다면 데이터 디렉토리에 <hostname>.log 라는 파일명으로 쌓이게 됩니다. 만약 특정디렉토리에 특정 파일명으로 쌓이게 하고 싶다면 다음과 같이 하시면 됩니다.

 

1. 디렉토리 준비

shell> mkdir /var/log/mysql_log
shell> chown mysql:mysql /var/log/mysql_log

2. 특정 위치 파일명 지정.

my.cnf에서

mysql> general_log_file=/var/log/mysql_log/mygeneral.log

 

이렇게 하시면 원하는 디렉토리에 원하는 파일명으로 로그를 쌓을 있습니다.

만약 파일이 너무 커져서 분리가 필요할 경우 다음과 같은 방법으로 처리합니다.

 

1. 파일의 이름을 바꿉니다.

shell> mv host_name.log host_name-old.log

2. 로그를 flush 합니다.

shell> mysqladmin flush-logs

3. 로그 파일을 다른곳으로 이동시켜 보관해 둡니다. 필요가 없다면 삭제하셔도 됩니다.

shell> mv host_name-old.log backup-directory

 

general query log mysql 세션 상에서도 제어가 가능합니다. 굳이 서버를 내렸다 올렸다 하지 않아도 바로 적용이 가능한 dynamic 파라미터입니다.

mysql> SET GLOBAL general_log = 'OFF';

이렇게 하면 general query log 쓰기가 중지됩니다. 이때 필요한 작업을 다시 on 시키시면 됩니다.

mysql> SET GLOBAL general_log = 'ON';

 

위에서 말씀드렸드시 현제 세션에서 로그 쓰기를 중지시키고 싶다면 다음과 같이 명령을 수행합니다.

mysql> SET sql_log_off=‘off’

 

혹시 어떠한 이유로 사용자의 암호를 general query log 나타내고 싶다면 MySQL 서버를 시작할 다음 옵션을 사용합니다.

shell> bin/mysqld_safe --user=mysql --defaults-file=/etc//my.cnf --datadir=/usr/local/mysql/data --log-raw

--log-raw옵션을 사용하시면 됩니다. 하지만 보안상을 위해서라도 사용하지 않는것을 권장해 드립니다.

 

+ Slow Query Log

제너럴 쿼리 로그를 알아오았으니 이번엔 슬로우 쿼리 로그에 대해서 알아보겠습니다. 슬로우 쿼리 로그는 long_query_time이란 파라미터에서 설정된 시간()이상 쿼리가 수행되었을때 작성되는 로그입니다. 성능에 문제가 되는 쿼리를 기록하는 로그입니다. 또한 무제한으로 쌓이는 문제를 방지하고 싶을땐 min_examined_row_limit 파라미터를 통해서 몇줄까지 가지고 있을지 설정할 있습니다. mysqldumpslow 명령문을 이용하면 slow query log 요약해서 있습니다. 

mysqlslowdump : https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html

 

이것또한 마찬가지로 log_output 파라미터에 따라 출력되는 형식이 다릅니다. 그리고 slow_query_log, slow_query_log_file, long_query_time파라미터에 영향을 받습니다. long_query_time파라미터에 몇초 이상 쿼리가 수행될 로그에 남길지 정합니다. 단위는입니다.

slow_query_log 기본적으로 사용하지 않습니다.(0 사용하지 않음, 1 사용함) 1 설정시 long_query_log_file 파라미터에 따라 로그파일을 작성합니다. 기본적으로 데이터 디렉토리에 저장이 되며 <hostname>-slow.log 형식으로 저장이 됩니다.

 

기본적으로 관리 명령어는 기록되지 않습니다. 그러나 관리 명령까지 기록하려면 다음과 같은 파라미터를 이용해야 합니다.

mysql> log_slow_admin_statements = on 혹은 off

참고로 파라미터는 다음과 같은 관리 명령어를 기록합니다.

ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, REPAIR TABLE.

 

사용되지 않는 index 파악하고 싶다면 다음과 같은 파라미터를 이용합니다.

mysql> log_queries_not_using_indexes=on 혹은 off

 

참고로 log_queries_not_using_indexes 옵션을 사용하지 않으면 slow query log 많은 데이터가 쌓입니다. 그러나 이것을 제어할 있는 옵션이 있습니다. 바로 log_throttle_queries_not_using_indexes 파라미터를 사용하면 어느정도 제어가 가능합니다. log_throttle_queries_not_using_indexes파라미터는 기본값이 0입니다. 단위는 분입니다. 예를 들어 1 사용하면 1분동안 인덱스를 사용하지 않는 쿼리를 수집합니다. 그리고 쿼리들이 사용한 시간을 정리해서 보여줍니다. 그리고 다시 1분동안 쿼리를 수집하고 아까의 작업을 반복합니다. 이렇게 함으로써 문제가 되는 쿼리를 좀더 쉽게 수집하고 분석할 있습니다.

설정방법이 어렵다고 느껴지시면 slow query log, long query time 파라미터만 설정하셔도 됩니다. 어차피 설정 시간이상 쿼리가 수행된다면 튜닝이 필요한 쿼리이기 때문에 쿼리 분석이 필요합니다.

 

log_timestamps파라미터를 이용하면 특정 시간대로 로그를 작성 있습니다. 파라미터를 설정하지 않으면 시스템의 기본 시간대로 로그를 작성합니다.

 

Slow Query Log에서는 다음과 같은 컨텐츠를 포함하고 있습니다.

 

Query_time : 쿼리 수행 시간, 초단위입니다.

Lock_time: 해당 테이블에 Lock 시간입니다.

Rows_sent: 클라이언트에 보낸 row 입니다.

Rows_examined: 해당 쿼리를 수행하기 위해 처리된 row 입니다. 이게 많을수록 많은지 이유를 분석하고 줄여야 합니다.

 

+ Error log

에러 로그는 mysqld 모든 상태를 나타냅니다.시작과 종료, 그리고 경고-에러-통지등등 mysqld 대한 여러 상태를 기록합니다. 그리고 비정상적인 종료나 기타 상황에 대해서도 같이 기록합니다.

 

- windows에서의 로그

--log-error, --pid-file --console 옵션을 사용해서 제어한다. MySQL 시작할 --console 옵션을 주게되면 윈도우 콜솔에 로그들이 쌓이게 된다. 만약 콘솔에서 MySQL서버를 시작할 --console옵션과 --log-error 같이 주게 되면 --log-error 무시하게 된다. --log-error 설정할 특정 디렉토리와 파일명을 주지 않게 되면 데이터 디렉토리의 <hostname>.err 이란 파일명으로 쌓이게 된다. 파라미터도 마찬가지로 특정 디렉토리에 이름을 설정하면 해당디렉토리에 해당 파일로 작성하게 된다.

 

- Linux, Unix에서의 로그

MySQL 시작할 --log-error 옵션을 안주게 되면 기본적으로 실행한 콘솔에 로그를 남기게 된다. --log-error옵션을 주고 특정 디렉토리와 파일명을 주지 않게 되면 마찬가지로 데이터 디렉토리에 <hostname>.err 파일로 작성이 된다. 만약 특정 디렉토리와 파일명을 주게 되면 해당 디렉토리에 주어진 파일 이름으로 작성하게 된다.

 

특히 Linux, Unix에서는 MySQL 에러 로그를 시스템 로그에 통합시킬 있다. 다음 파라미터들을 이용해서 통합시킨다.

 

log_syslog: 시스템 로그에 통합시킬지 여부를 결정한다. on, off 설정한다..

윈도우는 기본적으로 on이고 linux unix off이다. 파라미터를 on하면 밑에 있는 파라미터들또한 제어해야 한다.

 

log_syslog_facility: 시스템의 어떤 제어 방법을 통해 로그를 작성할지 정한다. 기본적으로 daemon이다.

어떤 제어 방법을 통해 로그를 작성할지는 OS 문서를 통해 결정한다.

 

log_syslog_include_pid: 시스템 로그에 MySQL PID(Process ID) 남길지 말지 결정한다.

on, off 제어되며 기본값은 on이다.

 

log_syslog_tag: 시스템 로그에 TAG 남길지 말지를 정한다. 기본값은 아무것도 없다. 만약 특정 이름을 지정하면 지정된 이름으로 tag 남겨진다. 기본 형식은 mysqld-tag이며 만약 tag값을 mydb라고 한다면 mysqld-mydb tag형식으로 로그가 남겨지게 된다. 개인적으로는 남기는 것을 추천한다. 로그 내용을 나중에 원하는 방식으로 필터링이 가능하기 때문입니다.

 

에러로그는 다음 파라미터에 의해 로그 레벨이 결정됩니다. 로그레벨이란 어느정도의 정보까지 로그에 남기는지를 결정하는 것입니다. 

log_error_verbosity=1 혹은 2 혹은 3

1 : 에러만 출력합니다.

2 : 에러와 경고만 출력합니다.

3 : 에러, 경고, 통지를 출력합니다.

2 이상 설정했을 경우 새로운 접속에 대하여 접속 종료 에러와 접근 금지 에러를 표시해 줍니다.

기본값은 3입니다.

 

에러 로그의 유지보수 방법은 다음과 같습니다. 파일크기가 너무 커졌거나 이름 변경등이 필요할때 사용합니다.

1. 파일이름을 변경합니다.

shell> mv host_name.err host_name.err-old

2. 관리 명령어를 이용해서 메모리의 내용을 디스크로 작성합니다. flush 합니다.

shell> mysqladmin flush-logs

3. 파일을 다른 디렉토리에 보관합니다. 필요없을시 삭제하셔도 됩니다.

shell> mv host_name.err-old backup-directory

 

+ DDL 로그

DROP TABLE이나 ALTER TABLE문이 실행되었을때 기록됩니다. 기본적으로 데이터 디렉토리에 ddl_log.log 작성되며 이진파일이라 일반적으로 텍스트 에디터에서 읽어들일 없습니다. 

ddl_log.log 1048573엔트리를 저장할 있으며 이것은 4G 크기와 같습니다. 이것이 4G 넘기기 전에 파일이름 변경이나 제거를 통해 해결해 주어야 합니다.

 

+ Binary Log

바이너리 로그는 테이블 생성과 관련된 운영이나 테이블 데이터를 변경하는것 같은 데이터베이스 변경에 대해 묘사하는것을 이벤트라고 하는데 이것을 포함하고 있다.

그리고 delete 같은 데이터 조작 명령을 날렸을때 아무 영향을 받지 않아도 row-based로깅에 포함됨니다. 또한 데이터 업데이트시 얼마나 걸렸는지에 대한 정보도 포함됩니다. 이진 로그는 두가지 중요한 목적이 있습니다.

- 복제에 쓰입니다. 마스터에서 데이터 변경작업이 있을때 슬레이브 서버로 전송합니다.

- 데이터 복구에 쓰입니다. 백업된 덤프를 복원하고 이후의 데이터까지 복원할 로그가 쓰입니다. point-in time(시점복원)시에 쓰입니다.

참고로 select show같은 상태 확인 명령어는 general query log 쌓이게 됩니다.

다음 포스팅을 참고 부탁드립니다.

https://myinfrabox.tistory.com/10?category=784582

 

로그 유지보수

먼저 이진로그를 사용하셨다면 가능하면 보유기간을 설정하고 같이 백업 덤프와 함께 보관하시기를 추천드립니다. 특정 시점 복원(point in time) 사용할때 반드시 필요합니다.

레드햇, centos 설치하셨다면 mysql-log-rotate 라는 스크립트가 같이 설치됩니다. 이것을 사용하면 로그 순환을 자동으로 해줍니다. 대신 master-slave환경에서는 조심히 사용하셔야 합니다. 슬레이브에 로그가 복제되고 있는데 그냥 순환시켜 버리면 에러가 발생할 수도 있습니다.

이외 다른 리눅스나 유닉스를 쓰신다면 cron 등록시켜 위에서 배운 유지보수 방법으로 명령행을 만들어 실행시키는것도 하나의 좋은 방법입니다.

이진로그의 경우 expire_logs_days라는 서버 파라미터를 제공합니다. 이것은 몇일동안 바이너리 로그를 보관할지를 정하는 파라미터입니다. 단위값은(day)’입니다. 바이너리 로그는 수동으로 삭제되지 않기 때문에 위의 서버 파라미터를 이용하거나 mysql명령행에서 purge binary logs라는 명령행을 이용해서 삭제할 수도 있습니다.

또한 이진 로그는 max_binlog_size 이용해서 하나의 파일 크기를 얼마의 사이즈까지 저장할지 정하는 옵션도 제공합니다.

한가지 기억할것이 있습니다. flush logs 운영 방식입니다. log-flush 하게 되면 다음과 같은 일들이 일어납니다.

- slow query log general query log 파일을 순환(기존 로그를 백업하고 새롭게 기존 이름으로 재생성)시킵니다. 그리고 계속 로그를 기록합니다.

- 이진로그를 설정했다면 이진로그 또한 현제 파일을 순환시키고 새로운 기존 파일 이름으로 만든 계속 저장하게 됩니다.

- 서버 에러 로그 또한 마찬가지로 순환시키고 새로운 기존 이름의 파일로 만든 저장합니다.

 

메카니즘을 기억하여 위에서 배운대로 로그파일을 유지보수 하시면 됩니다.

 

로그 유지보수의

위에도 설명드렸지만 한번 설명드립니다.

예를 들어 mysql.log라는 이름명으로 에러로그를 쌓고 있고 mysql-slow.log 슬로우 쿼리 로그를 쌓고 있다면 다음과 같이 유지보수를 합니다.

shell > cd /usr/local/mysql/data
shell > mv mysql.log mysql.old
shell > mv mysql-slow.log mysql-slow.old
shell > mysqladmin flush-logs

이렇게 하면 바꾼 이름의 로그 파일을 다른곳으로 옮기거나 삭제할 있습니다.

 

general query log slow query log또한 마찬가지 입니다. 먼저 mysql 명령행에서 다음 명령을 입력합니다.

mysql > set global general_log = ‘OFF’
mysql > set global slow_query_log = ‘OFF’

이렇게 하면 로그가 안쌓이게 됩니다. 이때 파일이름을 변경시키거나 옮김니다.

shell > cd /usr/local/msyql/data
shell > mv slow-query.log /var/log/mysql/
shell > mv general_log.log /var/log/mysql/

그리고 다음을 다시 실행시켜 줍니다.

mysql > set global general_log = ‘ON’
mysql > set global slow_query_log = ‘ON’

이렇게 하면 로그가 다시 기록되는것을 확인할 있습니다.

 

도움이 되셨다면 광고클릭 한번 부탁드립니다.※

 

댓글(0)

Designed by JB FACTORY