目录
本文主要参考Adaptive Autosar的规范文档,说明log模块的功能要求。
以此借鉴写自己的log模块,以下均简称log。
1.log的主要功能
1)提供统一的十进制-十六进制-二进制的转换方法;
2)自动在log中打上时间戳;
3)不限网络-串口总线-控制台-文件系统等的log输出方法;
4)网络带宽限制。
2.log生命周期
启动:ara::core::Initialize
停止:ara::core::Deinitialize()
3.log的使用配置
使用log时,应用执行清单应包含
- Application ID -- 对应用户应用,方便过滤是哪个应用
- Application 描述
- log等级
- log模式
- log文件路径,如果指定到文件
log实例的上下文信息应包括
- 上下文 ID -- 在应用进程范围内唯一
- 上下文描述
- 默认的log等级
4.log 模式
log模式类型:
- remote,表示通过网络
- file,保存到文件
- console,输出到终端
log mode 指的是通过不同的方式传递log信息,如下图
5.log消息类型
log区分两类消息,即所谓的:
- Non-Modeled messages (verbose):发送完整消息
- Modeled messages(non-verbose): 将静态不变部分不往总线发送,只发送动态变化消息,接收到消息后,将静态部分+动态部分 组合显示
6.log等级
- off ,表示 no logging
- fatal , 表示致命错误,不可覆盖
- error,错误,影响到正常功能
- warn, 告警,可能对行为有影响
- info,信息,帮助理解
- debug,调试,帮助开发
- verbase,超详细的调试消息(最高等级的信息)
7.log使用案例
/*
步骤1:
将ECU ID设置为与/opt/vrte/usr/etc中dlt.conf文件在目标ECU上定义的ECU ID相同。默认ECU ID为ECU1。
*/
/*
步骤2:
设置为运行DLT守护程序的目标ECU的IP地址,例如192.168.56.20,并确保使用默认端口3490。
*/
#include <ara/exec/execution_client.h>
#include <dlt/dlt.h>
#include <ara/log/logging.h>
ara::exec::ExecutionClient exeClient;
using namespace ara::log;
int main(int argc, char** argv)
{
// 通知EM模块 :application is now running
exeClient.ReportExecutionState( ara::exec::ExecutionState::kRunning );
// 初始化log模块 console and remote
ara::log::InitLogging( "agm1_",
"agm log 1",
LogLevel::kVerbose,
LogMode::kConsole | LogMode::kRemote,
"");
// 创建 application log的 context
Logger& ctxa = CreateLogger( "CTXA", "application context" );
// Log using custom context
ctxa.LogInfo()<< "ARA::LOG LogInfo test message 1 \n";
GlobalContext.LogFatal() << "ARA::LOG LogInfo Fatal test message";
GlobalContext.LogError() << "ARA::LOG LogInfo error test message";
GlobalContext.LogWarn() << "ARA::LOG LogInfo Warn test message";
GlobalContext.LogInfo() << "ARA::LOG LogInfo Info test message ";
GlobalContext.LogDebug() << "ARA::LOG LogInfo Debug test message";
GlobalContext.LogVerbose()<< "ARA::LOG LogInfo Verbose test message";
LogStream log{ctxa.LogInfo()};
log<<"----------------begin------------- \n";
log<<"ARA::LOG LogInfo test message \n";
log<<"ARA::LOG LogInfo test message \n";
log<<"ARA::LOG LogInfo test message \n";
log<<"ARA::LOG LogInfo test message \n";
log<<"ARA::LOG LogInfo test message \n";
log.Flush();
log<<"-------------------end---------- \n";
// 通知EM,application to terminate
exeClient.ReportExecutionState( ara::exec::ExecutionState::kTerminating );
return(EXIT_SUCCESS);
}