Diagnostic Log and Trace——DLT 离线日志存储

本文介绍DLT离线日志存储机制,包括配置、使用及测试方法。该机制可将日志保存在目标系统或外部设备上,提供详细的配置选项说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

doc/dlt_offline_logstorage.md · RTplay/dlt-daemon - Gitee.com

DLT离线日志存储介绍

Logstorage 是一种将 DLT 日志存储在目标系统或连接到目标的外部设备(例如 U 盘)上的机制。它可以被视为对已经是 DLT 一部分的离线跟踪功能的改进。

配置

一般配置在 dlt.conf 中完成。存在以下配置选项:

##############################################################################
# Offline logstorage                                                         #
##############################################################################
# Store DLT log messages, if not set offline logstorage is off (Default: off)
# Maximum devices to be used as offline logstorage devices
# OfflineLogstorageMaxDevices = 1

# Path to store DLT offline log storage messages (Default: off)
# OfflineLogstorageDirPath = /opt

# File options
# Appends timestamp in log file name, Disable by setting to 0 (Default: 1)
# OfflineLogstorageTimestamp = 0

# Appends delimiter in log file name, allowed punctutations only (Default: _)
# OfflineLogstorageDelimiter = _

# Wrap around value for log file count in file name (Default: UINT_MAX)
# OfflineLogstorageMaxCounter = 999

# Maximal used memory for Logstorage Cache in KB (Default: 30000 KB)
# OfflineLogstorageCacheSize = 30000

配置文件格式

对于存储日志的 DLT 守护程序,名为“dlt_logstorage.conf”的配置文件应存在于外部存储或内部存储设备(= 文件系统中的给定路径)中。

[Filter<unique number>]              # 过滤器配置名称
LogAppName=<APID>                    # 从中存储日志的应用程序的名称。多个应用程序可以用“,”分隔,“.*”表示所有应用程序
ContextName=<CTID>                   # 要从中存储日志的上下文的名称或名称。多个上下文可以用“,”分隔,“.*”表示应用程序的所有上下文
LogLevel=<Log level>                 # 定义日志级别,例如DLT_LOG_INFO 或 DLT_LOG_FATAL
File=<file name>                     # 包含日志的已创建文件的基本名称,例如“例子”。有关进一步的文件命名方案配置,请参阅 man dlt.conf
FileSize=<file size in bytes>        # 最大文件大小(以字节为单位)
NOFiles=<number of files>            # 删除最旧文件并创建新文件之前创建的文件数
SyncBehavior=<strategy>              # 指定同步策略。默认值:在每条消息后同步。请参阅下面的 Logstorage Rinbuffer 实现。
EcuID=<ECUid>                        # 指定ECU标识符
SpecificSize=<spec size in bytes>    # 达到特定大小后将日志存储在存储设备中。

参数“SyncBehavior”、“EcuID”和“SpecificSize”是可选的——所有其他参数都是必需的。

如果参数“LogAppName”和“ContextName”都设置为通配符或配置文件中不存在,则必须指定“EcuID”。

典型的配置文件可能如下所示:

[FILTER1]
LogAppName=APP1
ContextName=CON1,CON2
LogLevel=DLT_LOG_INFO
File=App
FileSize=10000
NOFiles=10

[FILTER2]
LogAppName=TEST
ContextName=.*
LogLevel=DLT_LOG_ERROR
File=Test
FileSize=250000
NOFiles=5
EcuID=ECU1
SyncBehavior=ON_SPECIFIC_SIZE
SpecificSize=5000

[FILTER3]
LogAppName=TEST
ContextName=.*
LogLevel=DLT_LOG_ERROR
File=Test
FileSize=250000
NOFiles=5
SyncBehavior=ON_FILE_SIZE,ON_DEMAND
EcuID=ECU1

在非详细模式的情况下,应使用以下过滤器。

[NON-VERBOSE-STORAGE-FILTER<unique number>]    # filter configuration name for a Non-Verbose passive node
EcuID=<ECUid>                                  # Specify ECU identifier
File=<file name>                               # Base name of the created files that containing the logs, e.g. "example". For further file naming scheme configurations see man dlt.conf
FileSize=<file size in bytes>                  # Maximum file size in bytes
NOFiles=<number of files>                      # Number of created files before oldest is deleted and a new one is created

[NON-VERBOSE-LOGLEVEL-CTRL<unique number>]     # filter configuration name to control log level of Non-Verbose applications
LogAppName=<APID>                              # Name of application (wildcard allowed)
ContextName=<CTID>                             # Name of context (wildcard allowed)
LogLevel=<Log level>                           # Define log level, e.g. DLT_LOG_INFO or DLT_LOG_FATAL
EcuID=<ECUid>                                  # Specify ECU identifier

