Skip to content

Commit 5697fa1

Browse files
committed
fix(actors): 改进日志记录,使用结构化参数并修复异常处理
- 将日志调用从本地化字符串拼接改为结构化参数格式,提升可读性和性能 - 修复异常处理中重复的本地化字符串拼接,避免潜在的性能问题 - 统一异常变量命名,将 `e` 改为更具描述性的 `exception` - 优化定时保存任务列表,预分配容量以提高性能
1 parent a5c1e18 commit 5697fa1

2 files changed

Lines changed: 21 additions & 22 deletions

File tree

GameFrameX.Core/Actors/Actor.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ async Task Worker()
172172
}
173173
catch (Exception e)
174174
{
175-
LogHelper.Fatal(e);
175+
LogHelper.Fatal(e, "Actor.GetComponentAgent, Active component failed, actorId: {actorId}, componentType: {componentType}", Id, compType.FullName);
176176
}
177177

178178
try
@@ -183,7 +183,7 @@ async Task Worker()
183183
}
184184
catch (Exception e)
185185
{
186-
LogHelper.Fatal(e);
186+
LogHelper.Fatal(e, "Actor.GetComponentAgent, Active component failed, actorId: {actorId}, componentType: {componentType}", Id, compType.FullName);
187187
}
188188
}
189189

@@ -209,7 +209,7 @@ async Task Worker()
209209
}
210210
catch (Exception e)
211211
{
212-
LogHelper.Fatal(e);
212+
LogHelper.Fatal(e, "Actor.GetComponentAgent, Active component failed, actorId: {actorId}, componentType: {componentType}", Id, compType.FullName);
213213
}
214214

215215
try
@@ -220,7 +220,7 @@ async Task Worker()
220220
}
221221
catch (Exception e)
222222
{
223-
LogHelper.Fatal(e);
223+
LogHelper.Fatal(e, "Actor.GetComponentAgent, Active component failed, actorId: {actorId}, componentType: {componentType}", Id, compType.FullName);
224224
}
225225
}
226226

@@ -249,7 +249,7 @@ public async Task CrossDay(int openServerDay)
249249
}
250250
catch (Exception e)
251251
{
252-
LogHelper.Error(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.Actor.CrossDayFailed, agent.GetType().FullName, Id, Type, e));
252+
LogHelper.Error(e, "Actor.CrossDay, CrossDay failed, componentType: {componentType}, actorId: {actorId}, actorType: {actorType}", agent.GetType().FullName, Id, Type);
253253
}
254254
}
255255
}
@@ -349,14 +349,14 @@ public Task OnRecycle()
349349
catch (Exception ex)
350350
{
351351
// 记录回调执行异常但继续执行其他回调
352-
LogHelper.Error(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.Actor.RecycleCallbackFailed, Id, Type, ex));
352+
LogHelper.Error(ex, "Actor.OnRecycle, RecycleCallback failed, actorId: {actorId}, actorType: {actorType}", Id, Type);
353353
}
354354
}
355355
}
356356
catch (Exception ex)
357357
{
358358
// 记录整体执行异常
359-
LogHelper.Error(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.Actor.RecycleFailed, Id, Type, ex));
359+
LogHelper.Error(ex, "Actor.OnRecycle, Recycle failed, actorId: {actorId}, actorType: {actorType}", Id, Type);
360360
}
361361
finally
362362
{

GameFrameX.Core/Actors/ActorManager.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ async Task<bool> Work()
287287
await actor.Inactive();
288288
await actor.OnRecycle();
289289
ActorMap.TryRemove(actor.Id, out var _);
290-
LogHelper.Debug(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.Actor.Recycled, actor.Id, actor.Type));
290+
LogHelper.Debug("ActorManager.CheckIdle, Actor recycled, actorId: {actorId}, actorType: {actorType}, message: {message}", actor.Id, actor.Type, LocalizationService.GetString(GameFrameX.Localization.Keys.Core.Actor.Recycled, actor.Id, actor.Type));
291291
}
292292
else
293293
{
@@ -330,11 +330,11 @@ async void Save()
330330
}
331331

