Sign in Join
Wiki copytemporary

LazLogger/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Обзор
22
33Модуль **LazLogger** поставляется с Lazarus и обеспечивает ведение журнала в файл.
44
55## Использование
66
77### Добавление поддержки логирования в ваш исходный код
88
99Просто подключив модуль **lazlogger**, вы сможете использовать следующее:
1010
1111- **DebugLn:** который работает примерно так же, как WriteLn.
1212- **DebugLnEnter/DebugLnExit:** так же, как debugln, но с отступом увеличить/уменьшить.
1313- **DbgOut:** который работает примерно так же, как Write.
1414
1515Все они могут быть вызваны с помощью:
1616
1717- Одной строки или списка (до 15) строк: DebugLn('Foo'); DbgOut('a','b');
1818- Массива констант: DebugLn(\['Foo=', 1, ' Bar=', anInteger\]);
1919- Тех же аргументов, что и Format(). String + array of const: DbgOut('a %d',\[1\]);
2020
2121Также есть множество функций **dbgs**, которые преобразуют общие типы в строку. Например, dbgs(aRect) преобразует переменную типа TRect в строку.
2222
2323#### Активация/Деактивация LazLogger при помощи использования правильного модуля
2424
2525LazLogger предоставляет 3 модуля для использования в разделе "uses"
2626
2727LazLogger
2828Используйте этот модуль только в вашей основной программе. Использование этих модулей активирует функционирование LazLogger.
2929
3030LazLoggerBase
31-Используйте этот модуль, когда вы хотите использовать debugln. То, что делает LazLoggerBase, зависит от того, используется ли модуль LazLogger в каком-либо другом модуле вашего приложения. Если модуль LazLogger <u>не используется</u>, LazLoggerBase установит «логгер черной дыры», который отбросит все сообщения журнала. Если LazLogger <u>используется</u> где-либо, то все устройства, использующие LazLoggerBase, будут записывать сообщения журнала, как описано в разделе «Вывод логирования»
31+Используйте этот модуль, когда вы хотите использовать debugln. То, что делает LazLoggerBase, зависит от того, используется ли модуль LazLogger в каком-либо другом модуле вашего приложения. Если модуль LazLogger не используется, LazLoggerBase установит «логгер черной дыры», который отбросит все сообщения журнала. Если LazLogger используется где-либо, то все устройства, использующие LazLoggerBase, будут записывать сообщения журнала, как описано в разделе «Вывод логирования»
3232
3333LazLoggerDummy
3434Этот модуль предоставляет вам фиктивные вызовы debugln (и всех других функций LazLagger). Это просто вызовы пустых методов. Это позволяет отключить все журналы в модуле, без необходимости удалять любой оператор debugln.
3535
3636### Вывод логирования
3737
3838#### Stdout (Стандартный вывод)
3939
4040В нормальных условиях выходные данные записываются в `stdout`. Выходные данные не записываются, если `stdout` закрыт - например, когда приложение имеет вид {\$AppType Gui} или скомпилировано с -WG в Windows (см. Projct Options/Compiler options(Параметры компилятора) /Config and Target (Настройка и целевая платформа)/Target-specific options(Частные параметры цели)).
4141
4242#### Файл
4343
4444Вывод отладки также может быть записан в файл. Код инициализации модуля логирования
4545
4646- проверяет параметры командной строки вашей программы на **--debug-log=\<file\>** (в Lazarus: Run(Запуск) / Run Parameters(Параметры запуска) / Command line parameters(Параметры командной строки) - на вкладка "Локальные"). При нахождении этого параметра любые последующие выходные данные отладки отправляются в \<file\>.
4747
4848
4949Имя параметра можно изменить с помощью **DebugLogger.ParamForLogFileName:'--debug-log';** Это свойство существует, только если используется модуль LazLogger. (LazLoggerBase не определяет это свойство).
5050
5151- Если параметр командной строки '--debug-log' не задан, он затем проверяет, существует ли переменная среды операционной системы xxx_debuglog, где xxx - имя файла программы без расширения. Например, для Lazarus это будет lazarus_debuglog. Если такая переменная среды существует, она использует файл, указанный в этой переменной среды, в качестве файла для получения отладочной информации.
5252
5353Пример: если вы cделаете:
5454
5555```dos
5656set lazarus_debuglog=c:\lazarus\debug.txt
5757```
5858
5959и запустите Lazarus, вывод данных отладки будет записан в c:\lazarus\debug.txt.
6060
6161#### Сервер отладки
6262
6363Недоступно в LazLogger; см. [[DebugServer]].
6464
6565### Группы журналов
6666
6767Вы можете добавить группы журналов.
6868
6969``` pascal
7070var MY_LOG_GROUP: PLazLoggerLogGroup;
7171
7272initialization
7373 MY_LOG_GROUP := DebugLogger.FindOrRegisterLogGroup('fancy_name_for_mylog' {$IFDEF MY_LOG_GROUP_ON_BY_DEFAULT} , True {$ENDIF} );
7474```
7575
7676В вашем коде используйте
7777
7878``` pascal
7979debugln(MY_LOG_GROUP, 'log this text');
8080debugln(MY_LOG_GROUP, ['a=',a,' b=',b]); // a, b должны быть базовыми типами: integer, byte, ansistring. Смотрите типы, доступные для "array of const"
8181```
8282
8383и чтобы включить его, вызовите ваше приложение с
8484
8585```dos
8686--debug-enable=fancy_name_for_mylog
8787```
8888
8989--debug-enable= принимает список \[значений, разделенных\] запятой
9090
9191Уже активированную группу (DebugLogger.FindOrRegisterLogGroup('grpname', True)) можно отключить, указав имя группы со знаком минус.
9292
9393```dos
9494--debug-enable=-fancy_name_for_mylog
9595```
9696
9797Имя параметра может быть установлено через **DebugLogger.ParamForEnabledLogGroups='--debug-enable';**
9898
9999## Документация
100100
101101Для получения дополнительной информации см. сам модуль и документацию LCL.
102102
103103Используя LazLogger/LazLoggerBase, ваш код может получить доступ к экземпляру DebugLogger. Это предлагает некоторые свойства для точной настройки логирования.
104104
105105Вы также можете написать свой собственный класс логгера и использовать его с LazLogger/Base.
106106
107107## Многопоточность
108108
109109- **DebugLn** потокобезопасен, начиная с Lazarus 2.0.
110110
111111
112112В более ранних версиях этого текста было указано «начиная с 1.0», но было найдено и исправлено еще одно условие для 2.0.
113113
114114- Вызовы **DbgOut**, **DebugLnEnter**, **DebugLnExit** могут быть сделаны из потоков, но не всегда могут правильно форматировать/делать отступ в выходных данных.
115115
116-- Создание/настройка/уничтожение/конфигурирование логгера - это <b>НЕпотокобезопасные</b> операции и должны быть сделаны до запуска потоков.
116+- Создание/настройка/уничтожение/конфигурирование логгера - это НЕпотокобезопасные операции и должны быть сделаны до запуска потоков.
117117
118118
119119Создание обычно выполняется автоматически во время инициализации устройства.
120120
121121Но любые свойства (например, ParamForLogFileName) должны быть установлены до доступа к логгеру из потоков.
122122
123123- Обратный вызов для таких событий, как OnDebugLn, производится в каждом потоке. Код в обратном вызове должен быть сам по себе потокобезопасным.
124124
125125
126-Изменение свойства является <b>НЕпотокобезопасным</b>
126+Изменение свойства является НЕпотокобезопасным
127127
128128## См.также
129129
130130- [[doc:fcl/eventlog/teventlog.html|TEventLog documentation]] Встроенная поддержка входа в FPC/Lazarus
131131- [[DebugServer]] Позволяет отправлять записи журнала наблюдателю через IPC
132132- [[MultiLog]]
133133- [[log4delphi]]
134134- Пакет IdeLazLogger, который добавляет в IDE диалог, позволяющий включать/отключать группы журналов, используемые в самой IDE.
135135
136136---
137137*From the Free Pascal wiki, page "LazLogger/ru", as it stood on 2024-04-14 after a change by N7800, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
138138Category: Debugging/ru
139139Category: LCL/ru
140140Category: Lazarus/ru
141141Category: Logging
142142Category: Russian

Back to history