典型的配置文件可能如下所示:

[NON-VERBOSE-STORAGE-FILTER1]
EcuID=PASV
File=scc
FileSize=50000
NOFiles=5

[NON-VERBOSE-LOGLEVEL-CTRL1]
LogAppName=LOG
ContextName=TEST
LogLevel=DLT_LOG_DEBUG
EcuID=PASV

[NON-VERBOSE-LOGLEVEL-CTRL2]
LogAppName=.*
ContextName=.*
LogLevel=DLT_LOG_WARN
EcuID=PASV

使用 DLT 离线日志存储

通过在 dlt.conf 中设置 OfflineLogstorageMaxDevices = 1 来启用 OfflineLogstorage。请注意,如果使用多个 Logstorage 设备,DLT 的性能可能会下降;性能也取决于所用设备的写入速度。

创建设备文件夹:

mkdir -p /var/dltlogs

创建一个配置文件并将其存储到该文件夹​​中或挂载包含配置文件的外部设备。

启动 DLT 守护进程。如果 DLT 守护程序已经在启用离线日志存储的情况下启动,则不需要这样做。

触发 DLT 守护进程使用新的日志存储设备:

dlt-logstorage-ctrl -c 1 -p /var/dltlogs

之后,匹配过滤器配置的日志将存储到 Logstorage 设备上。

dlt-logstorage-ctrl -c 0 -p /var/dltlogs

配置的日志存储设备与 DLT 守护程序断开连接。

使用 dlt-logstorage-ctrl 应用程序

Usage: dlt-logstorage-ctrl [options]
Send a trigger to DLT daemon to connect/disconnect a certain logstorage device

Options:
  -c         Connection type: connect = 1, disconnect = 0
  -d[prop]   Run as daemon: prop = use proprietary handler
             'prop' may be replaced by any meaningful word
  -e         Set ECU ID (Default: ECU1)
  -h         Usage
  -p         Mount point path
  -s         Sync Logstorage cache
  -t         Specify connection timeout (Default: 10s)
  -S         Send message with serial header (Default: Without serial header)
  -R         Enable resync serial header
  -v         Set verbose flag (Default:0)

测试 DLT 离线日志存储

以下过程可用于测试离线 Logstorage:

1、通过在 dlt.conf 中设置 OfflineLogstorageMaxDevices = 1 来启用 OfflineLogstorage

2、启动 dlt 守护进程

logstorage 的默认搜索路径是:/tmp/dltlogs/dltlogsdevX 其中 X 是 [1..OfflineLogstorageMaxDevices] 范围内的数字

3、创建设备文件夹

$ mkdir -p /var/dltlog

在此文件夹中创建配置文件“dlt_logstorage.conf”并定义过滤器配置:

[FILTER1]
LogAppName=LOG
ContextName=TEST
LogLevel=DLT_LOG_WARN
File=example
FileSize=50000
NOFiles=5

4、触发 dlt-daemon 使用新设备

$ dlt-logstorage-ctrl -c 1 -p /var/dltlog

5、启动 dlt-example-user

$ dlt-example-user Hello123

执行后,会在 /var/dltlogs 中创建一个日志文件,例如示例_001_20150512_133344.dlt

要检查文件的内容,请使用 dlt-convert 或 DLT Viewer 打开它。

Logstorage 环形缓冲区实现

DLT Logstorage 主要用于在连接到目标的外部大容量存储设备上存储一组可配置的日志。在这种情况下,将每个传入的日志消息直接写入外部存储设备是值得赞赏的,因为存储设备可能随时被卸载/突然删除。立即写入每条日志消息可避免丢失过多消息的问题,因为在设备从目标物理移除之前无法完成文件系统同步。另一方面,DLT Logstorage 功能也可用于在任何内部非易失性存储器(例如闪存设备)上存储一组可配置的日志。由于FLASH设备写周期有限的原因,必须尽可能减少写周期数。但是,在意外操作系统崩溃的情况下丢失日志消息的缺点也必须考虑在内。显而易见的想法是将传入的日志消息缓存在内存中,并根据某种策略将日志数据写入磁盘。传入的日志消息存储在具有特定大小的数据缓存中。根据用户定义的策略,将数据缓存写入存储设备,不依赖于文件系统的同步机制。

维护 Logstorage 日志级别实现

logstorage FILTER 中每个用户上下文的日志级别设置将被视为最高优先级。其他客户端(例如:dlt-control、dlt-viewer)可以将用户上下文的日志级别更新为较低级别,但无法更新为较高级别。如果客户端需要将用户上下文的日志级别更新到更高级别,则在 [General] 会话中实现了新的宏MaintainLogstorageLogLevel,以允许将用户上下文的日志级别更改为任何级别或维护日志存储配置的日志级别。

