在https://github.com/grafana/loki/issues/4249我发现了有趣的屏幕截图。

在此屏幕截图中,我看到日志级别和消息以粗体显示,并带有白色文本,其他元数据(从日志消息收集)以灰色显示在单独的行上。
我搜索了文档,但没有找到如何实现这一目标。老实说,我正在 ELK 中寻找类似“短信”的东西,让开发人员仅在真正需要时才能看到元数据。您能否指出文档如何实现这一目标?
如何使用 yaml-cpp 读取此 YAML 文件:
sensors:
- id: 5
hardwareId: 28-000005a32133
type: 1
- id: 6
hardwareId: 28-000005a32132
type: 4
Run Code Online (Sandbox Code Playgroud)
我不明白我如何获得sensors物品,使用它。
据我了解sensors是一个YAML::Node. 我怎么才能得到它?
更新 1:
YAML::Node config = YAML::LoadFile(config_path);
const YAML::Node& node_test1 = confg["sensors"];
for (std::size_t i = 0; i < node_test1.size(); i++) {
const YAML::Node& node_test2 = node_test1[i];
std::cout << "Id: " << node_test2["id"].as<std::string>() << std::endl;
std::cout << "hardwareId: " << node_test2["hardwareId"].as<std::string>() << std::endl << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
此代码有效,但它是使用有关旧 api 的教程编写的。我认为这段代码可以用迭代器重写,但我现在不知道如何重写。
我正在尝试让 EnvoyFilters 在我的安装中工作。\n出于测试目的,我正在尝试设置 lua 过滤器来记录哑消息并向响应添加标头。
\n这是我的配置:
\napiVersion: networking.istio.io/v1alpha3\nkind: EnvoyFilter\nmetadata:\n name: dumb-filter\n namespace: istio-system\nspec:\n # workloadSelector:\n # labels:\n # istio: ingressgateway\n configPatches:\n # - applyTo: VIRTUAL_HOST\n - applyTo: HTTP_ROUTE\n match:\n context: GATEWAY\n # context: ANY\n routeConfiguration:\n vhost:\n # name: "<domain>:443"\n route:\n #TODO: Understand name compose logic\n name: https.443.https.geth-dedicated.default\n patch:\n operation: MERGE\n value:\n name: envoy.filters.http.lua\n typed_config:\n "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua\n inlineCode: |\n function envoy_on_response(response_handle)\n response_handle:headers():add("dm3ch-test", "dm3ch")\n response_handle:logErr("Bye Bye.")\n end\nRun Code Online (Sandbox Code Playgroud)\n目前我没有看到任何日志消息或测试标头响应。\n我已经尝试过:
\n我正在使用sqlite编写程序。我有类dataSend_task,它会定期从 BD 中选择数据并将其发送到服务器。
在dataSend_task我有方法callback,我想作为参数发送到sqlite3_exec.
我有错误:
error: cannot convert ‘std::function<int(void*, int, char**, char**)>’ to ‘int (*)(void*, int, char**, char**)’ for argument ‘3’ to ‘int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)’
if (sqlite3_exec(this->db, this->SQL_SELECT_READINGS_QUERY, callback, 0, &err)) {
Run Code Online (Sandbox Code Playgroud)
源码部分:
int dataSend_task::callback(void *NotUsed, int argc, char **argv, char **columnName){...}
void dataSend_task::sendData()
{
using namespace std::placeholders;
std::function<int(void *, int, char **, char **)> callback =
std::bind(&dataSend_task::callback, this, _1, _2, _3, _4);
if …Run Code Online (Sandbox Code Playgroud) c++ ×1
c++11 ×1
envoyproxy ×1
grafana ×1
grafana-loki ×1
istio ×1
sqlite ×1
yaml ×1
yaml-cpp ×1