Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
Выполняю логирование с помощью функции error_log (). Второй параметр равен 3, т.е. запись веду в свой файл. Наблюдается иногда такая ситуация, что идет параллельная запись, т.е. разные процессы одновременно получают доступ к файлу (файл при этом не блокируется) и одновременно пишут, и сохраняется то сообщение, которое записано последнее, если это последнее сообщение меньше первого, то от первого остается "хвост". Как с этим бороться? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2014, 13:56 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_md, не шибко идея. в свой файл логировать надо своим кодом, и воротить мьютексы никчему... file_put_contents() - указав третий параметр аппенд. дабы небыло много обращений, можно свой клас написать где логирование, реально добавит лишь в масив строку, а потом одним махом все елементы масива в строку и в лог файл аппендом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 11:24 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
big-trotт.е. разные процессы одновременно получают доступ к файлу вариант: каждый процесс пишет лог в свой файл. а перед смертью сливает свой лог в общий лог. зависит от специфики задачи. какие объемы логов. частота добавления. что за процессы, как долго живут.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 11:27 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
alex564657498765453SmeL_md, не шибко идея. в свой файл логировать надо своим кодом, и воротить мьютексы никчему... file_put_contents() - указав третий параметр аппенд. дабы небыло много обращений, можно свой клас написать где логирование, реально добавит лишь в масив строку, а потом одним махом все елементы масива в строку и в лог файл аппендом.т.е. Ваш вариант спасает от гонки? Не знаю как работает FILE_APPEND, пусть ТС проверит что произойдет если несколько одновременно откроют один и тот же файл и начнут в него писать мегабайты, сомневаюсь что логи не вклинятся между собой. • Насчет того чтоб писать в разные файлы а перед смертью сливать, та же проблема. • С мютекстом тоже беда, Вы не можете ждать пока файлик освободится, для того чтоб эксклюзивно записать, возможно скрипт умрет раньше. Рекомендую БД , но если принципиально файл, то тогда чуть модифицируем вариант r u, каждый пишет в свой фалик, а потом приходит крон и клеит их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 12:04 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_mdalex564657498765453SmeL_md, не шибко идея. в свой файл логировать надо своим кодом, и воротить мьютексы никчему... file_put_contents() - указав третий параметр аппенд. дабы небыло много обращений, можно свой клас написать где логирование, реально добавит лишь в масив строку, а потом одним махом все елементы масива в строку и в лог файл аппендом.т.е. Ваш вариант спасает от гонки? Не знаю как работает FILE_APPEND, пусть ТС проверит что произойдет если несколько одновременно откроют один и тот же файл и начнут в него писать мегабайты, сомневаюсь что логи не вклинятся между собой. • Насчет того чтоб писать в разные файлы а перед смертью сливать, та же проблема. • С мютекстом тоже беда, Вы не можете ждать пока файлик освободится, для того чтоб эксклюзивно записать, возможно скрипт умрет раньше. Рекомендую БД , но если принципиально файл, то тогда чуть модифицируем вариант r u, каждый пишет в свой фалик, а потом приходит крон и клеит их. вы не дочитали, file_put_contents() & FILE_APPEND И свой класс для сброса логов. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. как то так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:11 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
авторif($name === null) {$name = self::$_default_name;} не пишите так больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:20 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
alex564657498765453вы не дочитали, file_put_contents() & FILE_APPEND И свой класс для сброса логов. Код: php 1. 2. 3. 4. 5. 6. как то такт.е. всем раздать по файлику для логов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:20 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
авторpublic function __destructor() { file_put_contents($this->_name,explode("\r\n\",$this->_logs,FILE_APPEND); } а вот это вообще бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:21 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
ScareCrowавторpublic function __destructor() { file_put_contents($this->_name,explode("\r\n\",$this->_logs,FILE_APPEND); } а вот это вообще бред. file_put_contents($this->_name,implode("\r\n\",$this->_logs)."\r\n",FILE_APPEND); извините, нетбинс когда я путаю эти функция подсказывает описанием что она делает, и я исправляюсь:) 4 года пишу, и 4 года путаю эти две, пуш поп, и...чтото ещо я постояно путаю в пхп. Ну идея ведь ясна?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:29 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
авторизвините, нетбинс когда я путаю эти функция подсказывает описанием что она делает, и я исправляюсь тут вопрос не в этом. а в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 15:34 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_mdalex564657498765453вы не дочитали, file_put_contents() & FILE_APPEND И свой класс для сброса логов. Код: php 1. 2. 3. 4. 5. 6. как то такт.е. всем раздать по файлику для логов? хочешь делаешь так Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 12:47 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, И что вы тут мне показали :) если в конце используется Код: php 1. 2. 3. Пусть даже с корректным синтаксисом, и даже корректным заложенным смыслом, то это все равно ж, и не решает проблему автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 13:18 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_mdalex564657498765453, И что вы тут мне показали :) если в конце используется Код: php 1. 2. 3. Пусть даже с корректным синтаксисом, и даже корректным заложенным смыслом, то это все равно ж, и не решает проблему автора. и цитата от автора автори одновременно пишут, и сохраняется то сообщение, которое записано последнее, если это последнее сообщение меньше первого, то от первого остается "хвост". Как с этим бороться? веришь что в даном случае никаких хвастов не будет, логи каждого процеса в файле будут кучкой, а не так Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 14:20 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
ну и действия атомарные, одна запись в файл на скрипт, тоесть блокировка будет не больше, а даже меньше чем блокировки файла сесии если такое используеться. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 14:22 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
и главное, насколько я понимаю, (могу ошибаться, ибо знаю со слов других) при такой записи в файл на сервере физически происходит следующее file_put_contents(); посылка команды ОС линукс получение ответа не ссыте хлопцы все записано и скрипт идёт дальше. реально же запись была сделана в файловый поток, и реально на шдд может попасть когда уже скрипт завершит работу. любой вариант с fopen fclose будет работать иначе. пока реальной записи не произойдёт =сброс файлового буфера, ответ от fclose от ОС мы не получим. тоесть если ещо есть проблемы с шдд изза большого числа дисковых операций, код отработает всёравно быстро.(предполагаем что логируем мы не по гектару текста за один запуск скрипта) - хотя и в этом случае может получиться так что гиг будет в буфере лежать(файловый буфер) а код уже завершил свою работу. я лично наблюдал такое, скрипт перегонял полтора гига, на момент завершения работы реально записано было в приёмник только 400 метров, 1.1 гига находилось в файловом буфере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 14:29 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Неужели Вы не видите проблем? Возможно Ваш логгер работает на Ваших скриптах, и Вы уверены в нем на 100%, но он будет работать только на ваших нагрузках. А теперь ваши идеи о логгере, т.е. собираем логи в единый массив и в деструкторе пишем. Т.о. если ваш код отлажен вы увидите лог, если возможны фатальные ошибки, ваш лог на данную ситуацию ни прольет ни капли. Теперь о панацеи FILE_APPEND. Все клиенты пишут в одни и тежи файлы. 1 клиент пришел пишет, пришел второй оказывается 1-й пишет дергаем пока не освободится, пришел третий вот не задача файлик то занят ничего страшного подергаем до тайм аута еще живем, и надеяться на методы LIFO FIFO тут не приходится повезет как карты лягут. Т.е. если все штатно лог Вам это и покажет, а если не штатно то смотрим логи сервера :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:30 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_md, я не понял главного, есть другой вариант? можно писать в файл одновременно не пересекаясь чтобы не ждать? есть идея не копить логи а делать 100 записей в файл независимых за работу скрипта? я альтернативу вашу не понял... сислог не стривает ибо вперемешку пишет...надо чтото своё. пишите своё демон логирования в чом дело??? и таки работать он будет по тому же принципу, подкопил логов, скинул, подкопил скинул, а не писать по 200 байт при разрмере кластера 4Кб. чувствуете мысль? предлагаете автору демон свой написать? или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:12 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
alex564657498765453SmeL_md, я не понял главного, есть другой вариант? можно писать в файл одновременно не пересекаясь чтобы не ждать? есть идея не копить логи а делать 100 записей в файл независимых за работу скрипта? я альтернативу вашу не понял... сислог не стривает ибо вперемешку пишет...надо чтото своё. пишите своё демон логирования в чом дело??? и таки работать он будет по тому же принципу, подкопил логов, скинул, подкопил скинул, а не писать по 200 байт при разрмере кластера 4Кб. чувствуете мысль? предлагаете автору демон свой написать? или что? 15889834 ,Как то вы не здорово реагируете :), там оно подчеркнуто, и даже есть именно для любителей файликов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:23 |
|
||
|
Конкурентная запись в файл
|
|||
|---|---|---|---|
|
#18+
SmeL_md 15889834 ,Как то вы не здорово реагируете :), там оно подчеркнуто, и даже есть именно для любителей файликов :)а тю...эт я на работе...я счас на все реагирую подорвано.... :) писать в кучу разных файлов медленее чем дозапись в один. файл аппенд для file_put_contents - это запись не в файловый дескриптор, а имено в файл, модуль пхп сам его откроет и закроет после дозаписи. разные процессы - процес один! мастер процес, всегда заведует всем открытыми файлами, а процесам лишь даёт на время по очереди. даже если процесы разные, влюбом случае чтобы записать чтото в файл, надо его октрыть, писать и закрыть. и делать это в разные файлы, это ос ещо октрывать и закрывать с дозаписью файлы каталогов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:33 |
|
||
|
|

start [/forum/topic.php?fid=23&gotonew=1&tid=1462874]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
13ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 415ms |

| 0 / 0 |
