Difference between revisions of "LazLogger/ru"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{MenuTranslate|page=LazLogger}} __TOC__ == Обзор == Модуль '''LazLogger''' поставляется с Lazarus и обеспечивает ведение журн...")
 
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{MenuTranslate|page=LazLogger}}
+
{{LanguageBar}}
  
 
__TOC__
 
__TOC__
Line 7: Line 7:
 
== Использование ==
 
== Использование ==
 
=== Добавление поддержки логирования в ваш исходный код ===
 
=== Добавление поддержки логирования в ваш исходный код ===
(По историческим причинам некоторые части также доступны через LclProc (удалено, начиная с Lazarus 1.10); этот доступ может быть удален в будущем)
 
 
 
Просто подключив модуль '''lazlogger''', вы сможете использовать следующее:
 
Просто подключив модуль '''lazlogger''', вы сможете использовать следующее:
 
* '''DebugLn:''' который работает примерно так же, как WriteLn.
 
* '''DebugLn:''' который работает примерно так же, как WriteLn.
Line 15: Line 13:
  
 
Все они могут быть вызваны с помощью:
 
Все они могут быть вызваны с помощью:
* A single string, or list of (up to 15) strings: DebugLn('Foo'); DbgOut('a','b');
+
* Одной строки или списка (до 15) строк: DebugLn('Foo'); DbgOut('a','b');
* An array of const: DebugLn(['Foo=', 1, ' Bar=', anInteger]);
+
* Массива констант: DebugLn(['Foo=', 1, ' Bar=', anInteger]);
* Same arguments as Format(). String + array of const: DbgOut('a %d',[1]);
+
* Тех же аргументов, что и Format(). String + array of const: DbgOut('a %d',[1]);
  
Also there are tons of '''dbgs''' functions that converts common types to a string. For example dbgs(aRect) converts a variable of type TRect to a string.
+
Также есть множество функций '''dbgs''', которые преобразуют общие типы в строку. Например, dbgs(aRect) преобразует переменную типа TRect в строку.
  
==== Activate/Deactivate LazLogger by using the correct unit ====
+
==== Активация/Деактивация LazLogger при помощи использования правильного модуля====
  
LazLogger provides 3 units for your "uses" clause
+
LazLogger предоставляет 3 модуля для использования в разделе "uses"
  
;LazLogger: Use this unit in your main program only. Using this units will activate the functionality of LazLogger.
+
;LazLogger: Используйте этот модуль только в вашей основной программе. Использование этих модулей активирует функционирование LazLogger.
  
;LazLoggerBase: Use this unit, whenever you want to use debugln. What LazLoggerBase does depends on whether the unit LazLogger is used in any other unit of your application. If unit LazLogger is not used, the LazLoggerBase will install a "blackhole logger" that discards all log messages. If LazLogger is used anywhere, then all units using LazLoggerBase will write the log messages as described under "Logging Output"
+
;LazLoggerBase: Используйте этот модуль, когда вы хотите использовать debugln. То, что делает LazLoggerBase, зависит от того, используется ли модуль LazLogger в каком-либо другом модуле вашего приложения. Если модуль LazLogger <u>не используется</u>, LazLoggerBase установит «логгер черной дыры», который отбросит все сообщения журнала. Если LazLogger <u>используется</u> где-либо, то все устройства, использующие LazLoggerBase, будут записывать сообщения журнала, как описано в разделе «Вывод логирования»
  
;LazLoggerDummy: This unit provides you with dummy calls of debugln (and all other LazLagger functions). They are just calls to empty methods. This allows you to disable all logging in a unit, without the need to remove any debugln statement.
+
;LazLoggerDummy: Этот модуль предоставляет вам фиктивные вызовы debugln (и всех других функций LazLagger). Это просто вызовы пустых методов. Это позволяет отключить все журналы в модуле, без необходимости удалять любой оператор debugln.
  
=== Logging output ===
+
=== Вывод логирования ===
==== Stdout ====
+
==== Stdout (Стандартный вывод) ====
In normal circumstances, the output is written to <code>stdout</code>. No output is written if <code>stdout</code> is closed - for example when the application is {$AppType Gui}, or compiled with -WG on Windows (see Compiler options / Linking / Target OS specific options).
+
В нормальных условиях выходные данные записываются в <code>stdout</code>. Выходные данные не записываются, если <code>stdout</code> закрыт - например, когда приложение имеет вид {$AppType Gui} или скомпилировано с -WG в Windows (см. Projct Options/Compiler options(Параметры компилятора) /Config and Target (Настройка и целевая платформа)/Target-specific options(Частные параметры цели)).
  
