Kirill
Пол года назад встретил проект в котором логи писались в файлы по имени сервиса. Надеюсь человек который это сделал сейчас дворы подметает. 18:43 событие 1 -> SomeService.dev.log 18:44 событие 2 -> AnotherService.log и т.д. получить связанную картинку происходящего - невозможно Мне не хочется в холивары вступать, но за такое я бы кочергой в голову дал. Если вы хотите логировать ошибки и своевременно (не от пользователей) о них узнавать - сентри идеальное решение, бесплатного тарифа чаще всего достаточно. Если вы хотите писать телеметрию чтобы понимать что проиходит, то писать ее надо в одно место в один файл, а удобство чтения - вопрос инструмента просмотра логов. Не могу ничего сказать про локи, мы второй вид логов пишем в эластик и смотрим через грейлог.
И как это было реализовано?Через что именно? Я бы тоже писал всё в один файл, но выбор у меня невелик
Kirill
Если конечно помните
Alexander
Это был yii2
Shokha
Такой есть в Symfony Scheduler Bundle
Shokha
Для каждого команды свои логи
Kirill
https://github.com/m-adamski/symfony-schedule-bundle оно?
Kirill
Или оно?) https://github.com/j-guyon/CommandSchedulerBundle
Alexander
Это про команды, а не про сервисы
Kirill
Думал может оттуда идею почерпну)
Alexander
У монолога нет такой абстракции как файл, есть только канал. Вы можете настроить сообщения из какого канала куда будут сохраняться. Вы хотите динамически каналы создавать.
Dmitry
Думал может оттуда идею почерпну)
Можно сделать декоратор и в нём ориентироваться на debug_backtrace
Dmitry
Да, задача странная
Alexander
Вот и я том )
Юра
Т.е. ты хочешь каким-то образом связать класс в который инжектится логер.и название файла?
Alexander
https://symfony.com/doc/current/logging/channels_handlers.html#monolog-autowire-channels Канал можно автовайрингом инжектить, но каналы надо предварительно сконфигурировать.
Alexander
Можно конечно компайлер пасс написать, который вытащит все сервисы из контейнера, найдет те у которых в зависимостях есть логер, на их основе обновит конфиг монолога добавив туда кучу каналов. Но зачем?
Юра
да тебе надо писать комиллер пас
Юра
ну или вариант с бектрейсом тоже ниче такой хак
Юра
хотя компиллер пас лучше
Alexander
По тегу их и можно выцепить.
Kirill
По части получения сервисов, у меня вопросов нет.Вопрос только по части подмены параметра конфига. В доке сказано, что за путь к файлу отвечает параметр path https://symfony.com/doc/current/logging/channels_handlers.html#monolog-autowire-channels
Alexander
На сервере обычный жесткий, под 500 iops, 8ТБ свободно, переодически file_put_content падает с Failed to open stream: No space left on device. В директории 13 000 000 файлов. ext4. inodes 8% использовано. Куда можно посмотреть?
jenia
Скажите что делаю не так пожалуйста ?
Alexander
df
Айнод под миллион свободных, места 8ТБ
Alexander
Склоняюсь к тому, что жёсткие не справляются с нагрузкой. Хотя там рейд из 10 дисков и по идее запас ещё должен оставаться.
jenia
Справился?
Я поклал файл с настройками и сделал ему расширение которое он не брал во внимание (yml) 🙂 5 минут назад решил это . Спасибо
Юра
Страннно вроде yml валидное расширение
Юра
Или туплю
Alexander
За то какие файлы конфигурации загружаются отвечает src/Kernel.php Раньше было yml, потом стало yaml.
Alexander
Не знаю, на мой взгляд дурость какая-то. У нас этих файлов больше 100 мне кажется. Переименовывать их туда сюда то еще веселье было.
Юра
Дык find, move. В консоли да и все
Юра
Но вообще да сомнительное изменение
Дмитрий
Как указывает @David Heffeman, рекомендуется использовать .yaml когда это возможно, и эта рекомендация действует с сентября 2006 года.
Дмитрий
Хз правда что за мужик, не смог нагуглить )
Юра
Видимо yml слишком похоже на xml
Дмитрий
теория заговора )) еще видел мнение было yml потому что виндузятники исторически боятся расширения более чем 3 символа ))
Andrey
Файлы по папкам раскидай, что-то типа такого видел, файлы почистили и нормально стало
Если память не изменяет, там не на диске место кончается, а в структуре, где этот список файлов хранится, но детали плохо помню. Помню, что когда столкнулся и пытался в директорию войти - все висело сильно. Из консоли грохнул все (там временные файлы были) и сразу отпустило
Andrey
Поэтому и говорю: по папкам раскидай, должно помочь
Alexander
Раскидывать 13кк файлов под нагрузкой не самое приятное занятие просто :) Но придется. Пока сняли часть нагрузки с сервера, ошибки пропали.
Юра
Поэтому обычно всякие кешеры и аплоадеры создают иерархию папок на основе хеша имени файла
Alexander
Да, это все понятно, тут наследство просто.
Андрей
СонатаАдмин при добавлении в форму поля загрузки файла и отправке формы выдает ошибку: "файл не может быть загружен" Ошибка возникает при валидации самой формы Может кто-то сталкивался?
Андрей
Если форму сохранить без файла, а потом отредактировать и добавить файл - все норм
Roman
Всем доброго дня. Пытаюсь прикрутить NelmioApiDocBundle, описываю в модели поля, одно из них массив и столкнулся с ошибкой: Property "App\Entity\Widget::deliveryVariants" is an array, but its items type isn't specified. You can specify that by using the type string[] for instance or @SWG\Property(type="array", @SWG\Items(type="string")). пробовал и type="string[]" и другие варианты - одно и то же. Как правильно описать Property где type=array?
Roman
на данный момент аннотация выглядит как /** * @ORM\Column(type="array") * @OA\Property( * type="string[]", *) */ private $delivery_variants = [];
Alexey Mishurovskiy
Пробовал как в описании ошибки написано?
Vlad
@OA\Property(type="array", @OA\Items(type="string")) работает и не кашляет
Roman
@OA\Property(type="array", @OA\Items(type="string")) работает и не кашляет
В другом чате подсказали, что в геттере нужно указать @return string[]
Roman
пытаюсь победить теперь Schema of type "Ramsey\Uuid\UuidInterface" can't be generated, no describer supports it.
Vlad
В другом чате подсказали, что в геттере нужно указать @return string[]
Возможно да, у меня обычно исполбзуются коллекции а их все равно надо описать
Roman
Так не работает 🙁 ту же ошибку валит
Vlad
4.6.2
ты же @Model юзаешь?
Roman
ты же @Model юзаешь?
нет, пока еще не дошел до этого. Пока просто роут /api/widgets добавил и ловлю ошибки )
Vlad
Роуты автоматически подхватываются же
Roman
Роуты автоматически подхватываются же
Да, и должен вроде бы сгенерить максимум, что может. По крайней мере по Widget и зависимым классам я ошибки поправил. Теперь вот UuidInterface бы победить, и перейду на следующий уровень, буду искать, как набор полей организовать )
Roman
чтоб не все выводились
Vlad
чтоб не все выводились
чтобы не все выводилось юзают Model с указанием групп, вообще когда ссылаются на классы юзают Model место Scheme
Vlad
По истогу получается как то так
Vlad
Roman
пока непонятно почти ничего - до этих моментов еще не дошел )) Сейчас мне бы UuidInterface победить и хотя бы без ошибок страницу отображать начать
Vlad
Покажи как выглядит дока в контрллере
Roman
Покажи как выглядит дока в контрллере
/** * @Route("/api/widgets") * @OA\Response( * response="200", * @Model(type=Widget::class) * ) * @Route("/backend/widget", name="backend_widget_index") */
Vlad
* @OA\Response( * response="200", * @OA\JsonContent( * ref=@Nelmio\Model(type=Widget::class,) * ) * )
Roman
* @OA\Response( * response="200", * @OA\JsonContent( * ref=@Nelmio\Model(type=Widget::class,) * ) * )
Ага, спасибо. Поправил, но это не спасло от ошибки
Vlad
@Friendsys покажи как описываешь uuid
Roman
/** * @return UuidInterface|null * @OA\Property( * type="string", * format="uuid" * ) */ public function getId(): ?UuidInterface { return $this->id; }