332332
await Task.WhenAll(taskList);
333-
LogHelper.Info(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.SaveAllStateTime, (DateTime.Now - begin).TotalMilliseconds));
333+
LogHelper.Info("ActorManager.SaveAll, Save all actor state time: {saveAllStateTime} ms, message: {message}", (DateTime.Now - begin).TotalMilliseconds, LocalizationService.GetString(Localization.Keys.Core.ActorManager.SaveAllStateTime, (DateTime.Now - begin).TotalMilliseconds));
334334
}
335335
catch (Exception e)
336336
{
337-
LogHelper.Error(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.SaveAllStateError, e));
337+
LogHelper.Error("ActorManager.SaveAll, Save all actor state, message: {message}, error: {exception}", LocalizationService.GetString(Localization.Keys.Core.ActorManager.SaveAllStateError, e), e);
338338
throw;
339339
}
340340
}
@@ -348,7 +348,7 @@ public static async Task TimerSave()
348348
try
349349
{
350350
var count = 0;
351-
var taskList = new List<Task>();
351+
var taskList = new List<Task>(2048);
352352
foreach (var actor in ActorMap.Values)
353353
{
354354
// 如果定时回存的过程中关服了,直接终止定时回存,因为关服时会调用SaveAll以保证数据回存
@@ -371,15 +371,14 @@ async void Work()
371371
{
372372
await Task.WhenAll(taskList);
373373
await Task.Delay(1000);
374-
taskList = new List<Task>();
374+
taskList = new List<Task>(2048);
375375
count = 0;
376376
}
377377
}
378378
}
379-
catch (Exception e)
379+
catch (Exception exception)
380380
{
381-
LogHelper.Info(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.TimerSaveStateError));
382-
LogHelper.Error(e.ToString());
381+
LogHelper.Error("ActorManager.TimerSave, Timer save all actor state error, message: {message}, error: {exception}", LocalizationService.GetString(Localization.Keys.Core.ActorManager.TimerSaveStateError), exception);
383382
}
384383
}
385384

@@ -425,7 +424,7 @@ public static async Task CrossDay(int openServerDay, ushort driverActorType)
425424

426425
async Task Work()
427426
{
428-
LogHelper.Info(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.GlobalActorCrossDay, actor.Type));
427+
LogHelper.Info("ActorManager.CrossDay, CrossDay actor, actorId: {actorId}, actorType: {actorType}, message: {message}", actor.Id, actor.Type, LocalizationService.GetString(Localization.Keys.Core.ActorManager.GlobalActorCrossDay, actor.Type));
429428
await actor.CrossDay(openServerDay);
430429
Interlocked.Increment(ref a);
431430
}
@@ -438,15 +437,15 @@ async Task Work()
438437
{
439438
if ((DateTime.Now - begin).TotalSeconds > CrossDayGlobalWaitSeconds)
440439
{
441-
LogHelper.Warning(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.GlobalCompCrossDayTimeout, CrossDayGlobalWaitSeconds));
440+
LogHelper.Warning("ActorManager.CrossDay, GlobalCompCrossDayTimeout, timeout: {timeout}, message: {message}", CrossDayGlobalWaitSeconds, LocalizationService.GetString(Localization.Keys.Core.ActorManager.GlobalCompCrossDayTimeout, CrossDayGlobalWaitSeconds));
442441
break;
443442
}
444443

445444
await Task.Delay(TimeSpan.FromMilliseconds(10));
446445
}
447446

448447
var globalCost = (DateTime.Now - begin).TotalMilliseconds;
449-
LogHelper.Info(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.GlobalCompCrossDayComplete, globalCost));
448+
LogHelper.Info("ActorManager.CrossDay, GlobalCompCrossDayComplete, cost: {cost}, message: {message}", globalCost, LocalizationService.GetString(Localization.Keys.Core.ActorManager.GlobalCompCrossDayComplete, globalCost));
450449
a = 0;
451450
b = 0;
452451
foreach (var actor in ActorMap.Values)
@@ -469,15 +468,15 @@ async Task Work()
469468
{
470469
if ((DateTime.Now - begin).TotalSeconds > CrossDayNotRoleWaitSeconds)
471470
{
472-
LogHelper.Warning(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.NonPlayerCompCrossDayTimeout, CrossDayNotRoleWaitSeconds));
471+
LogHelper.Warning("ActorManager.CrossDay, NonPlayerCompCrossDayTimeout, timeout: {timeout}, message: {message}", CrossDayNotRoleWaitSeconds, LocalizationService.GetString(Localization.Keys.Core.ActorManager.NonPlayerCompCrossDayTimeout, CrossDayNotRoleWaitSeconds));
473472
break;
474473
}
475474

476475
await Task.Delay(TimeSpan.FromMilliseconds(10));
477476
}
478477

479478
var otherCost = (DateTime.Now - begin).TotalMilliseconds - globalCost;
480-
LogHelper.Info(LocalizationService.GetString(GameFrameX.Localization.Keys.Core.ActorManager.NonPlayerCompCrossDayComplete, otherCost));
479+
LogHelper.Info("ActorManager.CrossDay, NonPlayerCompCrossDayComplete, cost: {cost}, message: {message}", otherCost, LocalizationService.GetString(Localization.Keys.Core.ActorManager.NonPlayerCompCrossDayComplete, otherCost));
481480
}
482481

483482
/// <summary>
@@ -522,9 +521,9 @@ public static void ActorForEach(Action<IActor> action)
522521
{
523522
action.Invoke(actor);
524523
}
525-
catch (Exception e)
524+
catch (Exception exception)
526525
{
527-
LogHelper.Error(e);
526+
LogHelper.Error("ActorManager.ActorForEach, error, actorId: {actorId}, actorType: {actorType}, exception: {exception}", actor.Id, actor.Type, exception);
528527
}
529528
}
530529
}

0 commit comments

Comments
 (0)