==== File ====
+
==== Файл ====
Debug output can also be written to file. The initialization code of the logging unit
+
Вывод отладки также может быть записан в файл. Код инициализации модуля логирования
* checks your program's command line parameters for '''--debug-log=<file>''' (In Lazarus: Run / Run Parameters / Command line parameters). On finding this parameter, any subsequent debug output is sent to <file>.
+
* проверяет параметры командной строки вашей программы на '''--debug-log=<file>''' (в Lazarus: Run(Запуск) / Run Parameters(Параметры запуска) / Command line parameters(Параметры командной строки) - на вкладка "Локальные"). При нахождении этого параметра любые последующие выходные данные отладки отправляются в <file>.
:The param name can be changed with '''DebugLogger.ParamForLogFileName:='--debug-log';''' This property exists only if the unit LazLogger is used. (LazLoggerBase does not define this property)
+
:Имя параметра можно изменить с помощью '''DebugLogger.ParamForLogFileName:'--debug-log';''' Это свойство существует, только если используется модуль LazLogger. (LazLoggerBase не определяет это свойство).
  
* If no '--debug-log' command line parameter has been given, it next checks if an operating system environment variable xxx_debuglog exists, where xxx is the program file name without extension. E.g. for Lazarus this would be lazarus_debuglog. If such an environment variable exists, it uses the file specified in that environment variable as file to receive debug output.
+
* Если параметр командной строки '--debug-log' не задан, он затем проверяет, существует ли переменная среды операционной системы xxx_debuglog, где xxx - имя файла программы без расширения. Например, для Lazarus это будет lazarus_debuglog. Если такая переменная среды существует, она использует файл, указанный в этой переменной среды, в качестве файла для получения отладочной информации.
  
Example: if you do:
+
Пример: если вы cделаете:
<syntaxhighlight lang=dos>
+
<syntaxhighlight lang="dos">
 
set lazarus_debuglog=c:\lazarus\debug.txt
 
set lazarus_debuglog=c:\lazarus\debug.txt
 
</syntaxhighlight>
 
</syntaxhighlight>
and run Lazarus, debug output will be written to c:\lazarus\debug.txt.
+
и запустите Lazarus, вывод данных отладки будет записан в  c:\lazarus\debug.txt.
  
==== Debug server ====
+
==== Сервер отладки ====
Not available in LazLogger; see [[DebugServer]].
+
Недоступно в LazLogger; см. [[DebugServer]].
  
=== Log Groups ===
+
=== Группы журналов ===
You can add log groups.  
+
Вы можете добавить группы журналов.
  
<syntaxhighlight lang=pascal>
+
<syntaxhighlight lang="pascal">
 
var MY_LOG_GROUP: PLazLoggerLogGroup;  
 
var MY_LOG_GROUP: PLazLoggerLogGroup;  
  
Line 61: Line 59:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In your code use
+
В вашем коде используйте
 
<syntaxhighlight lang=pascal>
 
<syntaxhighlight lang=pascal>
 
debugln(MY_LOG_GROUP, 'log this text');
 
debugln(MY_LOG_GROUP, 'log this text');
debugln(MY_LOG_GROUP, ['a=',a,' b=',b]); // a,b must be basic types: integer, byte, ansistring. See types available for "array of const"
+
debugln(MY_LOG_GROUP, ['a=',a,' b=',b]); // a, b должны быть базовыми типами: integer, byte, ansistring. Смотрите типы, доступные для "array of const"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
and to enable it call your app with
+
и чтобы включить его, вызовите ваше приложение с
 
<syntaxhighlight lang=dos>
 
<syntaxhighlight lang=dos>
 
--debug-enable=fancy_name_for_mylog
 
--debug-enable=fancy_name_for_mylog
 
</syntaxhighlight>
 
</syntaxhighlight>
--debug-enable= takes a comma separated list
+
--debug-enable= принимает список [значений, разделенных] запятой
  
An already enabled group ( DebugLogger.FindOrRegisterLogGroup('grpname', True) ) can be disabled by specifying the group name with a minus.
+
Уже активированную группу (DebugLogger.FindOrRegisterLogGroup('grpname', True)) можно отключить, указав имя группы со знаком минус.
 
<syntaxhighlight lang=dos>
 
<syntaxhighlight lang=dos>
 
--debug-enable=-fancy_name_for_mylog
 
--debug-enable=-fancy_name_for_mylog
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The parameter name can be set via '''DebugLogger.ParamForEnabledLogGroups='--debug-enable';'''
+
Имя параметра может быть установлено через '''DebugLogger.ParamForEnabledLogGroups='--debug-enable';'''
  
== Documentation ==
+
== Документация ==
For more features, see the unit itself and the LCL documentation.
+
Для получения дополнительной информации см. сам модуль и документацию LCL.
  
Using LazLogger/LazLoggerBase your code can access the DebugLogger instance. This offers some properties to fine tune logging.
+
Используя LazLogger/LazLoggerBase, ваш код может получить доступ к экземпляру DebugLogger. Это предлагает некоторые свойства для точной настройки логирования.
  
You can also write your own logger class and use it with LazLogger/Base.
+
Вы также можете написать свой собственный класс логгера и использовать его с LazLogger/Base.
  
== Multithreading ==
+
== Многопоточность ==
  
* '''DebugLn''' is thread safe, since Lazarus 2.0.  
+
* '''DebugLn''' потокобезопасен, начиная с Lazarus 2.0.  
: Earlier versions of this text stated "since 1.0", but a further race condition was found and fixed for 2.0.
+
: В более ранних версиях этого текста было указано «начиная с 1., но было найдено и исправлено еще одно условие для 2.0.
  
* Calls to '''DbgOut''', '''DebugLnEnter''', '''DebugLnExit''' can be made from threads, but may not always format/indent the output correctly.
+
* Вызовы '''DbgOut''', '''DebugLnEnter''', '''DebugLnExit''' могут быть сделаны из потоков, но не всегда могут правильно форматировать/делать отступ в выходных данных.
  
* The creation/setup/destruction/configuration of the logger is [[not]] thread-save, and should be done before threads are started.
+
* Создание/настройка/уничтожение/конфигурирование логгера - это <b>НЕпотокобезопасные</b> операции и должны быть сделаны до запуска потоков.
: Creation is usually done automatically during unit initialization.
+
: Создание обычно выполняется автоматически во время инициализации устройства.
: But any properties (eg ParamForLogFileName) should be set before accessing the logger from threads.
+
: Но любые свойства (например, ParamForLogFileName) должны быть установлены до доступа к логгеру из потоков.
  
* Callback to events like OnDebugLn are made in each thread. The code in the callback must be thread save by itself.
+
* Обратный вызов для таких событий, как OnDebugLn, производится в каждом потоке. Код в обратном вызове должен быть сам по себе потокобезопасным.
: Changing the property is NOT thread-save
+
: Изменение свойства является <b>НЕпотокобезопасным</b>
  
== See also ==
+
== См.также ==
* [[doc:fcl/eventlog/teventlog.html|TEventLog documentation]] Built in support for logging in FPC/Lazarus
+
* [[doc:fcl/eventlog/teventlog.html|TEventLog documentation]] Встроенная поддержка входа в FPC/Lazarus
* [[DebugServer]] Allows sending log entries to a viewer via IPC
+
* [[DebugServer]] Позволяет отправлять записи журнала наблюдателю через IPC
 
* [[MultiLog]]
 
* [[MultiLog]]
 
* [[log4delphi]]
 
* [[log4delphi]]
* The package IdeLazLogger, which adds a dialog to the IDE allowing to enable/disable log groups used in the IDE itself.
+
* Пакет IdeLazLogger, который добавляет в IDE диалог, позволяющий включать/отключать группы журналов, используемые в самой IDE.
  
[[Category:LCL]]
+
[[Category:LCL/ru]]
[[Category:Lazarus]]
+
[[Category:Lazarus/ru]]
[[Category:Debugging]]
+
[[Category:Debugging/ru]]
 
[[Category:Logging]]
 
[[Category:Logging]]
 +
{{AutoCategory}}

Latest revision as of 00:17, 15 April 2024

English (en) русский (ru)

Обзор

Модуль LazLogger поставляется с Lazarus и обеспечивает ведение журнала в файл.

Использование

Добавление поддержки логирования в ваш исходный код

Просто подключив модуль lazlogger, вы сможете использовать следующее:

  • DebugLn: который работает примерно так же, как WriteLn.
  • DebugLnEnter/DebugLnExit: так же, как debugln, но с отступом увеличить/уменьшить.
  • DbgOut: который работает примерно так же, как Write.

Все они могут быть вызваны с помощью:

  • Одной строки или списка (до 15) строк: DebugLn('Foo'); DbgOut('a','b');
  • Массива констант: DebugLn(['Foo=', 1, ' Bar=', anInteger]);
  • Тех же аргументов, что и Format(). String + array of const: DbgOut('a %d',[1]);

Также есть множество функций dbgs, которые преобразуют общие типы в строку. Например, dbgs(aRect) преобразует переменную типа TRect в строку.

Активация/Деактивация LazLogger при помощи использования правильного модуля

LazLogger предоставляет 3 модуля для использования в разделе "uses"

LazLogger
Используйте этот модуль только в вашей основной программе. Использование этих модулей активирует функционирование LazLogger.
LazLoggerBase
Используйте этот модуль, когда вы хотите использовать debugln. То, что делает LazLoggerBase, зависит от того, используется ли модуль LazLogger в каком-либо другом модуле вашего приложения. Если модуль LazLogger не используется, LazLoggerBase установит «логгер черной дыры», который отбросит все сообщения журнала. Если LazLogger используется где-либо, то все устройства, использующие LazLoggerBase, будут записывать сообщения журнала, как описано в разделе «Вывод логирования»
LazLoggerDummy
Этот модуль предоставляет вам фиктивные вызовы debugln (и всех других функций LazLagger). Это просто вызовы пустых методов. Это позволяет отключить все журналы в модуле, без необходимости удалять любой оператор debugln.

Вывод логирования

Stdout (Стандартный вывод)

В нормальных условиях выходные данные записываются в stdout. Выходные данные не записываются, если stdout закрыт - например, когда приложение имеет вид {$AppType Gui} или скомпилировано с -WG в Windows (см. Projct Options/Compiler options(Параметры компилятора) /Config and Target (Настройка и целевая платформа)/Target-specific options(Частные параметры цели)).

Файл

Вывод отладки также может быть записан в файл. Код инициализации модуля логирования

  • проверяет параметры командной строки вашей программы на --debug-log=<file> (в Lazarus: Run(Запуск) / Run Parameters(Параметры запуска) / Command line parameters(Параметры командной строки) - на вкладка "Локальные"). При нахождении этого параметра любые последующие выходные данные отладки отправляются в <file>.
Имя параметра можно изменить с помощью DebugLogger.ParamForLogFileName:'--debug-log'; Это свойство существует, только если используется модуль LazLogger. (LazLoggerBase не определяет это свойство).
  • Если параметр командной строки '--debug-log' не задан, он затем проверяет, существует ли переменная среды операционной системы xxx_debuglog, где xxx - имя файла программы без расширения. Например, для Lazarus это будет lazarus_debuglog. Если такая переменная среды существует, она использует файл, указанный в этой переменной среды, в качестве файла для получения отладочной информации.

Пример: если вы cделаете:

set lazarus_debuglog=c:\lazarus\debug.txt

и запустите Lazarus, вывод данных отладки будет записан в c:\lazarus\debug.txt.

Сервер отладки

Недоступно в LazLogger; см. DebugServer.

Группы журналов

Вы можете добавить группы журналов.

var MY_LOG_GROUP: PLazLoggerLogGroup; 

initialization
  MY_LOG_GROUP := DebugLogger.FindOrRegisterLogGroup('fancy_name_for_mylog' {$IFDEF MY_LOG_GROUP_ON_BY_DEFAULT} , True {$ENDIF} );

В вашем коде используйте

debugln(MY_LOG_GROUP, 'log this text');
debugln(MY_LOG_GROUP, ['a=',a,' b=',b]); // a, b должны быть базовыми типами: integer, byte, ansistring. Смотрите типы, доступные для "array of const"

и чтобы включить его, вызовите ваше приложение с

--debug-enable=fancy_name_for_mylog

--debug-enable= принимает список [значений, разделенных] запятой

Уже активированную группу (DebugLogger.FindOrRegisterLogGroup('grpname', True)) можно отключить, указав имя группы со знаком минус.

--debug-enable=-fancy_name_for_mylog

Имя параметра может быть установлено через DebugLogger.ParamForEnabledLogGroups='--debug-enable';

Документация

Для получения дополнительной информации см. сам модуль и документацию LCL.

Используя LazLogger/LazLoggerBase, ваш код может получить доступ к экземпляру DebugLogger. Это предлагает некоторые свойства для точной настройки логирования.

Вы также можете написать свой собственный класс логгера и использовать его с LazLogger/Base.

Многопоточность

  • DebugLn потокобезопасен, начиная с Lazarus 2.0.
В более ранних версиях этого текста было указано «начиная с 1.0», но было найдено и исправлено еще одно условие для 2.0.
  • Вызовы DbgOut, DebugLnEnter, DebugLnExit могут быть сделаны из потоков, но не всегда могут правильно форматировать/делать отступ в выходных данных.
  • Создание/настройка/уничтожение/конфигурирование логгера - это НЕпотокобезопасные операции и должны быть сделаны до запуска потоков.
Создание обычно выполняется автоматически во время инициализации устройства.
Но любые свойства (например, ParamForLogFileName) должны быть установлены до доступа к логгеру из потоков.
  • Обратный вызов для таких событий, как OnDebugLn, производится в каждом потоке. Код в обратном вызове должен быть сам по себе потокобезопасным.
Изменение свойства является НЕпотокобезопасным

См.также

  • TEventLog documentation Встроенная поддержка входа в FPC/Lazarus
  • DebugServer Позволяет отправлять записи журнала наблюдателю через IPC
  • MultiLog
  • log4delphi
  • Пакет IdeLazLogger, который добавляет в IDE диалог, позволяющий включать/отключать группы журналов, используемые в самой IDE.