Нужен хороший инструмент ведения журнала последовательного порта

Я работаю над встроенной системой и использует один последовательный порт для всех целей ведения журнала.

Есть ли там инструмент, который позволяет фильтровать строки в разные окна (или вообще удалять их), чтобы я мог разделить выходные данные различных подсистем систем протоколирования и удалять спам-сообщения, которые появляются несколько раз в секунду?

Я бы предпочел решение с открытым исходным кодом, но может сделать предложение с высокой рекомендацией.

Ответ 1

Я никогда не думал об этом, но вот один продукт, который мог бы сделать трюк: Eltima Serial Port Splitter. Он утверждает, что может принимать один COM-порт и превращать его в несколько виртуальных портов для подключения ко многим приложениям. Возможно, вы сможете принять каждое приложение и просто посмотреть на один вид вывода.

Лично я просто напишу python script с PySerial и что-то вроде PyQT или wxPython (библиотеки GUI) для фильтрации данных в разных окнах. Это простой язык для изучения и делает удобный инструмент для разработки встроенных систем для таких вещей, как это.

Ответ 2

Вы можете использовать сплиттер Eltima с Advanced Serial Data Logger, это программное обеспечение имеет несколько фильтров, которые могут отфильтровывать ненужные сообщения.

Ответ 3

Я бы сделал следующее:

Используйте Python.

Напишите программу Python для чтения последовательных данных с устройства и переведите ее в элемент журнала для модуля протоколирования Python.

  • Если в сообщениях вашего устройства есть какой-то исходный идентификатор, переведите это в имя Python "logger" в соответствии с вашими потребностями, используя getLogger(). Вы можете определить имена журналов любым способом, который вам нужен, например. для определения источника или категории журнала.
  • Если сообщения журнала вашего устройства имеют показатель серьезности, переведите его в параметр lvl в метод logger log(). В противном случае просто используйте один из методов журнала, например info().

Используйте функцию файла конфигурации модуля протокола Python для фильтрации данных, как вы хотите, в конкретной ситуации.

  • Вы можете фильтровать определенные лог файлы по имени серьезности и журналу.
  • Вы можете выполнить вход в несколько пунктов назначения: Вы можете фильтровать и печатать определенные элементы журнала на экране и в то же время фильтровать и печатать определенный журнал элементов к одному или нескольким файлам. Вы можете смешивать их в любой комбинации. Он очень гибкий.
  • У вас может быть несколько конфигурационных файлов журналов для нескольких разных целей ведения журнала и просто укажите, какой из них вы хотите использовать через командную строку при каждом запуске вашей программы.

Я использовал модуль регистрации Python с конфигурационными файлами, чтобы настроить фильтрацию, и это действительно потрясающе.

Ответ 4

Я думаю, это будет зависеть от формата ваших журналов. Если они выглядят как (или вы можете сделать их похожими) в формате syslog, вы можете попробовать следующее:

http://sourceforge.net/projects/logwatch/ http://xjack.org/logtool/

Ответ 5

SmarTerm позволяет подключаться ко многим различным последовательным портам в интерфейсе с вкладками. Он также имеет Visual Basic, такой как язык сценариев, который позволяет писать сценарии для разных потребностей. Я написал довольно много сценариев для обновления встроенного программного обеспечения, а также автоматизацию сохранения журналов на нескольких вкладках.

alt text

Ответ 6

Я лично использовал бы описанный выше метод Python, но другим (относительно простым) способом его использования было бы использовать sed.

Создайте несколько разных фильтров, чтобы точно показать, что вы хотите от потока, а затем выполните команду tail -f вашего файла последовательного устройства.

Ответ 7

Используйте screen с grep и tail.

Ответ 8

Мой первый выбор - всегда запускать PortMon (первоначально из SysInternals). У него есть опция фильтра, в которой вы можете вводить строки, чтобы включать, исключать или выделять:

alt text

Я использовал это в течение многих лет в Windows NT/2000/XP с большим успехом.

Надеюсь, вы используете 32-битную ОС Windows, потому что, если вы используете 64-разрядную версию, вам придется пойти с чем-то вроде продукта Eltima.

Ответ 10

Попробуйте Powershell. Вам, очевидно, нужно добавить фильтрацию, но это должно заставить вас начать

$port= new-Object System.IO.Ports.SerialPort COM3,9600,None,8,one
$port.Open()
While ($TRUE) {
$port.ReadLine()
}