[{"data":1,"prerenderedAt":600},["ShallowReactive",2],{"navigation_docs":3,"-modules-problems-logrotate":238,"-modules-problems-logrotate-surround":597},[4,45,60],{"title":5,"description":6,"icon":7,"path":8,"stem":9,"children":10},"Методология",null,"ruler","\u002Fmethodology","1.methodology",[11,15,20,25,30,35,40],{"title":12,"path":8,"stem":13,"description":14},"bxshef: методология и проверка навыков","1.methodology\u002Findex","Как писать навыки ИИ-агентов для Битрикса и как проверять, что им можно верить",{"title":16,"path":17,"stem":18,"description":19},"Стандарт навыка","\u002Fmethodology\u002Fstandard","1.methodology\u002F1.standard","11 правил, каждое из провала на стенде",{"title":21,"path":22,"stem":23,"description":24},"Методология проверки","\u002Fmethodology\u002Fmethod","1.methodology\u002F2.method","lint → eval → стенд; что измерено",{"title":26,"path":27,"stem":28,"description":29},"bxshef — CLI","\u002Fmethodology\u002Fbxshef","1.methodology\u002F3.bxshef","lint, eval, feedback",{"title":31,"path":32,"stem":33,"description":34},"GitHub Action","\u002Fmethodology\u002Faction","1.methodology\u002F4.action","тот же lint + eval в любом репозитории навыков",{"title":36,"path":37,"stem":38,"description":39},"Заготовка репозитория","\u002Fmethodology\u002Ftemplate","1.methodology\u002F5.template","с чего начать автору модуля",{"title":41,"path":42,"stem":43,"description":44},"Приёмник отзывов","\u002Fmethodology\u002Ffeedback","1.methodology\u002F6.feedback","куда уходят отзывы ИИ-агентов",{"title":46,"description":6,"icon":47,"path":48,"stem":49,"children":50},"Навыки","sparkles","\u002Fskills","2.skills",[51,55],{"title":52,"path":48,"stem":53,"description":54},"Навыки shef.*","2.skills\u002Findex","npx skills add bx-shef\u002Fskills",{"title":56,"path":57,"stem":58,"description":59},"shef-feedback","\u002Fskills\u002Fshef-feedback","2.skills\u002F1.shef-feedback","Отправить отзыв о навыке shef-* или навыке команды. Брать ВСЕГДА, когда просят оставить или отправить отзыв о навыке — даже если сам навык в диалоге не виден, —",{"title":61,"description":6,"icon":62,"path":63,"stem":64,"children":65},"Модули shef.*","package","\u002Fmodules","3.modules",[66,69,131,179],{"title":61,"path":63,"stem":67,"description":68},"3.modules\u002Findex","Что за чем ставить",{"title":70,"description":6,"path":71,"stem":72,"children":73},"shef.options","\u002Fmodules\u002Foptions","3.modules\u002F1.options\u002Findex",[74,76,81,86,91,96,101,106,110,114,119,123,127],{"title":70,"path":71,"stem":72,"description":75},"фундамент: настройки, трейты, компоненты",{"title":77,"path":78,"stem":79,"description":80},"[`\\Shef\\Options\\Installator`] Installer","\u002Fmodules\u002Foptions\u002Finstaller","3.modules\u002F1.options\u002F1.installer","Для облегчения установок.",{"title":82,"path":83,"stem":84,"description":85},"Сборка, CI и релиз","\u002Fmodules\u002Foptions\u002Fbuild-and-install","3.modules\u002F1.options\u002F10.build-and-install","Раскладка репозитория — в module-structure.md, процесс —\nв CONTRIBUTING.md, установка глазами пользователя —\nв README.md.",{"title":87,"path":88,"stem":89,"description":90},"Раскладка репозитория","\u002Fmodules\u002Foptions\u002Fmodule-structure","3.modules\u002F1.options\u002F11.module-structure","Файл про устройство репозитория. Опорные точки модуля — в CLAUDE.md,\nпроцесс — в CONTRIBUTING.md, сборка — в\nbuild-and-install.md.",{"title":92,"path":93,"stem":94,"description":95},"Проверка на портале","\u002Fmodules\u002Foptions\u002Fportal-check","3.modules\u002F1.options\u002F12.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, кеш,\nраскладка файлов, поведение при обновлении. Проверять это приходится руками —\nи лучше по списку, потому что забытый шаг находит не разработчик, а клиент.",{"title":97,"path":98,"stem":99,"description":100},"[`\\Shef\\Options\\Main\\Options`] Опции настроек модуля","\u002Fmodules\u002Foptions\u002Foptions","3.modules\u002F1.options\u002F2.options","Поддерживает следующие типы:",{"title":102,"path":103,"stem":104,"description":105},"Работа с пользователями","\u002Fmodules\u002Foptions\u002Fsecurity","3.modules\u002F1.options\u002F3.security","",{"title":107,"path":108,"stem":109,"description":105},"[`\\Shef\\Options\\Main\\Utils`] Утилиты","\u002Fmodules\u002Foptions\u002Futils","3.modules\u002F1.options\u002F4.utils",{"title":111,"path":112,"stem":113,"description":105},"[`\\Shef\\Options\\Components`] Работа с компонентами","\u002Fmodules\u002Foptions\u002Fcomponents","3.modules\u002F1.options\u002F5.components",{"title":115,"path":116,"stem":117,"description":118},"[`\\Shef\\Options\\Options`] Паттерны","\u002Fmodules\u002Foptions\u002Fpattern","3.modules\u002F1.options\u002F6.pattern","Запускаемые примеры: singleton.php,\nconfig.php, smartstd.php —\nкак их гонять, написано в examples\u002FREADME.md.",{"title":120,"path":121,"stem":122,"description":105},"[`\\Shef\\Options\\Tests`] Тестирование","\u002Fmodules\u002Foptions\u002Ftests","3.modules\u002F1.options\u002F7.tests",{"title":124,"path":125,"stem":126,"description":105},"[`\\Shef\\Options\\TraitList`] Набор трейтов","\u002Fmodules\u002Foptions\u002Ftraitlist","3.modules\u002F1.options\u002F8.traitlist",{"title":128,"path":129,"stem":130,"description":105},"Правила для ИИ-агентов в этом репозитории","\u002Fmodules\u002Foptions\u002Fagent-rules","3.modules\u002F1.options\u002F9.agent-rules",{"title":132,"description":6,"path":133,"stem":134,"children":135},"shef.problems","\u002Fmodules\u002Fproblems","3.modules\u002F2.problems\u002Findex",[136,138,143,147,152,157,161,166,169,172,175],{"title":132,"path":133,"stem":134,"description":137},"логи, журнал событий, учёт проблем",{"title":139,"path":140,"stem":141,"description":142},"[`\\Shef\\Problems\\Integration`] События и меню","\u002Fmodules\u002Fproblems\u002Fevents","3.modules\u002F2.problems\u002F1.events","Что модуль регистрирует в ядре при установке. Список — в .settings.php, ключ\ninstallEvents; что каждый обработчик существует, сверяет\ntests\u002Fsettings_test.php.",{"title":144,"path":145,"stem":146,"description":105},"Безопасность логов","\u002Fmodules\u002Fproblems\u002Fsecurity","3.modules\u002F2.problems\u002F10.security",{"title":148,"path":149,"stem":150,"description":151},"Быстрая отладка: `_pr`, `_log`, `_log1`","\u002Fmodules\u002Fproblems\u002Fdeffunctions","3.modules\u002F2.problems\u002F2.deffunctions","Функции объявляет def-functions.php, подключается он из include.php.",{"title":153,"path":154,"stem":155,"description":156},"Уровни логирования","\u002Fmodules\u002Fproblems\u002Floglevel","3.modules\u002F2.problems\u002F3.loglevel","Уровни — стандарт PSR-3, в Monolog это \\Monolog\\Level. Ниже — когда какой брать.",{"title":158,"path":159,"stem":160,"description":105},"[`\\Shef\\Problems\\Integration\\Monolog`] Monolog","\u002Fmodules\u002Fproblems\u002Fmonolog","3.modules\u002F2.problems\u002F4.monolog",{"title":162,"path":163,"stem":164,"description":165},"Ротация логов","\u002Fmodules\u002Fproblems\u002Flogrotate","3.modules\u002F2.problems\u002F5.logrotate","Логи модуля лежат в каталоге логов — по умолчанию на уровень выше корня сайта,\nдля BitrixVM \u002Fhome\u002Fbitrix\u002Fsh_log\u002F*.log, — и сами не чистятся. Ротацию делает\nlogrotate — системная утилита, а не Monolog: Monolog тоже умеет\n(RotatingFileHandler), но тогда за файлами следит каждый PHP-процесс, а не\nодна служба.",{"title":128,"path":167,"stem":168,"description":105},"\u002Fmodules\u002Fproblems\u002Fagent-rules","3.modules\u002F2.problems\u002F6.agent-rules",{"title":82,"path":170,"stem":171,"description":85},"\u002Fmodules\u002Fproblems\u002Fbuild-and-install","3.modules\u002F2.problems\u002F7.build-and-install",{"title":87,"path":173,"stem":174,"description":90},"\u002Fmodules\u002Fproblems\u002Fmodule-structure","3.modules\u002F2.problems\u002F8.module-structure",{"title":92,"path":176,"stem":177,"description":178},"\u002Fmodules\u002Fproblems\u002Fportal-check","3.modules\u002F2.problems\u002F9.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, меню,\nраскладка файлов, журнал событий, поведение при обновлении. Проверять это\nприходится руками — и лучше по списку, потому что забытый шаг находит не\nразработчик, а клиент.",{"title":180,"description":6,"path":181,"stem":182,"children":183},"shef.insync","\u002Fmodules\u002Finsync","3.modules\u002F3.insync\u002Findex",[184,186,191,194,198,203,208,213,218,222,227,232,235],{"title":180,"path":181,"stem":182,"description":185},"агенты, импорт, API-клиенты, модели",{"title":187,"path":188,"stem":189,"description":190},"[`\\Shef\\InSync\\Agents`] Агенты","\u002Fmodules\u002Finsync\u002Fagents","3.modules\u002F3.insync\u002F1.agents","Агент импорта — наследник \\Shef\\InSync\\Agents\\AAgent. Описание агента для\nb_agent — \\Shef\\InSync\\Agents\\Entity, установку и управление берёт на себя\n\\Shef\\InSync\\Agents\\Manager.",{"title":87,"path":192,"stem":193,"description":90},"\u002Fmodules\u002Finsync\u002Fmodule-structure","3.modules\u002F3.insync\u002F10.module-structure",{"title":92,"path":195,"stem":196,"description":197},"\u002Fmodules\u002Finsync\u002Fportal-check","3.modules\u002F3.insync\u002F11.portal-check","Всё, что ниже рантайма Битрикса, тестами не закрыть: установка, права, левое\nменю, раскладка компонентов, агенты, таблица импорта, поведение при\nобновлении. Проверять это приходится руками — и лучше по списку, потому что\nзабытый шаг находит не разработчик, а клиент.",{"title":199,"path":200,"stem":201,"description":202},"Безопасность","\u002Fmodules\u002Finsync\u002Fsecurity","3.modules\u002F3.insync\u002F12.security","Модуль даёт другим модулям заготовки для синхронизаций, и самые опасные места\nу него общие с ними: кто может запускать агенты и импорт, что ложится в каталоги\nимпорта, что уходит в SQL и в лог. Ниже — что держит модуль и что остаётся\nпроекту.",{"title":204,"path":205,"stem":206,"description":207},"[`\\Shef\\InSync\\Sync`] Импорт","\u002Fmodules\u002Finsync\u002Fimport","3.modules\u002F3.insync\u002F2.import","Импорт идёт в два шага через таблицу импорта \\Shef\\InSync\\Sync\\Model\\SyncTable\n(shef_insync_model):",{"title":209,"path":210,"stem":211,"description":212},"[`\\Shef\\InSync\\Api`] API","\u002Fmodules\u002Finsync\u002Fapi","3.modules\u002F3.insync\u002F3.api","Обращение к внешнему API по HTTP — наследник \\Shef\\InSync\\Api\\AConnector.",{"title":214,"path":215,"stem":216,"description":217},"[`\\Shef\\InSync\\TraitList\\Xml`] Парсинг XML","\u002Fmodules\u002Finsync\u002Fxml","3.modules\u002F3.insync\u002F4.xml","Разбор XML сделан через SbWereWolf\u002Fxml-navigator\n(статья на Хабре): XMLReader идёт по\nдокументу потоком, а каждый элемент с нужным тегом HierarchyComposer\nпревращает в массив — n имя, v значение, a атрибуты, s вложенные\nэлементы.",{"title":219,"path":220,"stem":221,"description":105},"Компоненты","\u002Fmodules\u002Finsync\u002Fcomponents","3.modules\u002F3.insync\u002F5.components",{"title":223,"path":224,"stem":225,"description":226},"Страницы","\u002Fmodules\u002Finsync\u002Fpage","3.modules\u002F3.insync\u002F6.page","Страницы модуля — в левом меню, штатным разделом intranet\n(Bitrix\\Intranet\\CustomSection): раздел «SH Импорт», код shinsync.\nВерхней панели и shef.uiclear больше нет.",{"title":228,"path":229,"stem":230,"description":231},"[`\\Shef\\InSync\\Main\\Options`] Опции настроек модуля","\u002Fmodules\u002Finsync\u002Foptions","3.modules\u002F3.insync\u002F7.options","Опции для страницы настроек модуля импорта (на ShOptionsConfig из\nshef.options): добавьте их во вкладку своего options_conf.php.",{"title":128,"path":233,"stem":234,"description":105},"\u002Fmodules\u002Finsync\u002Fagent-rules","3.modules\u002F3.insync\u002F8.agent-rules",{"title":82,"path":236,"stem":237,"description":85},"\u002Fmodules\u002Finsync\u002Fbuild-and-install","3.modules\u002F3.insync\u002F9.build-and-install",{"id":239,"title":162,"body":240,"description":165,"extension":591,"meta":592,"navigation":593,"path":163,"rawbody":594,"seo":595,"stem":164,"__hash__":596},"docs\u002F3.modules\u002F2.problems\u002F5.logrotate.md",{"type":241,"value":242,"toc":583},"minimark",[243,260,279,282,350,353,368,384,389,407,411,456,460,471,504,511,515,531,537,541,555,567,579],[244,245,246,247,251,252,255,256,259],"p",{},"Логи модуля лежат в каталоге логов — по умолчанию на уровень выше корня сайта,\nдля BitrixVM ",[248,249,250],"code",{},"\u002Fhome\u002Fbitrix\u002Fsh_log\u002F*.log",", — и сами не чистятся. Ротацию делает\n",[248,253,254],{},"logrotate"," — системная утилита, а не Monolog: Monolog тоже умеет\n(",[248,257,258],{},"RotatingFileHandler","), но тогда за файлами следит каждый PHP-процесс, а не\nодна служба.",[244,261,262,263,270,271,274,275,278],{},"Пример настроек — ",[264,265,269],"a",{"href":266,"rel":267},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Fproblems\u002Fblob\u002Fmain\u002Fdocs\u002Flogrotate\u002Flogrotate-b24-shef-problems",[268],"nofollow","logrotate\u002Flogrotate-b24-shef-problems",".\nВ модуль он не входит: это файл для сервера, а не для портала. Пути в нём — для\nокружения BitrixVM (",[248,272,273],{},"\u002Fhome\u002Fbitrix\u002Fsh_log","); если корень сайта другой или каталог\nзадан в настройках проекта — поправьте. До 2.0.0 пути вели в\n",[248,276,277],{},"\u002Fhome\u002Fbitrix\u002Fwww\u002Flocal\u002Fsh_log"," — обновляясь с 1.x, замените их.",[244,280,281],{},"Два блока с разным сроком хранения:",[283,284,285,301],"table",{},[286,287,288],"thead",{},[289,290,291,295,298],"tr",{},[292,293,294],"th",{},"файлы",[292,296,297],{},"хранится",[292,299,300],{},"зачем",[302,303,304,331],"tbody",{},[289,305,306,325,328],{},[307,308,309,312,313,312,316,312,319,312,322],"td",{},[248,310,311],{},"log",", ",[248,314,315],{},"log1",[248,317,318],{},"deprecations",[248,320,321],{},"log-custom",[248,323,324],{},"log1-custom",[307,326,327],{},"2 дня",[307,329,330],{},"отладка, нужна «здесь и сейчас»",[289,332,333,344,347],{},[307,334,335,312,338,312,341],{},[248,336,337],{},"mailer",[248,339,340],{},"exceptions",[248,342,343],{},"sh_problems_*",[307,345,346],{},"10 дней",[307,348,349],{},"проблемы, их разбирают позже",[244,351,352],{},"Ротация — ежедневно или при размере от 5 МБ, со сжатием.",[244,354,355,359,360,363,364,367],{},[356,357,358],"strong",{},"Без logrotate диск тоже не забьётся:"," отладочный лог и файлы проблем пишет\n",[248,361,362],{},"CappedStreamHandler"," — перерос 20 МБ, файл откладывается в ",[248,365,366],{},"\u003Cимя>.1"," и\nначинается новый. logrotate нужен для сжатия и срока хранения, а не как\nединственная защита.",[244,369,370,376,377,380,381,383],{},[356,371,372,375],{},[248,373,374],{},"copytruncate"," не нужен."," Его добавляли, пока Monolog после ротации\nпродолжал писать в переименованный файл. С Monolog 3.10 ",[248,378,379],{},"StreamHandler"," сам\nпереоткрывает файл, когда у пути сменился inode, а ",[248,382,374],{}," теряет\nстроки, записанные между копированием и обрезкой.",[385,386,388],"h2",{"id":387},"документация","Документация",[390,391,392,400],"ul",{},[393,394,395],"li",{},[264,396,399],{"href":397,"rel":398},"https:\u002F\u002F1cloud.ru\u002Fhelp\u002Flinux\u002Fupravlenie-logami-s-pomoshch'yu-logrotate-na-ubuntu-16-04",[268],"Logrotate, по-русски",[393,401,402],{},[264,403,406],{"href":404,"rel":405},"https:\u002F\u002Fwww.opennet.ru\u002Fman.shtml?topic=logrotate&category=8&russian=0",[268],"man logrotate",[385,408,410],{"id":409},"установка","Установка",[412,413,417],"pre",{"className":414,"code":415,"language":416,"meta":105,"style":105},"language-shell shiki shiki-themes material-theme-lighter github-light github-dark","sudo yum install logrotate -y      # или apt install logrotate\nsudo logrotate --version\n","shell",[248,418,419,446],{"__ignoreMap":105},[420,421,424,428,432,435,438,442],"span",{"class":422,"line":423},"line",1,[420,425,427],{"class":426},"sbgvK","sudo",[420,429,431],{"class":430},"s_sjI"," yum",[420,433,434],{"class":430}," install",[420,436,437],{"class":430}," logrotate",[420,439,441],{"class":440},"stzsN"," -y",[420,443,445],{"class":444},"sutJx","      # или apt install logrotate\n",[420,447,449,451,453],{"class":422,"line":448},2,[420,450,427],{"class":426},[420,452,437],{"class":430},[420,454,455],{"class":440}," --version\n",[385,457,459],{"id":458},"настройки","Настройки",[244,461,462,463,466,467,470],{},"Скопировать пример в ",[248,464,465],{},"\u002Fetc\u002Flogrotate.d\u002F",", поправить пути под свой корень сайта,\nвладелец — ",[248,468,469],{},"root",":",[412,472,474],{"className":414,"code":473,"language":416,"meta":105,"style":105},"sudo cp -i logrotate-b24-shef-problems \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\nsudo chown root:root \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n",[248,475,476,492],{"__ignoreMap":105},[420,477,478,480,483,486,489],{"class":422,"line":423},[420,479,427],{"class":426},[420,481,482],{"class":430}," cp",[420,484,485],{"class":440}," -i",[420,487,488],{"class":430}," logrotate-b24-shef-problems",[420,490,491],{"class":430}," \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n",[420,493,494,496,499,502],{"class":422,"line":448},[420,495,427],{"class":426},[420,497,498],{"class":430}," chown",[420,500,501],{"class":430}," root:root",[420,503,491],{"class":430},[244,505,506,507,510],{},"Файл берётся из репозитория, из ",[248,508,509],{},"docs\u002Flogrotate\u002F",": с 2.0.0 он не лежит в\nкаталоге модуля на портале.",[385,512,514],{"id":513},"проверка","Проверка",[412,516,518],{"className":414,"code":517,"language":416,"meta":105,"style":105},"sudo logrotate -d \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n",[248,519,520],{"__ignoreMap":105},[420,521,522,524,526,529],{"class":422,"line":423},[420,523,427],{"class":426},[420,525,437],{"class":430},[420,527,528],{"class":440}," -d",[420,530,491],{"class":430},[244,532,533,536],{},[248,534,535],{},"-d"," — сухой прогон: печатает, что сделал бы, и ничего не трогает.",[385,538,540],{"id":539},"удалить","Удалить",[412,542,544],{"className":414,"code":543,"language":416,"meta":105,"style":105},"sudo rm \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n",[248,545,546],{"__ignoreMap":105},[420,547,548,550,553],{"class":422,"line":423},[420,549,427],{"class":426},[420,551,552],{"class":430}," rm",[420,554,491],{"class":430},[244,556,557,560,561,560,564],{},[264,558,559],{"href":159},"← Monolog"," | ",[264,562,563],{"href":133},"↑ Содержание",[264,565,566],{"href":145},"Безопасность логов →",[568,569,570],"note",{},[244,571,572,573,578],{},"Источник: ",[264,574,577],{"href":575,"rel":576},"https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Fproblems\u002Fblob\u002Fmain\u002Fdocs\u002F5_logrotate.md",[268],"problems\u002Fdocs\u002F5_logrotate.md"," — правки туда, сайт пересобирается сам.",[580,581,582],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":105,"searchDepth":584,"depth":584,"links":585},3,[586,587,588,589,590],{"id":387,"depth":448,"text":388},{"id":409,"depth":448,"text":410},{"id":458,"depth":448,"text":459},{"id":513,"depth":448,"text":514},{"id":539,"depth":448,"text":540},"md",{},true,"---\ntitle: \"Ротация логов\"\n---\n\nЛоги модуля лежат в каталоге логов — по умолчанию на уровень выше корня сайта,\nдля BitrixVM `\u002Fhome\u002Fbitrix\u002Fsh_log\u002F*.log`, — и сами не чистятся. Ротацию делает\n`logrotate` — системная утилита, а не Monolog: Monolog тоже умеет\n(`RotatingFileHandler`), но тогда за файлами следит каждый PHP-процесс, а не\nодна служба.\n\nПример настроек — [logrotate\u002Flogrotate-b24-shef-problems](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Fproblems\u002Fblob\u002Fmain\u002Fdocs\u002Flogrotate\u002Flogrotate-b24-shef-problems).\nВ модуль он не входит: это файл для сервера, а не для портала. Пути в нём — для\nокружения BitrixVM (`\u002Fhome\u002Fbitrix\u002Fsh_log`); если корень сайта другой или каталог\nзадан в настройках проекта — поправьте. До 2.0.0 пути вели в\n`\u002Fhome\u002Fbitrix\u002Fwww\u002Flocal\u002Fsh_log` — обновляясь с 1.x, замените их.\n\nДва блока с разным сроком хранения:\n\n| файлы | хранится | зачем |\n|---|---|---|\n| `log`, `log1`, `deprecations`, `log-custom`, `log1-custom` | 2 дня | отладка, нужна «здесь и сейчас» |\n| `mailer`, `exceptions`, `sh_problems_*` | 10 дней | проблемы, их разбирают позже |\n\nРотация — ежедневно или при размере от 5 МБ, со сжатием.\n\n**Без logrotate диск тоже не забьётся:** отладочный лог и файлы проблем пишет\n`CappedStreamHandler` — перерос 20 МБ, файл откладывается в `\u003Cимя>.1` и\nначинается новый. logrotate нужен для сжатия и срока хранения, а не как\nединственная защита.\n\n**`copytruncate` не нужен.** Его добавляли, пока Monolog после ротации\nпродолжал писать в переименованный файл. С Monolog 3.10 `StreamHandler` сам\nпереоткрывает файл, когда у пути сменился inode, а `copytruncate` теряет\nстроки, записанные между копированием и обрезкой.\n\n## Документация\n\n* [Logrotate, по-русски](https:\u002F\u002F1cloud.ru\u002Fhelp\u002Flinux\u002Fupravlenie-logami-s-pomoshch'yu-logrotate-na-ubuntu-16-04)\n* [man logrotate](https:\u002F\u002Fwww.opennet.ru\u002Fman.shtml?topic=logrotate&category=8&russian=0)\n\n## Установка\n\n```shell\nsudo yum install logrotate -y      # или apt install logrotate\nsudo logrotate --version\n```\n\n## Настройки\n\nСкопировать пример в `\u002Fetc\u002Flogrotate.d\u002F`, поправить пути под свой корень сайта,\nвладелец — `root`:\n\n```shell\nsudo cp -i logrotate-b24-shef-problems \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\nsudo chown root:root \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n```\n\nФайл берётся из репозитория, из `docs\u002Flogrotate\u002F`: с 2.0.0 он не лежит в\nкаталоге модуля на портале.\n\n## Проверка\n\n```shell\nsudo logrotate -d \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n```\n\n`-d` — сухой прогон: печатает, что сделал бы, и ничего не трогает.\n\n## Удалить\n\n```shell\nsudo rm \u002Fetc\u002Flogrotate.d\u002Flogrotate-b24-shef-problems\n```\n\n[← Monolog](\u002Fmodules\u002Fproblems\u002Fmonolog) | [↑ Содержание](\u002Fmodules\u002Fproblems) | [Безопасность логов →](\u002Fmodules\u002Fproblems\u002Fsecurity)\n\n::note\nИсточник: [problems\u002Fdocs\u002F5_logrotate.md](https:\u002F\u002Fgithub.com\u002Fbx-shef\u002Fproblems\u002Fblob\u002Fmain\u002Fdocs\u002F5_logrotate.md) — правки туда, сайт пересобирается сам.\n::\n\n",{"title":162,"description":165},"2P34H3epWmCuez9Dsl3tiOpo7F49jC5t1RwvxLeVAA0",[598,599],{"title":158,"path":159,"stem":160,"description":105,"children":-1},{"title":128,"path":167,"stem":168,"description":105,"children":-1},1790857270246]