gpt4 book ai didi

c++ - 在 mac OS-X 多线程项目上使用 asl 布局进行日志记录

转载 作者:行者123 更新时间:2023-11-30 19:42:15 24 4
gpt4 key购买 nike

我想转换多线程项目中的所有日志消息,以使用 Apple 系统日志工具(或 asl)。

根据以下 asl 手册 - https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/asl_get.3.html

When logging from multiple threads, each thread must open a separate client handle using asl_open.

出于这个原因,我为每个线程定义了 asl 客户端,以便在我的所有日​​志命令中使用。然而,在将 asl 客户端绑定(bind)到每个 asl_log 命令时面临一些重大困难。

1. what if some of my asl log commands reside in a code that is common for
more than one thread - which asl client should i decide use on such message.

2. Even on thread unique code, one should be consistent in choosing the same
asl_client on all log functions on a single thread code scope (this is
not always easy to find in complex projects.).

有没有更简单的方法来采用我的项目日志消息来使用 asl ?

我会考虑将 asl 客户端绑定(bind)到线程之类的事情,

谢谢

最佳答案

好吧,到目前为止我发现的最佳解决方案是创建一个特定于线程的全局变量 asl 客户端。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <asl.h>
#define NUMTHREADS 4

pthread_key_t glob_var_key;

void print_func() //take global var and use it as the aslclient per thread
{
asl_log(*((aslclient*) pthread_getspecific(glob_var_key)),NULL,ASL_LEVEL_NOTICE, "blablabla");
}

void* thread_func(void *arg)
{
aslclient *p = malloc(sizeof(aslclient));
// added tid to message format to distinguish between messages
uint64_t tid;
pthread_threadid_np(NULL, &tid);
char tid_str[20];
sprintf(tid_str, "%llu", tid);

*p = asl_open(tid_str,"Facility",ASL_OPT_STDERR);
pthread_setspecific(glob_var_key, p);
print_func();

sleep(1); // enable ctx switch

print_func();

pthread_setspecific(glob_var_key, NULL);
free(p);
pthread_exit(NULL);
}


int main(void)
{
pthread_t threads[NUMTHREADS];
int i;

pthread_key_create(&glob_var_key,NULL);
for (i=0; i < NUMTHREADS; i++)
pthread_create(&threads[i],NULL,thread_func,NULL);

for (i=0; i < NUMTHREADS; i++)
pthread_join(threads[i], NULL);
}

关于c++ - 在 mac OS-X 多线程项目上使用 asl 布局进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com