RevitLogger - небольшая библиотека для Revit-плагинов на .NET Framework 4.8, которая решает две задачи:
- пишет текстовый лог в файл;
- показывает простое WinForms-окно для быстрой отладки строковых данных.
Проект удобно использовать как внутреннюю утилиту в своих Revit-надстройках, когда нужен понятный лог без внешних зависимостей.
Статический класс Logger умеет:
- очищать лог при старте;
- писать сообщения уровней
Debug,Info,Warning,Error,Critical; - автоматически добавлять время, уровень, имя файла и номер строки вызова;
- писать информацию об окружении через
Init(...); - писать исключения через
Exception(...).
Формат строки лога:
2026-06-06 18:30:15.123 | INFO | Command.cs:42 | Export started
Путь лога по умолчанию:
%LocalAppData%\Temp\i-savelev\app.log
Статический класс DebugWindow показывает форму Debugger с одной таблицей. Туда можно добавлять произвольные строки и быстро смотреть промежуточные данные прямо во время работы плагина.
Это полезно, когда нужно быстро проверить:
- состав коллекции;
- промежуточные значения;
- результат обхода элементов;
- данные перед экспортом или обработкой.
Logger.SetLogPath(string logFile)- задать свой путь к лог-файлу;Logger.GetLogPath()- получить текущий путь;Logger.SetLogLevel(Logger.LogLevel level)- задать минимальный уровень логирования;Logger.Clear()- очистить лог;Logger.Init(...)- записать стартовую информацию об окружении;Logger.Debug(...),Info(...),Warning(...),Error(...),Critical(...)- записать сообщение;Logger.Exception(Exception ex, string message = "", LogLevel level = LogLevel.Error)- записать исключение.
DebugWindow.AddRow(string str)- добавить строку в окно;DebugWindow.Show(string windowName = null)- показать окно.
usingAutodesk.Revit.Attributes;usingAutodesk.Revit.DB;usingAutodesk.Revit.UI;usingSystem;namespaceMyPlugin{[Transaction(TransactionMode.Manual)]publicclassMyCommand:IExternalCommand{publicResultExecute(ExternalCommandDatacommandData,refstringmessage,ElementSetelements){Logger.SetLogPath(@"C:\Temp\MyPlugin\revit.log");Logger.SetLogLevel(Logger.LogLevel.Debug);Logger.Init(hostName:"Autodesk Revit",hostVersionNumber:commandData.Application.Application.VersionNumber,hostBuild:commandData.Application.Application.VersionBuild,hasActiveDocument:commandData.Application.ActiveUIDocument!=null);try{Logger.Info("Команда запущена");vardoc=commandData.Application.ActiveUIDocument?.Document;Logger.Debug($"Имя документа: {doc?.Title??"нет активного документа"}");Logger.Info("Команда завершена успешно");returnResult.Succeeded;}catch(Exceptionex){Logger.Exception(ex,"Ошибка выполнения команды");message=ex.Message;returnResult.Failed;}}}}DebugWindow.AddRow("Старт обработки");DebugWindow.AddRow("Найдено элементов: 125");DebugWindow.AddRow("Текущий документ: Model_A");DebugWindow.Show("Отладка команды");Окно очищается при закрытии формы.
Обычно достаточно такого шаблона:
- В начале команды вызвать
Logger.SetLogPath(...), если нужен свой путь. - Вызвать
Logger.Init(...), чтобы сохранить снимок окружения. - По ходу выполнения писать ключевые этапы через
Info(...)и детали черезDebug(...). - Все исключения писать через
Logger.Exception(...). - При необходимости выводить промежуточные данные через
DebugWindow.
Метод пишет в лог:
- имя и версию сборки;
- имя процесса и PID;
- имя компьютера и пользователя;
- сведения об ОС;
- версию
.NET; - текущую культуру и таймзону;
- текущую рабочую директорию;
- командную строку процесса;
- информацию о хосте Revit, если она передана явно.
RevitLogger полезен для:
- диагностики ошибок в Revit-командах;
- логирования пакетных операций;
- отладки обхода элементов модели;
- анализа проблем у пользователей по лог-файлу;
- быстрой визуальной проверки промежуточных значений без полноценного UI.
- библиотека не делает ротацию логов;
- лог пишет в один файл;
DebugWindowподходит только для простой отладки строками;- библиотека не привязана к Revit API напрямую, но ориентирована на использование внутри Revit-плагинов.
Проект собирается как библиотека:
RevitLogger.dll
Целевая платформа:
.NET Framework 4.8
Основные зависимости:
System.Windows.FormsSystem.Data- стандартные библиотеки
.NET Framework
В репозитории RevitServerBrowser эта библиотека уже подключена как готовая DLL через папку output_dll. Этот проект можно использовать как ориентир по структуре решения, если нужно встроить RevitLogger в свой Revit-инструмент.