@@ -66,18 +66,19 @@ pycbc_logger__configure_logging_sink__(PyObject* self, PyObject* args, PyObject*
6666}
6767
6868PyObject*
69- pycbc_logger__create_console_logger__ (PyObject* self, PyObject* args, PyObject* kwargs)
69+ pycbc_logger__create_logger__ (PyObject* self, PyObject* args, PyObject* kwargs)
7070{
7171 auto logger = reinterpret_cast <pycbc_logger*>(self);
7272 char * log_level = nullptr ;
73- const char * kw_list[] = { " level" , nullptr };
74- const char * kw_format = " s" ;
73+ char * log_filename = nullptr ;
74+ const char * kw_list[] = { " level" , " filename" , nullptr };
75+ const char * kw_format = " s|s" ;
7576 if (!PyArg_ParseTupleAndKeywords (
76- args, kwargs, kw_format, const_cast <char **>(kw_list), &log_level)) {
77+ args, kwargs, kw_format, const_cast <char **>(kw_list), &log_level, &log_filename )) {
7778 pycbc_set_python_exception (PycbcError::InvalidArgument,
7879 __FILE__,
7980 __LINE__,
80- " Cannot set create console logger. Unable to parse args/kwargs." );
81+ " Cannot create logger. Unable to parse args/kwargs." );
8182 return nullptr ;
8283 }
8384
@@ -86,21 +87,29 @@ pycbc_logger__create_console_logger__(PyObject* self, PyObject* args, PyObject*
8687 PycbcError::UnsuccessfulOperation,
8788 __FILE__,
8889 __LINE__,
89- " Cannot create console logger. Another logger has already been initialized." );
90+ " Cannot create logger. Another logger has already been initialized." );
9091 return nullptr ;
9192 }
9293
9394 if (log_level == nullptr ) {
9495 pycbc_set_python_exception (PycbcError::InvalidArgument,
9596 __FILE__,
9697 __LINE__,
97- " Cannot create console logger. Unable to determine log level." );
98+ " Cannot create logger. Unable to determine log level." );
9899 return nullptr ;
99100 }
100- couchbase::core::logger::create_console_logger ();
101101 auto level = couchbase::core::logger::level_from_str (log_level);
102- couchbase::core::logger::set_log_levels (level);
103- logger->is_console_logger = true ;
102+ if (log_filename != nullptr ) {
103+ couchbase::core::logger::configuration configuration{};
104+ configuration.filename = std::string{ log_filename };
105+ configuration.log_level = level;
106+ couchbase::core::logger::create_file_logger (configuration);
107+ logger->is_file_logger = true ;
108+ } else {
109+ couchbase::core::logger::create_console_logger ();
110+ couchbase::core::logger::set_log_levels (level);
111+ logger->is_console_logger = true ;
112+ }
104113 Py_RETURN_NONE;
105114}
106115
@@ -137,24 +146,42 @@ pycbc_logger__is_console_logger__(PyObject* self, PyObject* Py_UNUSED(ignored))
137146 }
138147}
139148
140- static PyMethodDef pycbc_logger_methods[] = { { " configure_logging_sink" ,
141- (PyCFunction)pycbc_logger__configure_logging_sink__,
142- METH_VARARGS | METH_KEYWORDS,
143- PyDoc_STR (" Configure logger's logging sink" ) },
144- { " create_console_logger" ,
145- (PyCFunction)pycbc_logger__create_console_logger__,
146- METH_VARARGS | METH_KEYWORDS,
147- PyDoc_STR (" Create a console logger" ) },
148- { " enable_protocol_logger" ,
149- (PyCFunction)pycbc_logger__enable_protocol_logger__,
150- METH_VARARGS | METH_KEYWORDS,
151- PyDoc_STR (" Enables the protocol logger" ) },
152- { " is_console_logger" ,
153- (PyCFunction)pycbc_logger__is_console_logger__,
154- METH_NOARGS,
155- PyDoc_STR (
156- " Check if logger is console logger or not" ) },
157- { NULL } };
149+ PyObject*
150+ pycbc_logger__is_file_logger__ (PyObject* self, PyObject* Py_UNUSED (ignored))
151+ {
152+ auto logger = reinterpret_cast <pycbc_logger*>(self);
153+ if (logger->is_file_logger ) {
154+ Py_INCREF (Py_True);
155+ return Py_True;
156+ } else {
157+ Py_INCREF (Py_False);
158+ return Py_False;
159+ }
160+ }
161+
162+ static PyMethodDef pycbc_logger_methods[] = {
163+ { " configure_logging_sink" ,
164+ (PyCFunction)pycbc_logger__configure_logging_sink__,
165+ METH_VARARGS | METH_KEYWORDS,
166+ PyDoc_STR (" Configure logger's logging sink" ) },
167+ { " create_logger" ,
168+ (PyCFunction)pycbc_logger__create_logger__,
169+ METH_VARARGS | METH_KEYWORDS,
170+ PyDoc_STR (" Create a C++ core logger" ) },
171+ { " enable_protocol_logger" ,
172+ (PyCFunction)pycbc_logger__enable_protocol_logger__,
173+ METH_VARARGS | METH_KEYWORDS,
174+ PyDoc_STR (" Enables the protocol logger" ) },
175+ { " is_console_logger" ,
176+ (PyCFunction)pycbc_logger__is_console_logger__,
177+ METH_NOARGS,
178+ PyDoc_STR (" Check if logger is console logger or not" ) },
179+ { " is_file_logger" ,
180+ (PyCFunction)pycbc_logger__is_file_logger__,
181+ METH_NOARGS,
182+ PyDoc_STR (" Check if logger is file logger or not" ) },
183+ { NULL }
184+ };
158185
159186static PyObject*
160187pycbc_logger_new (PyTypeObject* type, PyObject*, PyObject*)
0 commit comments