Один лог-файл на плагин с автоматической ротацией по дням.log.write(msg) пишет строку в текстовый лог плагина — свой файл на каждый
календарный день, без настройки каналов и без ручной ротации.
По умолчанию (global не задан или false) путь —
plugin.data_dir()/logs/<YYYY-MM-DD>.log: дата берётся из системного
времени сервера на момент вызова, каждый файл открывается на дозапись,
каждая строка со своей меткой времени и уровнем:
[2026-08-18 21:07:03] [INFO] player1 killed player2[2026-08-18 21:08:11] [ERROR] не удалось подключиться к API
С global = true файл лежит в addons/lua/logs/<plugin_id>-<YYYY-MM-DD>.log
— в том же каталоге, куда пишет собственная диагностика самого модуля
(netwatch.log), но под именем плагина, чтобы логи разных плагинов не
сливались в одну кашу и не пересекались с внутренними файлами модуля.
Годится, когда лог нужен рядом с логами модуля — например, общий
модерационный журнал, который ведут сразу несколько плагинов — а не
спрятанным в приватном каталоге одного плагина.Файл — обычный текстовый файл в том же каталоге, что и file.* (для
плагинного лога), но file.list() его не покажет:
logs/ — отдельное хранилище.
Неизвестное значение level — ошибка Lua, а не тихая запись без метки:
опечатка в уровне ловится сразу, а не при попытке отфильтровать логи потом.
global = true не выйти читать через file.* — та песочница нарочно не
выходит за пределы каталога вызывающего плагина, а общий лог лежит выше
него. Читать такой файл можно только руками на диске.
Ротация — это только «новый файл на новый день». Старые файлы не удаляются
автоматически, ни через сколько-то дней, ни по объёму. Если нужна очистка —
плагин делает её сам через file.remove (или, если
нужен доступ к logs/ напрямую, через os), эта библиотека такого не
предлагает намеренно, чтобы не терять чужие логи молча.
log.write не дублирует сообщение в консоль. Для вывода, который должен
увидеть человек прямо сейчас, — обычный print. log — это тихая, durable
запись, а не альтернативная форма print.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"cs-lua","description":"Плагины для CS 1.6 на Lua вместо SourcePawn","colors":{"primary":"#b45309","light":"#f59e0b","dark":"#f59e0b"},"favicon":"https://mintcdn.com/cs-lua/4nz6nyrD_5HF1omW/favicon.svg?fit=max\u0026auto=format\u0026n=4nz6nyrD_5HF1omW\u0026q=85\u0026s=0c30c7ace5323904dec95fad5a12618f","styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cs-lua","hasAudioNarration":false,"actualSubdomain":"cs-lua","customDomains":[],"gitSource":{"type":"github","owner":"kotyarakryt","repo":"cs-lua","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a99652396830be73b3236c1","collectionId":"863c2317-eb88-4764-a474-a761c7d4f12b","liveDeploymentHistoryId":"6a99652396830be73b3236c1","schemaVersion":"v3"},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a99652396830be73b3236c1","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Справочник API","count":57},{"language":"default","tag":"hook","count":8},{"language":"default","tag":"players","count":8},{"language":"default","tag":"access","count":4},{"language":"default","tag":"db","count":4},{"language":"default","tag":"ents","count":3},{"language":"default","tag":"msg","count":3},{"language":"default","tag":"mysql","count":3},{"language":"default","tag":"store","count":3},{"language":"default","tag":"sv","count":3}],"searchSettings":{"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"link","url":"https://github.com/KotyaraKryt/cs-lua/issues"}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/log","slug":"/api/log","pageMetadata":{"title":"log","description":"Один лог-файл на плагин с автоматической ротацией по дням","href":"/api/log/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Один лог-файл на плагин с автоматической ротацией по дням\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`log`,children:`log`}),`\n`,_jsx(_components.p,{children:`Один лог-файл на плагин с автоматической ротацией по дням.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`log.write(msg)`}),` пишет строку в текстовый лог плагина — свой файл на каждый\nкалендарный день, без настройки каналов и без ручной ротации.`]}),`\n`,_jsx(Heading,{level:`2`,id:`write`,children:`log.write`}),`\n`,_jsx(_components.p,{children:`Пишет строку в лог плагина.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`lua`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`lua`,children:_jsxs(_components.code,{language:`lua`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`write`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`msg`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`opts`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`аргументы`,children:`Аргументы`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`#`}),_jsx(_components.th,{children:`имя`}),_jsx(_components.th,{children:`тип`}),_jsx(_components.th,{})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`1`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`msg`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`строка для записи в лог`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`opts`})}),_jsx(_components.td,{children:`table | nil`}),_jsx(_components.td,{children:`см. Опции ниже`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`возвращает`,children:`Возвращает`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`тип`}),_jsx(_components.th,{})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),` при успехе, `,_jsx(_components.code,{children:`false`}),` при неудаче (нет контекста плагина, не создался`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`каталог, диск полон и т.п.)`}),_jsx(_components.td,{})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`write-опции`,children:`Опции`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`поле`}),_jsx(_components.th,{children:`тип`}),_jsx(_components.th,{})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`global`})}),_jsx(_components.td,{children:`boolean`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`false`}),` по умолчанию; `,_jsx(_components.code,{children:`true`}),` — писать в общий лог модуля, а не в свой`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`level`})}),_jsx(_components.td,{children:`string`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"info\"`}),` по умолчанию; `,_jsx(_components.code,{children:`\"info\"`}),`, `,_jsx(_components.code,{children:`\"warning\"`}),`, `,_jsx(_components.code,{children:`\"error\"`}),`, `,_jsx(_components.code,{children:`\"debug\"`}),`, `,_jsx(_components.code,{children:`\"success\"`})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`пример`,children:`Пример`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`lua`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`lua`,children:_jsxs(_components.code,{language:`lua`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hook`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`add`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"player:death\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"myplugin.kills_log\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`e`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`write`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`((`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"%s killed %s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`format`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` e`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`attacker`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` e`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`attacker`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`or`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"world\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`e`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:`player`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`end`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`write`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"не удалось подключиться к API\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`level`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"error\" `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`write`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"подозрительная активность\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`global`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`level`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"warning\" `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`log.write`}),` рассчитан на то, чтобы дёргать его где угодно не проверяя\nрезультат — `,_jsx(_components.code,{children:`false`}),` возвращается редко и не как повод остановить логику\nплагина.`]}),`\n`,_jsx(Heading,{level:`2`,id:`файл-и-формат`,children:`Файл и формат`}),`\n`,_jsxs(_components.p,{children:[`По умолчанию (`,_jsx(_components.code,{children:`global`}),` не задан или `,_jsx(_components.code,{children:`false`}),`) путь —\n`,_jsx(_components.code,{children:`plugin.data_dir()/logs/\u003cYYYY-MM-DD>.log`}),`: дата берётся из системного\nвремени сервера на момент вызова, каждый файл открывается на дозапись,\nкаждая строка со своей меткой времени и уровнем:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[2026-08-18 21:07:03] [INFO] player1 killed player2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[2026-08-18 21:08:11] [ERROR] не удалось подключиться к API`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`С `,_jsx(_components.code,{children:`global = true`}),` файл лежит в `,_jsx(_components.code,{children:`addons/lua/logs/\u003cplugin_id>-\u003cYYYY-MM-DD>.log`}),`\n— в том же каталоге, куда пишет собственная диагностика самого модуля\n(`,_jsx(_components.code,{children:`netwatch.log`}),`), но под именем плагина, чтобы логи разных плагинов не\nсливались в одну кашу и не пересекались с внутренними файлами модуля.\nГодится, когда лог нужен рядом с логами модуля — например, общий\nмодерационный журнал, который ведут сразу несколько плагинов — а не\nспрятанным в приватном каталоге одного плагина.`]}),`\n`,_jsxs(_components.p,{children:[`Файл — обычный текстовый файл в том же каталоге, что и `,_jsx(_components.code,{children:`file.*`}),` (для\nплагинного лога), но `,_jsx(_components.a,{href:`/api/file#list`,children:`file.list()`}),` его не покажет:\n`,_jsx(_components.code,{children:`logs/`}),` — отдельное хранилище.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Неизвестное значение `,_jsx(_components.code,{children:`level`}),` — ошибка Lua, а не тихая запись без метки:\nопечатка в уровне ловится сразу, а не при попытке отфильтровать логи потом.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`global = true`}),` не выйти читать через `,_jsx(_components.code,{children:`file.*`}),` — та песочница нарочно не\nвыходит за пределы каталога вызывающего плагина, а общий лог лежит выше\nнего. Читать такой файл можно только руками на диске.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Ротация — это только «новый файл на новый день». Старые файлы не удаляются\nавтоматически, ни через сколько-то дней, ни по объёму. Если нужна очистка —\nплагин делает её сам через `,_jsx(_components.a,{href:`/api/file#remove`,children:`file.remove`}),` (или, если\nнужен доступ к `,_jsx(_components.code,{children:`logs/`}),` напрямую, через `,_jsx(_components.code,{children:`os`}),`), эта библиотека такого не\nпредлагает намеренно, чтобы не терять чужие логи молча.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`log.write`}),` не дублирует сообщение в консоль. Для вывода, который должен\nувидеть человек прямо сейчас, — обычный `,_jsx(_components.code,{children:`print`}),`. `,_jsx(_components.code,{children:`log`}),` — это тихая, durable\nзапись, а не альтернативная форма `,_jsx(_components.code,{children:`print`}),`.`]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"log","description":"Один лог-файл на плагин с автоматической ротацией по дням","href":"/api/log/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"log","slug":"log","depth":1,"children":[]},{"title":"log.write","slug":"write","depth":2,"children":[{"title":"Аргументы","slug":"аргументы","depth":3,"children":[]},{"title":"Возвращает","slug":"возвращает","depth":3,"children":[]},{"title":"Опции","slug":"write-опции","depth":3,"children":[]},{"title":"Пример","slug":"пример","depth":3,"children":[]}]},{"title":"Файл и формат","slug":"файл-и-формат","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cs-lua","siteName":"cs-lua","title":"log - cs-lua","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-20T06:46:53.203Z","originalFileLocation":"api/log/index.md"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Один лог-файл на плагин с автоматической ротацией по дням\">\u003cmeta data-mint-head name=\"application-name\" content=\"cs-lua\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"log - cs-lua\">\u003cmeta data-mint-head property=\"og:description\" content=\"Один лог-файл на плагин с автоматической ротацией по дням\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"cs-lua\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://cs-lua.mintlify.app/api/log\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cs-lua.mintlify.site/_mintlify/api/og/v2?division=log\u0026amp;title=log\u0026amp;description=%D0%9E%D0%B4%D0%B8%D0%BD+%D0%BB%D0%BE%D0%B3-%D1%84%D0%B0%D0%B9%D0%BB+%D0%BD%D0%B0+%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD+%D1%81+%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9+%D1%80%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B5%D0%B9+%D0%BF%D0%BE+%D0%B4%D0%BD%D1%8F%D0%BC\u0026amp;theme=b6c4e23cd1a333c2e21535c9\u0026amp;signature=f62df4b9311800918430295ce7029d20c7188aa13ea2caccc86bc391bc39dff8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"log - cs-lua\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Один лог-файл на плагин с автоматической ротацией по дням\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cs-lua.mintlify.site/_mintlify/api/og/v2?division=log\u0026amp;title=log\u0026amp;description=%D0%9E%D0%B4%D0%B8%D0%BD+%D0%BB%D0%BE%D0%B3-%D1%84%D0%B0%D0%B9%D0%BB+%D0%BD%D0%B0+%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD+%D1%81+%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9+%D1%80%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D0%B5%D0%B9+%D0%BF%D0%BE+%D0%B4%D0%BD%D1%8F%D0%BC\u0026amp;theme=b6c4e23cd1a333c2e21535c9\u0026amp;signature=f62df4b9311800918430295ce7029d20c7188aa13ea2caccc86bc391bc39dff8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cs-lua/I_ekpo-jh1KbG7rl/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"cs-lua\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#b45309\">\u003clink data-mint-head rel=\"canonical\" href=\"https://cs-lua.mintlify.app/api/log\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/log.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://cs-lua.mintlify.app/#organization\",\"name\":\"cs-lua\",\"url\":\"https://cs-lua.mintlify.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://cs-lua.mintlify.app#website\",\"name\":\"cs-lua\",\"url\":\"https://cs-lua.mintlify.app\",\"publisher\":{\"@id\":\"https://cs-lua.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://cs-lua.mintlify.app/api/log#webpage\",\"url\":\"https://cs-lua.mintlify.app/api/log\",\"name\":\"log\",\"description\":\"Один лог-файл на плагин с автоматической ротацией по дням\",\"dateModified\":\"2026-08-20T06:46:53.203Z\",\"isPartOf\":{\"@id\":\"https://cs-lua.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://cs-lua.mintlify.app/api/log#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://cs-lua.mintlify.app/api/log#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Справочник API\",\"item\":\"https://cs-lua.mintlify.app/api/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"log\",\"item\":\"https://cs-lua.mintlify.app/api/log/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"log\",\"item\":\"https://cs-lua.mintlify.app/api/log\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://cs-lua.mintlify.app/api/log#article\",\"headline\":\"log\",\"name\":\"log\",\"description\":\"Один лог-файл на плагин с автоматической ротацией по дням\",\"url\":\"https://cs-lua.mintlify.app/api/log\",\"mainEntityOfPage\":{\"@id\":\"https://cs-lua.mintlify.app/api/log#webpage\"},\"dateModified\":\"2026-08-20T06:46:53.203Z\",\"publisher\":{\"@id\":\"https://cs-lua.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://cs-lua.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"cs-lua\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"cs-lua","nav":{"global":null,"groups":[{"group":"Документация","pages":[{"title":null,"href":"/intro"},{"title":null,"href":"/install"},{"title":"Plugins","href":"/plugins"},{"title":null,"href":"/building"}]},{"group":"Справочник API","pages":[{"title":null,"href":"/api/index"},{"group":"hook","pages":[{"title":"hook","href":"/api/hook/index"},{"title":"hook — Пространство имён","href":"/api/hook/namespace"},{"title":"hook — Подключение","href":"/api/hook/connection"},{"title":"hook — Жизнь сервера","href":"/api/hook/lifecycle"},{"title":"hook — Геймплей","href":"/api/hook/gameplay"},{"title":"hook — Раунд и бомба","href":"/api/hook/round"},{"title":"hook — Магазин","href":"/api/hook/shop"},{"title":"hook — Движок и ReHLDS","href":"/api/hook/engine"}]},{"group":"msg","pages":[{"title":"msg","href":"/api/msg/index"},{"title":"msg — Отправка","href":"/api/msg/send"},{"title":"msg — Поля сообщения","href":"/api/msg/fields"}]},{"group":"cmd","pages":[{"title":"cmd","href":"/api/cmd/index"}]},{"group":"players","pages":[{"title":"players","href":"/api/players/index"},{"title":"players — Пространство имён","href":"/api/players/namespace"},{"title":"players — Идентификация","href":"/api/players/identity"},{"title":"players — Состояние","href":"/api/players/state"},{"title":"players — CS-состояние","href":"/api/players/cs-state"},{"title":"players — Сообщения","href":"/api/players/messages"},{"title":"players — Админские действия","href":"/api/players/admin"},{"title":"players — Права","href":"/api/players/access"}]},{"group":"timer","pages":[{"title":"timer","href":"/api/timer/index"},{"title":"timer — Анонимные","href":"/api/timer/anonymous"},{"title":"timer — Именованные","href":"/api/timer/named"}]},{"group":"ents","pages":[{"title":"ents","href":"/api/ents/index"},{"title":"ents — Пространство имён","href":"/api/ents/namespace"},{"title":"ents — Объект сущности","href":"/api/ents/entity"}]},{"group":"vec","pages":[{"title":"vec","href":"/api/vec/index"}]},{"group":"fx","pages":[{"title":"fx","href":"/api/fx/index"}]},{"group":"res","pages":[{"title":"res","href":"/api/res/index"}]},{"group":"sv","pages":[{"title":"sv","href":"/api/sv/index"},{"title":"sv — Сервер","href":"/api/sv/server"},{"title":"sv — Cvar","href":"/api/sv/cvar"}]},{"group":"db","pages":[{"title":"db","href":"/api/db/index"},{"title":"db — Открытие","href":"/api/db/open"},{"title":"db — Объект базы","href":"/api/db/database"},{"title":"db — Подготовленное выражение","href":"/api/db/statement"}]},{"group":"mysql","pages":[{"title":"mysql","href":"/api/mysql/index"},{"title":"mysql — Открытие","href":"/api/mysql/open"},{"title":"mysql — Объект соединения","href":"/api/mysql/connection"}]},{"group":"store","pages":[{"title":"store","href":"/api/store/index"},{"title":"store — Ключ-значение","href":"/api/store/kv"},{"title":"store — datafile","href":"/api/store/datafile"}]},{"group":"file","pages":[{"title":"file","description":"Сырое чтение и запись файлов в собственном каталоге плагина","href":"/api/file/index"}]},{"group":"log","pages":[{"title":"log","href":"/api/log/index"}]},{"group":"regex","pages":[{"title":"regex","description":"Настоящие регулярные выражения: match, find, replace","href":"/api/regex/index"}]},{"group":"http","pages":[{"title":"http","href":"/api/http/index"}]},{"group":"menu","pages":[{"title":"menu","href":"/api/menu/index"}]},{"group":"ui","pages":[{"title":"ui","href":"/api/ui/index"}]},{"group":"access","pages":[{"title":"access","href":"/api/access/index"},{"title":"access — Объявление","href":"/api/access/declare"},{"title":"access — Выдача","href":"/api/access/grant"},{"title":"access — Чтение","href":"/api/access/read"}]},{"group":"plugin","pages":[{"title":"plugin","href":"/api/plugin/index"}]},{"group":"export / import","pages":[{"title":"export / import","href":"/api/exports/index"}]},{"title":"Все вызовы","href":"/api/all"},{"title":null,"href":"/api/console"}]}]},"basePath":"","title":"log - cs-lua","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}