典型的配置文件可能如下所示:

[General]
MaintainLogstorageLogLevel=OFF

通过设置MaintainLogstorageLogLevel=OFF 或MaintainLogstorageLogLevel=0,客户端能够将任何日志级别更新到用户上下文。

通过设置MaintainLogstorageLogLevel=ON 或MaintainLogstorageLogLevel=1 或不设置,logstorage 将保持其日志级别为最高优先级。

设置默认路径

# Path to store DLT offline log storage messages (Default: off)

OfflineLogstorageDirPath = /tmp

使用这个设置了默认路径后就不需要再使用命令进行挂载设备了。

使用dlt-convert example_1_20211103-144749.dlt –a命令查看离线日志。

<think>好的,我现在需要帮助用户解决如何卸载dlt-daemon的问题,无论是在Linux还是Windows系统上。首先,我需要确认用户提到的dlt-daemon是什么,以及常见的安装方式,这样才能确定正确的卸载方法。 根据用户提供的引用信息,他们可能参考了Automake相关的内容,但链接似乎不直接关联到dlt-daemon。不过,我可以先假设dlt-daemon是通过包管理器或源码安装的,尤其是在Linux系统中。接下来,我需要回忆常见的Linux包管理工具,比如apt、yum、dnf等,以及Windows下的可能安装方式,比如安装程序或可执行文件。 在Linux中,如果用户通过包管理器安装的dlt-daemon,卸载通常很简单,使用对应的卸载命令即可。例如,在基于Debian的系统上,使用sudo apt remove dlt-daemon,或者如果包名不同,可能需要查找确切的包名。如果是从源码编译安装的,可能需要手动删除相关文件和目录,或者使用make uninstall命令,前提是源码中提供了该选项。 对于Windows系统,dlt-daemon可能作为服务安装,或者通过某种安装程序安装。卸载的话可能需要通过控制面板的程序卸载功能,或者运行安装程序提供的卸载程序。如果是以服务形式存在,可能需要先停止服务再删除相关文件。 接下来,我需要验证这些步骤是否正确。例如,检查dlt-daemon的官方文档或常见安装方法,确认包名是否正确。可能需要提醒用户在卸载前停止相关服务,确保没有进程在运行。此外,清理残留文件也是重要的一步,特别是在手动安装的情况下。 另外,用户可能遇到的问题包括找不到包名、卸载后仍有残留文件、或者依赖项未被正确移除。需要考虑到这些情况,并在步骤中加入相应的解决方法,比如使用apt purge来彻底删除配置文件和依赖项,或者在源码安装时检查Makefile是否支持uninstall。 最后,整理步骤,确保逻辑清晰,分Linux和Windows两部分,分别说明不同的卸载方法。同时,提醒用户注意权限问题,如使用sudo,以及检查服务状态等。可能还需要给出确认卸载成功的命令,比如尝试运行dlt-daemon查看是否已移除,或者检查安装目录是否存在。</think>### 卸载 `dlt-daemon` 的方法 `dlt-daemon` 是用于汽车行业的日志和追踪工具,通常通过包管理器或源码安装。以下是针对 Linux 和 Windows 系统的卸载步骤: --- #### **Linux 系统卸载** 1. **通过包管理器卸载** - **Debian/Ubuntu**: ```bash sudo apt remove dlt-daemon # 彻底删除配置文件(可选) sudo apt purge dlt-daemon ``` - **Fedora/RHEL**: ```bash sudo dnf remove dlt-daemon ``` - **Arch Linux**: ```bash sudo pacman -R dlt-daemon ``` 2. **源码安装的卸载** 如果通过源码编译安装且保留了构建目录: ```bash cd /path/to/dlt-daemon-source sudo make uninstall # 如果支持此命令 ``` 否则需手动删除相关文件: ```bash sudo rm -rf /usr/local/bin/dlt* sudo rm -rf /usr/local/lib/libdlt* sudo rm -rf /etc/dlt.conf ``` 3. **验证卸载** ```bash which dlt-daemon # 应返回“未找到” ``` --- #### **Windows 系统卸载** 1. **通过安装程序卸载** - 打开 **控制面板 → 程序 → 卸载程序**,找到 `dlt-daemon` 并卸载。 - 如果使用第三方包管理器(如 Chocolatey): ```powershell choco uninstall dlt-daemon ``` 2. **手动删除残留文件** - 删除安装目录(默认可能在 `C:\Program Files\dlt-daemon`)。 - 清理环境变量中的相关路径。 --- #### **注意事项** - 卸载前停止相关服务: ```bash sudo systemctl stop dlt.service # Linux 系统服务 ``` - 源码安装可能需要检查依赖项的清理[^1]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值