Свой класс для логирования

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
YafusOriginal
Сообщения: 11
Зарегистрирован: 2019.06.14, 16:24

Свой класс для логирования

Сообщение YafusOriginal »

Добрый день!

Стоит задача преобразовать логи полученные за время работы приложения в JSON строку и записать ее в файл. Вот формат. Нужно внести данные входящие, выходящие, и информацию по подсервисам, которые в рамках приложения дергают внешние API.

Код: Выделить всё

{
  "in":{
    "validation":{
      "service_name":{
        "some_field_1":"some_data",
        "some_field_2":"some_data",
        "some_field_n":"some_data"
      }
    },
    "parsed_text":{
      "service_name":{
        "some_field_1":"some_data",
        "some_field_2":"some_data",
        "some_field_n":"some_data"
      }
    },
    "SID":{
      "user":{
        "login":"login",
        "auth":"type"
      },
      "ip":"ip_address",
      "state":"state"
    },
    "text":"json/xml"
  },
  "out":{
    "http_retcode":"retcode",
    "text":"json/xml"
  },
  "system":{
    "service":"service_name",
    "worktime_ms":123,
    "starttime":"2018-11-29 14:18:20.258",
    "subservice":{
      "somSubService1":{
        "worktime_ms":123,
        "starttime":"2018-11-29 14:18:20.258",
        "status":"'ok'/'err'",
		"request":"json/xml",
		"answer":"json/xml" 
	 },
      "somSubService2":{
        "worktime_ms":123,
        "starttime":"2018-11-29 14:18:21.258",
        "status":"ok/err",
        "request":"{ \"ops\":[{ \"ref\":\"1531285292\", \"type\":\"create\", \"obj\":\"task\", \"conv_id\":\"164938\", \"data\":{\"phone\":\"90670000000\", \"test\":\"test777\"} }]}",
		"answer":"{\"request_proc\":\"ok\",\"ops\":[{\"id\":\"\",\"proc\":\"ok\",\"obj\":\"task\",\"ref\":\"1531285292\",\"obj_id\":\"abrakadabra\"}]}" 
      }
    }
  }
}
Насколько я понимаю запись логов осуществляется через FileTarget и здесь ничего менять не надо.
А вот где менять формат сообщений я не понимаю. Насколько я понял мне нужно переопределить методы класса Logger, но где подключать потом этот класс?

Если есть примеры подобных реализаций будет вообще хорошо. Либо покажите направление в котором двигаться.
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свой класс для логирования

Сообщение masson »

мне нужно переопределить методы класса Logger, но где подключать потом этот класс?
В конфиге, а где же еще?
YafusOriginal
Сообщения: 11
Зарегистрирован: 2019.06.14, 16:24

Re: Свой класс для логирования

Сообщение YafusOriginal »

masson писал(а): 2019.08.07, 11:01
мне нужно переопределить методы класса Logger, но где подключать потом этот класс?
В конфиге, а где же еще?
Содержательный ответ. К сожалению понятнее не стало. :lol:
Это был один из вопросов. Меня больше примеры интересовали того, где нужно вносить правки.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Свой класс для логирования

Сообщение ElisDN »

YafusOriginal писал(а): 2019.08.07, 11:22 Содержательный ответ. К сожалению понятнее не стало. :lol:
Это был один из вопросов. Меня больше примеры интересовали того, где нужно вносить правки.
Классы всех компонентов в конфиге Yii переопределяются одинаково:

Код: Выделить всё

'log' => [
    'class' => MyLogger::class,
    ...
],
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Свой класс для логирования

Сообщение masson »

YafusOriginal писал(а): 2019.08.07, 11:22 Меня больше примеры интересовали того, где нужно вносить правки.
Если шаблон basic - то в файле /config/web.php. Если advanced - то там отдельные конфиги для бэка и фронта - backend/config/main.php & frontend/config/main.php ... либо common/config/main.php если компонент нужен и тут и там

Нужно просто заменить стандартный логгер на свой, указав имя класса.
Ответить