11import argparse
2+ import logging
3+ import os
24from concurrent import futures
35
46import grpc
57import structlog
68import sys
7- import os
8-
99from cloudquery .discovery_v1 import discovery_pb2_grpc
1010from cloudquery .plugin_v3 import plugin_pb2_grpc
11+ from structlog import wrap_logger
1112
1213from cloudquery .sdk .docs .generator import Generator
1314from cloudquery .sdk .internal .servers .discovery_v1 .discovery import DiscoveryServicer
1617
1718DOC_FORMATS = ["json" , "markdown" ]
1819
19-
2020_IS_WINDOWS = sys .platform == "win32"
2121
2222try :
3333
3434
3535def get_logger (args ):
36+ log_level_map = {
37+ "debug" : logging .DEBUG ,
38+ "info" : logging .INFO ,
39+ "warning" : logging .WARNING ,
40+ "error" : logging .ERROR ,
41+ "critical" : logging .CRITICAL ,
42+ }
43+
44+ logging .basicConfig (
45+ format = "%(message)s" ,
46+ stream = sys .stdout ,
47+ level = log_level_map .get (args .log_level .lower (), logging .INFO ),
48+ )
49+
3650 processors = [
3751 structlog .contextvars .merge_contextvars ,
3852 structlog .processors .add_log_level ,
3953 structlog .processors .StackInfoRenderer (),
4054 structlog .dev .set_exc_info ,
41- structlog .processors .TimeStamper (fmt = "%Y-%m-%d %H:%M:%S" , utc = False ),
55+ structlog .stdlib .filter_by_level ,
56+ structlog .processors .TimeStamper (fmt = "%Y-%m-%dT%H:%M:%SZ" , utc = True ),
4257 ]
4358 if args .log_format == "text" :
4459 processors .append (
@@ -58,9 +73,7 @@ def get_logger(args):
5873 else :
5974 processors .append (structlog .processors .JSONRenderer ())
6075
61- # if args.log_format == "json":
62- # processors.append(structlog.processors.JSONRenderer())
63- log = structlog .get_logger (processors = processors )
76+ log = wrap_logger (logging .getLogger (), processors = processors )
6477 return log
6578
6679
@@ -73,16 +86,42 @@ def run(self, args):
7386 subparsers = parser .add_subparsers (dest = "command" , required = True )
7487
7588 serve_parser = subparsers .add_parser ("serve" , help = "Start plugin server" )
89+ serve_parser .add_argument (
90+ "--log-format" ,
91+ type = str ,
92+ default = "text" ,
93+ choices = ["text" , "json" ],
94+ help = "logging format" ,
95+ )
7696 serve_parser .add_argument (
7797 "--log-level" ,
7898 type = str ,
7999 default = "info" ,
80100 choices = ["trace" , "debug" , "info" , "warn" , "error" ],
81101 help = "log level" ,
82102 )
103+
104+ # ignored for now
83105 serve_parser .add_argument (
84- "--log-format" , type = str , default = "text" , choices = ["text" , "json" ]
106+ "--no-sentry" ,
107+ action = "store_true" ,
108+ help = "disable sentry (placeholder for future use)" ,
85109 )
110+ # ignored for now
111+ serve_parser .add_argument (
112+ "--otel-endpoint" ,
113+ type = str ,
114+ default = "" ,
115+ help = "Open Telemetry HTTP collector endpoint (placeholder for future use)" ,
116+ )
117+ # ignored for now
118+ serve_parser .add_argument (
119+ "--otel-endpoint-insecure" ,
120+ type = str ,
121+ default = "" ,
122+ help = "Open Telemetry HTTP collector endpoint (for development only) (placeholder for future use)" ,
123+ )
124+
86125 serve_parser .add_argument (
87126 "--address" ,
88127 type = str ,
@@ -140,15 +179,16 @@ def _serve(self, args):
140179 PluginServicer (self ._plugin , logger ), self ._server
141180 )
142181 self ._server .add_insecure_port (args .address )
143- print ("Starting server. Listening on " + args .address )
182+ logger . info ("Starting server" , address = args .address )
144183 self ._server .start ()
145184 self ._server .wait_for_termination ()
146185
147186 def stop (self ):
148187 self ._server .stop (5 )
149188
150189 def _generate_docs (self , args ):
151- print ("Generating docs in format: " + args .format )
190+ logger = get_logger (args )
191+ logger .info ("Generating docs" , format = args .format )
152192 generator = Generator (
153193 self ._plugin .name (),
154194 self ._plugin .get_tables (
0 commit comments