MOS Source Code
Loading...
Searching...
No Matches
syslog.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
4
7#include "proto/syslog.pb.h"
8
9#include <mos/compiler.h>
10#include <mos/mos_global.h>
11#include <mos_stdio.hpp>
12#include <pb_encode.h>
13
15
16static void do_print_syslog(const pb_syslog_message *msg, const debug_info_entry *feat)
17{
18 const loglevel_t level = (loglevel_t) msg->info.level;
20
21 if (level != MOS_LOG_UNSET)
22 {
23 lprintk(level, "\r\n");
24 if (feat)
25 lprintk(level, "%-10s | ", feat->name);
26
27#if MOS_CONFIG(MOS_PRINTK_WITH_TIMESTAMP)
28 lprintk(level, "%-16lu | ", msg->timestamp);
29#endif
30
31#if MOS_CONFIG(MOS_PRINTK_WITH_DATETIME)
32 lprintk(level, "%s | ", (const char *) platform_get_datetime_str());
33#endif
34
35#if MOS_CONFIG(MOS_PRINTK_WITH_CPU_ID)
36 lprintk(level, "cpu %2d | ", msg->cpu_id);
37#endif
38
39#if MOS_CONFIG(MOS_PRINTK_WITH_FILENAME)
40 lprintk(level, "%-15s | ", msg->info.source_location.filename);
41#endif
42
43#if MOS_CONFIG(MOS_PRINTK_WITH_THREAD_ID)
44 lprintk(level, "[t%d:%s]\t| ", msg->thread.tid, msg->thread.name);
45#endif
46 }
47
48 lprintk(level, "%s", msg->message);
49
51}
52
53long do_syslog(loglevel_t level, const char *file, const char *func, int line, const debug_info_entry *feat, const char *fmt, ...)
54{
55 auto const thread = current_thread;
56 pb_syslog_message msg = {
57 .timestamp = platform_get_timestamp(),
58 .cpu_id = platform_current_cpu_id(),
59 };
60
61 msg.info.level = (syslog_level) level;
62 msg.info.featid = feat ? feat->id : 0;
63 msg.info.source_location.line = line;
66
67 if (thread)
68 {
69 msg.thread.tid = thread->tid;
70 msg.process.pid = thread->owner->pid;
71 strncpy(msg.thread.name, thread->name.c_str(), sizeof(msg.thread.name));
72 strncpy(msg.process.name, thread->owner->name.c_str(), sizeof(msg.process.name));
73 }
74
75 va_list args;
76 va_start(args, fmt);
77 vsnprintf(msg.message, sizeof(msg.message), fmt, args);
78 va_end(args);
79
80 do_print_syslog(&msg, feat);
81 return 0;
82}
char args[3][16]
Definition avr_io.c:16
MOSAPI char * strncpy(char *__restrict dest, const char *__restrict src, size_t n)
MOSAPI int vsnprintf(char *__restrict buf, size_t size, const char *__restrict format, va_list args)
#define current_thread
Definition platform.hpp:32
void lprintk(loglevel_t loglevel, const char *format,...)
Definition printk.cpp:109
u32 platform_current_cpu_id()
#define spinlock_acquire(lock)
Definition spinlock.hpp:64
#define spinlock_release(lock)
Definition spinlock.hpp:65
char name[32]
Definition syslog.pb.h:31
uint32_t pid
Definition syslog.pb.h:30
char filename[32]
Definition syslog.pb.h:35
char function[32]
Definition syslog.pb.h:37
pb_process process
Definition syslog.pb.h:51
uint64_t timestamp
Definition syslog.pb.h:47
char message[1024]
Definition syslog.pb.h:49
pb_syslog_source_info info
Definition syslog.pb.h:48
uint32_t cpu_id
Definition syslog.pb.h:52
pb_thread thread
Definition syslog.pb.h:50
syslog_level level
Definition syslog.pb.h:41
pb_source_location source_location
Definition syslog.pb.h:43
uint32_t tid
Definition syslog.pb.h:25
char name[32]
Definition syslog.pb.h:26
static spinlock_t global_syslog_lock
Definition syslog.cpp:14
static void do_print_syslog(const pb_syslog_message *msg, const debug_info_entry *feat)
Definition syslog.cpp:16
long do_syslog(loglevel_t level, const char *file, const char *func, int line, const debug_info_entry *feat, const char *fmt,...)
Definition syslog.cpp:53
loglevel_t
Definition syslog.hpp:8
@ MOS_LOG_UNSET
Definition syslog.hpp:15
syslog_level
Definition syslog.pb.h:13
u64 platform_get_timestamp()
datetime_str_t * platform_get_datetime_str(void)