@@ -26,29 +26,43 @@ import (
2626)
2727
2828func init () {
29+ // Register a group of Bean definitions during application initialization.
30+ // GroupRegister dynamically creates multiple Beans based on the configuration (conf.Properties),
31+ // making it ideal for scenarios like setting up multiple loggers, clients, or resources from config.
2932 gs .GroupRegister (func (p conf.Properties ) ([]* gs.BeanDefinition , error ) {
33+
3034 var loggers map [string ]struct {
31- Name string `value:"${name}"`
32- Dir string `value:"${dir}"`
35+ Name string `value:"${name}"` // Log file name
36+ Dir string `value:"${dir}"` // Directory where the log file will be stored
3337 }
38+
39+ // Bind configuration from the "${log}" node into the 'loggers' map.
3440 err := p .Bind (& loggers , "${log}" )
3541 if err != nil {
3642 return nil , err
3743 }
44+
3845 var ret []* gs.BeanDefinition
3946 for k , l := range loggers {
4047 var (
4148 f * os.File
4249 flag = os .O_WRONLY | os .O_CREATE | os .O_APPEND
4350 )
51+
52+ // Open (or create) the log file
4453 f , err = os .OpenFile (filepath .Join (l .Dir , l .Name ), flag , os .ModePerm )
4554 if err != nil {
4655 return nil , err
4756 }
57+
58+ // Create a new slog.Logger instance with a text handler writing to the file
4859 o := slog .New (slog .NewTextHandler (f , nil ))
60+
61+ // Wrap the logger into a Bean with a destroy hook to close the file
4962 b := gs .NewBean (o ).Name (k ).Destroy (func (_ * slog.Logger ) {
5063 _ = f .Close ()
5164 })
65+
5266 ret = append (ret , b )
5367 }
5468 return ret , nil
0 commit comments