@@ -514,6 +514,27 @@ def get_setting(self, name: str):
514514 self ._log_settings [name ] = default
515515 return default
516516
517+ def make_record (
518+ self ,
519+ name ,
520+ level ,
521+ fn ,
522+ lno ,
523+ msg ,
524+ args ,
525+ exc_info ,
526+ func = None ,
527+ extra = None ,
528+ sinfo = None ,
529+ ) -> logging .LogRecord :
530+ rv = logging .LogRecord (name , level , fn , lno , msg , args , exc_info , func , sinfo )
531+ if extra is not None :
532+ for key in extra :
533+ if key in rv .__dict__ :
534+ continue
535+ rv .__dict__ [key ] = extra [key ]
536+ return rv
537+
517538 def write_queue_consumer (self ):
518539 self .send_log ("start write_queue_consumer daemon" )
519540 stopped = False
@@ -541,20 +562,29 @@ def write_queue_consumer(self):
541562 self .send_log ("stopping write_worker daemon(signal)" )
542563 stopped = True
543564 continue
544- name , record = q_msg .name , q_msg .record
565+ name , record_dict = q_msg .name , q_msg .record
566+ if self .save_setting (name , record_dict ):
567+ # ignore msg only for setting
568+ continue
545569 try :
546- log_record = logging .LogRecord (
547- level = record .get ("levelno" , 0 ), ** record
570+ log_record = self .make_record (
571+ name = name ,
572+ level = record_dict .get ("levelno" , logging .INFO ),
573+ fn = record_dict .get ("pathname" , "" ),
574+ lno = record_dict .get ("lineno" , 0 ),
575+ msg = record_dict .get ("msg" , "" ),
576+ args = record_dict .get ("args" , ()),
577+ exc_info = record_dict .get ("exc_info" , None ),
578+ func = record_dict .get ("funcName" , None ),
579+ extra = record_dict ,
580+ sinfo = record_dict .get ("stack_info" , None ),
548581 )
549582 except Exception as e :
550583 self .send_log (
551- f"`{ name } ` send invalid record.__dict__, { e !r} : { repr (record )[:100 ]} " ,
584+ f"`{ name } ` send invalid record.__dict__, { e !r} : { repr (record_dict )[:100 ]} " ,
552585 level = logging .WARNING ,
553586 )
554587 continue
555- if self .save_setting (name , record ):
556- # ignore msg only for setting
557- continue
558588 if name in new_lines :
559589 new_lines [name ].append (log_record )
560590 else :
@@ -565,7 +595,13 @@ def write_queue_consumer(self):
565595 setting = self .get_setting (name )
566596 _format = setting .formatter .format
567597 lines = [
568- (record .levelno , _format (record )) for record in record_list
598+ (
599+ record .levelno ,
600+ record .msg
601+ if getattr (record , "nofmt" , False )
602+ else _format (record ),
603+ )
604+ for record in record_list
569605 ]
570606 targets = self .get_targets (
571607 name ,
@@ -902,20 +938,27 @@ async def async_test():
902938 for i in range (5 ):
903939 logger .info (f"log server test message { i + 1 } " )
904940 logger .error (f"log server test message { i + 1 } " )
905- # shutil.rmtree("logs", ignore_errors=True)
941+ logger .info ("test nofmt: " , extra = {"nofmt" : True })
942+ for i in range (5 ):
943+ logger .info (f"{ i } " , extra = {"nofmt" : True })
944+ shutil .rmtree ("logs" , ignore_errors = True )
906945
907946
908947def sync_test ():
909- # return asyncio.run(async_test())
948+ asyncio .run (async_test ())
910949 with LogServer (log_dir = "logs" ):
911950 logger = get_logger ("test_sync" , level_specs = [logging .ERROR , 13 ])
912951 for i in range (5 ):
913952 logger .info (f"log server test message { i + 1 } " )
914- # shutil.rmtree("logs", ignore_errors=True)
953+ logger .log (13 , "log server test message level 13" )
954+ logger .info ("test nofmt: " , extra = {"nofmt" : True })
955+ for i in range (5 ):
956+ logger .info (f"{ i } " , extra = {"nofmt" : True })
957+ shutil .rmtree ("logs" , ignore_errors = True )
915958
916959
917960def entrypoint ():
918- return sync_test ()
961+ # return sync_test()
919962 return asyncio .run (main ())
920963
921964
0 commit comments