Skip to content

Commit 919ec2d

Browse files
committed
The C API supports setting the log level.
1 parent 97af35a commit 919ec2d

3 files changed

Lines changed: 96 additions & 1 deletion

File tree

examples/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ set(SAMPLE_KEY_VALUE_SCHEMA_PRODUCER
6868
SampleKeyValueSchemaProducer.cc
6969
)
7070

71+
set(SAMPLE_CUSTOM_LOGGER_CAPI
72+
SampleCustomLoggerCApi.c
73+
)
74+
7175
add_executable(SampleAsyncProducer ${SAMPLE_ASYNC_PRODUCER_SOURCES})
7276
add_executable(SampleConsumer ${SAMPLE_CONSUMER_SOURCES})
7377
add_executable(SampleConsumerListener ${SAMPLE_CONSUMER_LISTENER_SOURCES})
@@ -80,6 +84,7 @@ add_executable(SampleConsumerListenerCApi ${SAMPLE_CONSUMER_LISTENER
8084
add_executable(SampleReaderCApi ${SAMPLE_READER_C_SOURCES})
8185
add_executable(SampleKeyValueSchemaConsumer ${SAMPLE_KEY_VALUE_SCHEMA_CONSUMER})
8286
add_executable(SampleKeyValueSchemaProducer ${SAMPLE_KEY_VALUE_SCHEMA_PRODUCER})
87+
add_executable(SampleCustomLoggerCApi ${SAMPLE_CUSTOM_LOGGER_CAPI})
8388

8489
target_link_libraries(SampleAsyncProducer ${CLIENT_LIBS} pulsarShared)
8590
target_link_libraries(SampleConsumer ${CLIENT_LIBS} pulsarShared)
@@ -93,3 +98,4 @@ target_link_libraries(SampleConsumerListenerCApi ${CLIENT_LIBS} pulsarShar
9398
target_link_libraries(SampleReaderCApi ${CLIENT_LIBS} pulsarShared)
9499
target_link_libraries(SampleKeyValueSchemaConsumer ${CLIENT_LIBS} pulsarShared)
95100
target_link_libraries(SampleKeyValueSchemaProducer ${CLIENT_LIBS} pulsarShared)
101+
target_link_libraries(SampleCustomLoggerCApi ${CLIENT_LIBS} pulsarShared)

examples/SampleCustomLoggerCApi.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
#include <pulsar/c/client.h>
21+
#include <stdio.h>
22+
#include <string.h>
23+
#include <time.h>
24+
25+
void format_time(char *output){
26+
time_t rawtime;
27+
struct tm * timeinfo;
28+
29+
time(&rawtime);
30+
timeinfo = localtime(&rawtime);
31+
32+
sprintf(output, "%d %d %d %d:%d:%d",
33+
timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday,
34+
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
35+
}
36+
37+
void custom_logger(pulsar_logger_level_t level, const char *file, int line, const char *message,
38+
void *ctx) {
39+
time_t mytime = time(NULL);
40+
char * time_str = ctime(&mytime);
41+
// Control the log level yourself.
42+
if (level >= pulsar_DEBUG) {
43+
format_time(time_str);
44+
printf("[%s] [%u] [%s] [%d] [%s] \n", time_str, level, file, line, message);
45+
}
46+
}
47+
48+
int main() {
49+
pulsar_client_configuration_t *conf = pulsar_client_configuration_create();
50+
51+
pulsar_client_configuration_set_logger(conf, custom_logger, NULL);
52+
pulsar_client_configuration_set_memory_limit(conf, 64 * 1024 * 1024);
53+
pulsar_client_t *client = pulsar_client_create("pulsar://localhost:6650", conf);
54+
55+
pulsar_producer_configuration_t* producer_conf = pulsar_producer_configuration_create();
56+
pulsar_producer_configuration_set_batching_enabled(producer_conf, 1);
57+
pulsar_producer_t *producer;
58+
59+
pulsar_result err = pulsar_client_create_producer(client, "my-topic", producer_conf, &producer);
60+
if (err != pulsar_result_Ok) {
61+
printf("Failed to create producer: %s\n", pulsar_result_str(err));
62+
return 1;
63+
}
64+
65+
for (int i = 0; i < 10; i++) {
66+
const char* data = "my-content";
67+
pulsar_message_t* message = pulsar_message_create();
68+
pulsar_message_set_content(message, data, strlen(data));
69+
70+
err = pulsar_producer_send(producer, message);
71+
if (err == pulsar_result_Ok) {
72+
printf("Sent message %d\n", i);
73+
} else {
74+
printf("Failed to publish message: %s\n", pulsar_result_str(err));
75+
return 1;
76+
}
77+
78+
pulsar_message_free(message);
79+
}
80+
81+
// Cleanup
82+
pulsar_producer_close(producer);
83+
pulsar_producer_free(producer);
84+
pulsar_producer_configuration_free(producer_conf);
85+
86+
pulsar_client_close(client);
87+
pulsar_client_free(client);
88+
pulsar_client_configuration_free(conf);
89+
}

lib/c/c_ClientConfiguration.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class PulsarCLogger : public pulsar::Logger {
7878
PulsarCLogger(const std::string &file, pulsar_logger logger, void *ctx)
7979
: file_(file), logger_(logger), ctx_(ctx) {}
8080

81-
bool isEnabled(Level level) { return level >= pulsar::Logger::LEVEL_INFO; }
81+
bool isEnabled(Level level) { return level >= pulsar::Logger::LEVEL_DEBUG; }
8282

8383
void log(Level level, int line, const std::string &message) {
8484
logger_((pulsar_logger_level_t)level, file_.c_str(), line, message.c_str(), ctx_);

0 commit comments

Comments
 (0)