@@ -63,6 +63,68 @@ public static async Task Entry(string[] args, Action initAction, Action<LogOptio
6363 }
6464
6565 LogOptions . Default . LogType = serverType ;
66+ LogOptions . Default . GrafanaLokiLabels = new Dictionary < string , string > ( ) ;
67+
68+ // 将LauncherOptions的所有属性添加到标签中
69+ var properties = typeof ( LauncherOptions ) . GetProperties ( ) ;
70+ foreach ( var property in properties )
71+ {
72+ var grafanaLokiLabelTagAttribute = property . GetCustomAttribute < GrafanaLokiLabelTagAttribute > ( ) ;
73+ if ( grafanaLokiLabelTagAttribute == null )
74+ {
75+ continue ;
76+ }
77+
78+ var value = property . GetValue ( launcherOptions ) ? . ToString ( ) ;
79+ if ( string . IsNullOrEmpty ( value ) )
80+ {
81+ continue ;
82+ }
83+
84+ if ( ! LogOptions . Default . GrafanaLokiLabels . TryAdd ( property . Name , value ) )
85+ {
86+ LogHelper . WarnConsole ( $ "Grafana Loki 标签 { property . Name } 已存在,将被忽略") ;
87+ }
88+ }
89+
90+ if ( launcherOptions != null )
91+ {
92+ // 设置日志配置信息
93+ LogOptions . Default . IsConsole = launcherOptions . LogIsConsole ;
94+ LogOptions . Default . IsGrafanaLoki = launcherOptions . LogIsGrafanaLoki ;
95+ LogOptions . Default . GrafanaLokiUrl = launcherOptions . LogGrafanaLokiUrl ;
96+ LogOptions . Default . GrafanaLokiUsername = launcherOptions . LogGrafanaLokiUsername ;
97+ LogOptions . Default . GrafanaLokiPassword = launcherOptions . LogGrafanaLokiPassword ;
98+ LogOptions . Default . RetainedFileCountLimit = launcherOptions . LogRetainedFileCountLimit ;
99+ LogOptions . Default . IsFileSizeLimit = launcherOptions . LogIsFileSizeLimit ;
100+ LogOptions . Default . FileSizeLimitBytes = launcherOptions . LogFileSizeLimitBytes ;
101+ LogOptions . Default . LogEventLevel = launcherOptions . LogEventLevel ;
102+ LogOptions . Default . RollingInterval = launcherOptions . LogRollingInterval ;
103+ if ( launcherOptions . LogGrafanaLokiLabels != null )
104+ {
105+ // 处理额外的自定义标签
106+ var lokiLabels = launcherOptions . LogGrafanaLokiLabels . ToList ( ) ;
107+ var count = lokiLabels . Count ;
108+ // 检查标签数量是否成对
109+ if ( count % 2 != 0 )
110+ {
111+ LogHelper . WarnConsole ( "Grafana Loki 标签数量不是成对的,将忽略最后一个标签" ) ;
112+ count -- ;
113+ }
114+
115+ for ( int i = 0 ; i < count ; i += 2 )
116+ {
117+ var lokiLabelKey = lokiLabels [ i ] ;
118+ var lokiLabelValue = lokiLabels [ i + 1 ] ;
119+ // 检查key是否已存在
120+ if ( ! LogOptions . Default . GrafanaLokiLabels . TryAdd ( lokiLabelKey , lokiLabelValue ) )
121+ {
122+ LogHelper . WarnConsole ( $ "Grafana Loki 标签 { lokiLabelKey } 已存在,将被忽略") ;
123+ }
124+ }
125+ }
126+ }
127+
66128 logConfiguration ? . Invoke ( LogOptions . Default ) ;
67129 LogHandler . Create ( LogOptions . Default ) ;
68130
0 commit comments