생활코딩

Coding Everybody

로그

토픽 생활코딩 > 서버 > PHP > CodeIgniter

디버깅이란?

Debugging. 에플리케이션의 오류를 제거하거나 억제하는 행위

로그란?

log. 에플리케이션의 상태를 관찰할 수 있도록 에플리케이션이 제공하는 정보

CodeIgniter와 로깅

CI는 로그를 원하는 디렉토리에 출력해주는 기능을 가지고 있다. 이 기능을 활성화하기 위해서는 application/config/config.php의 $config['log_threshold'] 기능을 수정해야 한다. 이 설정에 올 수 있는 값은 아래와 같다. 

  • 0 = 로깅을 비활성화
  • 1 = 에러로그만 기록
  • 2 = 디버그 로그도 기록 
  • 3 = 정보 로그도 기록
  • 4 = 모든 메시지를 기록

log_threshold의 값을 1이상으로 지정하면 application/logs 디렉토리 하위에 로깅 파일이 생성될 것이다. 

로그 파일의 열람

리눅스나 OSX를 사용하고 있다면 tail 명령을 이용하면 편리하다. 사용 방법은 아래와 같다. 아래의 명령을 사용하면 로그파일의 마지막으로 추가된 내용을 실시간으로 화면에 출력해준다. 

tail -f 로그파일명

특정한 문자열을 포함한 로그만 열람하고 싶다면 아래와 같이 한다. 

tail -f 로그파일명 | grep topic

로그의 이용

log_message(로그타입, 로그메시지);

예제

차이점

코드

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Topic extends CI_Controller {
    function __construct()
    {       
        parent::__construct();
        $this->load->database();
        $this->load->model('topic_model');
        log_message('debug', 'topic 초기화');
    }
    function index(){        
        $this->_head();

        $this->load->view('main');

        $this->load->view('footer');
    }
    function get($id){        
        log_message('debug', 'get 호출');
        $this->_head();

        $topic = $this->topic_model->get($id);
        if(empty($topic)){
            log_message('error', 'topic의 값이 없습니다');       
            show_error('topic의 값이 없습니다');
        }

        $this->load->helper(array('url', 'HTML', 'korean'));
        log_message('debug', 'get view 로딩');
        $this->load->view('get', array('topic'=>$topic));
        log_message('debug', 'footer view 로딩');
        $this->load->view('footer');
    }
    function add(){
        $this->_head();
        
        $this->load->library('form_validation');

        $this->form_validation->set_rules('title', '제목', 'required');
        $this->form_validation->set_rules('description', '본문', 'required');
        
        if ($this->form_validation->run() == FALSE)
        {
             $this->load->view('add');
        }
        else
        {
            $topic_id = $this->topic_model->add($this->input->post('title'), $this->input->post('description'));
            $this->load->helper('url');
            redirect('/topic/get/'.$topic_id);
        }
        
        $this->load->view('footer');
    }
    function _head(){
        $this->load->config('opentutorials');
        $this->load->view('head');
        $topics = $this->topic_model->gets();
        $this->load->view('topic_list', array('topics'=>$topics));
    }
}
?>

태그

태그명 : Log2

태그주소 https://github.com/egoing/codeigniter_codeingeverbody/tree/Log2

참고

댓글

댓글 본문
  1. jeisyoon
    2021.08.19 Log - OK

    개발 환경이 달라 Error 가 계속 발생하여 기본 개념만 이해하고 갑니다.
  2. 매리고
    이고잉 관리자님, 프로필에서 페이스북 연결끊기가 작동하지 않습니다. 확인부탁드립니다.
  3. 김세창
    잘보고 갑니다~^^ ㅎ
  4. code
    ..config에서 thread ='4'로 해놓고 에러 발생시키면

    로그 php 파일안에 로그 기록이 남고, 화면에도 여전히 에러 메시지가 출력되네요.

    강좌 화면에서는 에러화면이 안나오시던데..
  5. 신입1
    감사합니다.
  6. 꼬딩
    tail -f 명령어 정말 편하고 좋네요. 감사합니다.
  7. JustStudy
    고맙습니다
  8. jio1122
    감사합니다
  9. 김승갑
    감사합니다~
  10. egoing
    혹시 웹페이지의 인코딩의 문제가 아닐까요? 브라우저에서 인코딩을 변경해서 한번 살펴보시면 어떨까 싶습니다.

    https://support.google.com......=ko
    대화보기
    • 열공
      show_error('topic의 값이 없습니다');
      에러메시지값이 한글일때 브라우저에서 한글이 깨지는데 설정하는 부분이 CI에 있나요?
    • 가을바다
      잘 봤습니다. 감사합니다^^
    • Sam MA
      와 님쫌 천재인듯
      대화보기
      • 언제나 감사히 보고있습니다^_^
      • egoing
        CI의 개발중인 코드를 보면 $_SERVER['CI_ENV']를 이용해서 환경을 스위칭 합니다. 이 값은 apache의 경우는 setenv 지시지를 이용해서 설정하면 웹서버의 설정에 따라서 디버깅 환경을 스위칭하면서도 index.php 파일을 수정하지 않는 장점이 생깁니다. 이 점도 참고해주세요.
        https://github.com......o...
        대화보기
        • Korea Space Weather Center
          로깅은 문제 발생 후에 문제 발생 당시의 상황을 추적하는데 크게 도움이 됩니다.하지만, 실제로 문제를 발견하고 코드를 수정할 때는 php의 경우 디버깅 정보를 화면에 바로 출력하는게 오히려 큰 도움이 됩니다.
          하지만, 말씀하신대로 운영중인 시스템에서 디버깅 코드를 마구 출력해대면 낭패를 볼 수 있죠그래서 서비스 중인 시스템에서 급하게 디버깅 할 때는
          if($_SERVER['REMOTE_ADDR'] == '내아이피') {var_dump($var);}
          if($_GET['debug'] == 'true') {var_dump($var);}
          와 같은 코드를 사용해서 내 아이피에서만 디버깅 코드가 표시되도록 하거나,http://.............?debug=true 와 같이 URL에 특정 인자가 있을 때만 디버깅 코드를 표시하도록 하는 방법을 사용합니다.