forked from AcaMate/AcaMate_Web
[✨] 로거 관리 서비스 추가
1. Console에 바로 나오던 메세지들 개발 환경에 따라 나오게 필터링 하는 서비스 개발 2. script 쪽에도 추가 하여 js 에서도 필터링 되게 구현
This commit is contained in:
parent
def25d2206
commit
e8b942a633
41
Program.cs
41
Program.cs
|
@ -6,42 +6,41 @@ using Front;
|
||||||
using Front.Program.Services;
|
using Front.Program.Services;
|
||||||
using Front.Program.ViewModels;
|
using Front.Program.ViewModels;
|
||||||
|
|
||||||
const bool local = true;
|
|
||||||
var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
||||||
|
|
||||||
Func<bool, Uri> checkLocal = (isLocal) =>
|
// 로컬 또는 Dev 환경인지 확인
|
||||||
{
|
var currentUri = new Uri(builder.HostEnvironment.BaseAddress);
|
||||||
if (isLocal) return new Uri("http://0.0.0.0:5144");
|
bool isLocal = currentUri.Host == "0.0.0.0" || currentUri.Port.ToString() == "5144";
|
||||||
else return builder.HostEnvironment.IsDevelopment() ? new Uri("https://devacamate.ipstein.myds.me") : new Uri("https://acamate.ipstein.myds.me");
|
bool isDev = isLocal ||
|
||||||
};
|
builder.HostEnvironment.IsDevelopment();
|
||||||
|
|
||||||
|
Uri CheckLocal()
|
||||||
|
{
|
||||||
|
if (isLocal)
|
||||||
|
return new Uri("http://0.0.0.0:5144");
|
||||||
|
else
|
||||||
|
return builder.HostEnvironment.IsDevelopment() ?
|
||||||
|
new Uri("https://devacamate.ipstein.myds.me") :
|
||||||
|
new Uri("https://acamate.ipstein.myds.me");
|
||||||
|
}
|
||||||
|
|
||||||
|
LoggerService.Initialize(isDev);
|
||||||
|
|
||||||
if (local)
|
|
||||||
{
|
|
||||||
builder.Logging.SetMinimumLevel(LogLevel.Debug);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
builder.Logging.SetMinimumLevel(builder.HostEnvironment.IsDevelopment() ? LogLevel.Debug: LogLevel.Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.RootComponents.Add<App>("#app");
|
builder.RootComponents.Add<App>("#app");
|
||||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||||
|
|
||||||
// 설정 파일 로드
|
// 설정 파일 로드
|
||||||
// builder.Configuration.AddJsonFile("appsettings.json", optional: false);
|
|
||||||
builder.Configuration.AddJsonFile($"appsettings.{builder.HostEnvironment.Environment}.json", optional: true);
|
builder.Configuration.AddJsonFile($"appsettings.{builder.HostEnvironment.Environment}.json", optional: true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
builder.Services.AddScoped(sp => //new HttpClient
|
builder.Services.AddScoped(sp => //new HttpClient
|
||||||
{
|
{
|
||||||
var config = builder.Configuration;
|
var config = builder.Configuration;
|
||||||
var http = new HttpClient
|
var http = new HttpClient
|
||||||
{
|
{
|
||||||
// 서버 올릴때는 이 부분을 꼭 확인 할 것
|
BaseAddress = CheckLocal()
|
||||||
// true 면 로컬 / false 면 배포
|
|
||||||
BaseAddress = checkLocal(local)
|
|
||||||
};
|
};
|
||||||
return http;
|
return http;
|
||||||
});
|
});
|
||||||
|
@ -51,8 +50,10 @@ builder.Services.AddScoped<APIService>();
|
||||||
builder.Services.AddScoped<SecureService>();
|
builder.Services.AddScoped<SecureService>();
|
||||||
builder.Services.AddScoped<StorageService>();
|
builder.Services.AddScoped<StorageService>();
|
||||||
builder.Services.AddScoped<QueryParamService>();
|
builder.Services.AddScoped<QueryParamService>();
|
||||||
|
|
||||||
builder.Services.AddScoped<LoadingService>();
|
builder.Services.AddScoped<LoadingService>();
|
||||||
builder.Services.AddScoped<UserStateService>();
|
builder.Services.AddScoped<UserStateService>();
|
||||||
|
|
||||||
|
|
||||||
|
// builder.Services.AddSingleton<LoggerService>(sp
|
||||||
|
|
||||||
await builder.Build().RunAsync();
|
await builder.Build().RunAsync();
|
||||||
|
|
|
@ -35,7 +35,7 @@ public partial class MainLayout : LayoutComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
if(!UserStateService.isLogin || UserStateService.UserData == null)
|
if(!UserStateService.isLogin || UserStateService.UserData == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("로그인 상태가 아닙니다. 초기로 돌립니다.");
|
LoggerService.Write("로그인 상태가 아닙니다. 초기로 돌립니다.");
|
||||||
if (isIntro)
|
if (isIntro)
|
||||||
{
|
{
|
||||||
} //await UserStateService.ClearUserStateAsnyc();
|
} //await UserStateService.ClearUserStateAsnyc();
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class APIService(HttpClient http,
|
||||||
args
|
args
|
||||||
);
|
);
|
||||||
|
|
||||||
Console.WriteLine($"JSON 응답: {response.ToString()}");
|
LoggerService.Write($"JSON 응답: {response.ToString()}");
|
||||||
|
|
||||||
if (response.TryGetProperty("data", out var dataElement))
|
if (response.TryGetProperty("data", out var dataElement))
|
||||||
{
|
{
|
||||||
|
@ -55,8 +55,8 @@ public class APIService(HttpClient http,
|
||||||
var dataJson = dataElement.ToString();
|
var dataJson = dataElement.ToString();
|
||||||
var serialData = JsonSerializer.Deserialize<T>(dataJson,
|
var serialData = JsonSerializer.Deserialize<T>(dataJson,
|
||||||
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
||||||
Console.WriteLine("[GetConnectServerAsnyc] 사용자 데이터 Json: " + dataJson + dataJson.GetType());
|
LoggerService.Write("[GetConnectServerAsnyc] 사용자 데이터 Json: " + dataJson + dataJson.GetType());
|
||||||
Console.WriteLine("[GetConnectServerAsnyc] 사용자 데이터 변환: " + serialData.ToString());;
|
LoggerService.Write("[GetConnectServerAsnyc] 사용자 데이터 변환: " + serialData.ToString());;
|
||||||
|
|
||||||
if (serialData != null)
|
if (serialData != null)
|
||||||
{
|
{
|
||||||
|
@ -66,16 +66,16 @@ public class APIService(HttpClient http,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("사용자 데이터에 필수 정보가 없습니다");
|
LoggerService.Write("사용자 데이터에 필수 정보가 없습니다");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"사용자 데이터 처리 중 오류: {ex.Message}");
|
LoggerService.Write($"사용자 데이터 처리 중 오류: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("데이터를 찾을 수 없습니다");
|
LoggerService.Write("데이터를 찾을 수 없습니다");
|
||||||
return (false, null, default);
|
return (false, null, default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
35
Program/Services/LoggerService.cs
Normal file
35
Program/Services/LoggerService.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Microsoft.JSInterop;
|
||||||
|
|
||||||
|
namespace Front.Program.Services;
|
||||||
|
|
||||||
|
/// 개발기에서는 Debug 로그부터 모든 로그를 사용할 수 있지만, 운영에서는 Error 로그만 사용합니다.
|
||||||
|
// enum SystemLogLevel
|
||||||
|
// {
|
||||||
|
// Debug, // 0 : 상세 로그 - 파란색(#0000FF)
|
||||||
|
// Info, // 1 : 일반 로그 - 회색(#808080)
|
||||||
|
// Success, // 2 : 성공 로그 - 초록색(#008000)
|
||||||
|
// Warning, // 3 : 경고 로그 - 노란색(#FFFF00)
|
||||||
|
// Error // 4 : 오류 로그 - 빨간색(#FF0000)
|
||||||
|
// }
|
||||||
|
|
||||||
|
public class LoggerService
|
||||||
|
{
|
||||||
|
private static bool _isDev;
|
||||||
|
|
||||||
|
public static void Initialize(bool isDev)
|
||||||
|
{
|
||||||
|
_isDev = isDev;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LogToConsole(string message)//, string fontWeight = "normal")
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] - {message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Write(string message)
|
||||||
|
{
|
||||||
|
if (_isDev)
|
||||||
|
LogToConsole(message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,16 +25,16 @@ public class QueryParamService
|
||||||
{
|
{
|
||||||
if (parameters.TryGetValue("auth", out var auth))
|
if (parameters.TryGetValue("auth", out var auth))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"auth 파라미터 값: {auth}");
|
LoggerService.Write($"auth 파라미터 값: {auth}");
|
||||||
if (auth == "true")
|
if (auth == "true")
|
||||||
{
|
{
|
||||||
await storageService.SetItemAsync("IsLogin", "true");
|
await storageService.SetItemAsync("IsLogin", "true");
|
||||||
Console.WriteLine("로그인 상태를 true로 설정했습니다.");
|
LoggerService.Write("로그인 상태를 true로 설정했습니다.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await storageService.RemoveItemAsync("IsLogin");
|
await storageService.RemoveItemAsync("IsLogin");
|
||||||
Console.WriteLine("로그인 상태를 제거했습니다.");
|
LoggerService.Write("로그인 상태를 제거했습니다.");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class UserStateService(StorageService _storageService, SecureService _sec
|
||||||
var userData = JsonSerializer.Deserialize<UserData>(decUserData,
|
var userData = JsonSerializer.Deserialize<UserData>(decUserData,
|
||||||
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
||||||
|
|
||||||
Console.WriteLine($"UserData: {userData.Name}, {userData.Type}");
|
LoggerService.Write($"UserData: {userData.Name}, {userData.Type}");
|
||||||
|
|
||||||
|
|
||||||
return (true, userData);
|
return (true, userData);
|
||||||
|
@ -41,7 +41,7 @@ public class UserStateService(StorageService _storageService, SecureService _sec
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Error [GetUserDataFormAsync] : {ex.Message}");
|
LoggerService.Write($"Error [GetUserDataFormAsync] : {ex.Message}");
|
||||||
return (false, null);
|
return (false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ public class UserStateService(StorageService _storageService, SecureService _sec
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine("GetUserDataAsync 호출됨");
|
LoggerService.Write("GetUserDataAsync 호출됨");
|
||||||
// 로그인 상태가 아니라면 애초에 할 필요 없음
|
// 로그인 상태가 아니라면 애초에 할 필요 없음
|
||||||
if (await _storageService.GetItemAsync("IsLogin") != "true")
|
if (await _storageService.GetItemAsync("IsLogin") != "true")
|
||||||
{
|
{
|
||||||
|
@ -81,7 +81,7 @@ public class UserStateService(StorageService _storageService, SecureService _sec
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 사용자 데이터를 로드하지 못했을 때의 로직
|
// 사용자 데이터를 로드하지 못했을 때의 로직
|
||||||
Console.WriteLine("사용자 데이터를 로드하지 못했습니다.");
|
LoggerService.Write("사용자 데이터를 로드하지 못했습니다.");
|
||||||
isLogin = false;
|
isLogin = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -101,13 +101,13 @@ public class UserStateService(StorageService _storageService, SecureService _sec
|
||||||
foreach (var key in keys)
|
foreach (var key in keys)
|
||||||
{
|
{
|
||||||
var remove = await _storageService.RemoveItemAsync(key);
|
var remove = await _storageService.RemoveItemAsync(key);
|
||||||
Console.WriteLine("사용자 데이터 삭제" + (remove ? "성공 :" : "실패 :") + key);
|
LoggerService.Write("사용자 데이터 삭제" + (remove ? "성공 :" : "실패 :") + key);
|
||||||
}
|
}
|
||||||
ClearStateData();
|
ClearStateData();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"사용자 데이터 삭제 중 오류: {ex.Message}");
|
LoggerService.Write($"사용자 데이터 삭제 중 오류: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,13 +33,18 @@ public partial class AcademyIntro : ComponentBase, IDisposable
|
||||||
if (aca.simpleAcademy.Count > 0)
|
if (aca.simpleAcademy.Count > 0)
|
||||||
{
|
{
|
||||||
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
||||||
Console.WriteLine($"academyItems: {UserStateService.academyItems.Length}개");
|
LoggerService.Write($"academyItems: {UserStateService.academyItems.Length}개");
|
||||||
}
|
}
|
||||||
|
LoggerService.Write("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
||||||
Console.WriteLine("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
Console.WriteLine($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
{
|
||||||
|
LoggerService.Write("서버 세션에서 불러오기 실패");
|
||||||
|
await UserStateService.ClearUserStateAsnyc();
|
||||||
|
|
||||||
|
}
|
||||||
|
LoggerService.Write($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -64,7 +69,7 @@ public partial class AcademyIntro : ComponentBase, IDisposable
|
||||||
_isProcessing = true;
|
_isProcessing = true;
|
||||||
|
|
||||||
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
||||||
Console.WriteLine($"리다이렉트된 URI: {uri}");
|
LoggerService.Write($"리다이렉트된 URI: {uri}");
|
||||||
|
|
||||||
// 쿼리 파라미터가 있는 경우에만 처리
|
// 쿼리 파라미터가 있는 경우에만 처리
|
||||||
if (!string.IsNullOrEmpty(uri.Query))
|
if (!string.IsNullOrEmpty(uri.Query))
|
||||||
|
@ -83,22 +88,22 @@ public partial class AcademyIntro : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
UserStateService.academyItems = aca.simpleAcademy.ToArray();
|
||||||
|
|
||||||
Console.WriteLine($"academyItems: {UserStateService.academyItems.Length}개");
|
LoggerService.Write($"academyItems: {UserStateService.academyItems.Length}개");
|
||||||
}
|
}
|
||||||
Console.WriteLine("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
LoggerService.Write("아카데미 정보가 없습니다. 로그인 상태를 확인해주세요.");
|
||||||
}
|
}
|
||||||
Console.WriteLine($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
LoggerService.Write($"academy: {string.Join(", ", UserStateService.academyItems.Select(a => a.name))}");
|
||||||
|
|
||||||
// // 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
|
// // 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
|
||||||
var baseUri = uri.GetLeftPart(UriPartial.Path);
|
var baseUri = uri.GetLeftPart(UriPartial.Path);
|
||||||
Console.WriteLine($"리다이렉트할 URI: {baseUri}");
|
LoggerService.Write($"리다이렉트할 URI: {baseUri}");
|
||||||
// await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
|
// await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
|
||||||
Navigation.NavigateTo(baseUri, forceLoad: false);
|
Navigation.NavigateTo(baseUri, forceLoad: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Error in HandleLocationChanged: {ex.Message}");
|
LoggerService.Write($"Error in HandleLocationChanged: {ex.Message}");
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,13 +6,14 @@ namespace Front.Program.Views.Academy;
|
||||||
|
|
||||||
public partial class AcademyMain : ComponentBase
|
public partial class AcademyMain : ComponentBase
|
||||||
{
|
{
|
||||||
[Inject] private ILogger<AcademyMain> Logger { get; set; } = default!;
|
|
||||||
[Inject] NavigationManager Navigation { get; set; } = default!;
|
[Inject] NavigationManager Navigation { get; set; } = default!;
|
||||||
[Inject] UserStateService UserStateService { get; set; } = default!;
|
[Inject] UserStateService UserStateService { get; set; } = default!;
|
||||||
[Inject] QueryParamService QueryParamService { get; set; } = default!;
|
[Inject] QueryParamService QueryParamService { get; set; } = default!;
|
||||||
[Inject] StorageService StorageService { get; set; } = default!;
|
[Inject] StorageService StorageService { get; set; } = default!;
|
||||||
[Inject] LoadingService LoadingService { get; set; } = default!;
|
[Inject] LoadingService LoadingService { get; set; } = default!;
|
||||||
|
|
||||||
|
// [Inject] LoggerService Logger {get; set;} = default!;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
// 초기화 작업
|
// 초기화 작업
|
||||||
|
@ -29,20 +30,18 @@ public partial class AcademyMain : ComponentBase
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// URL 파라미터 처리
|
// URL 파라미터 처리
|
||||||
|
LoggerService.Write("로거 테스트");
|
||||||
|
|
||||||
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
||||||
Logger.LogDebug("DEBUG");
|
|
||||||
Logger.LogError("ERROR");
|
|
||||||
|
|
||||||
|
LoggerService.Write("쿼리 있나?");
|
||||||
Console.WriteLine("쿼리 있나?");
|
|
||||||
// 쿼리 파라미터가 있는 경우에만 처리
|
// 쿼리 파라미터가 있는 경우에만 처리
|
||||||
if (!string.IsNullOrEmpty(uri.Query))
|
if (!string.IsNullOrEmpty(uri.Query))
|
||||||
{
|
{
|
||||||
var queryParam = QueryParamService.ParseQueryParam(uri);
|
var queryParam = QueryParamService.ParseQueryParam(uri);
|
||||||
Console.WriteLine($"Parsed Query Parameters: {string.Join(", ", queryParam.Select(kv => $"{kv.Key}={kv.Value}"))}");
|
LoggerService.Write($"Parsed Query Parameters: {string.Join(", ", queryParam.Select(kv => $"{kv.Key}={kv.Value}"))}");
|
||||||
}
|
}
|
||||||
Console.WriteLine("쿼리 검사");
|
LoggerService.Write("쿼리 검사");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,7 +18,7 @@ public partial class TopNavAcademy : ComponentBase
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Console.WriteLine("TOPNAV_OnInitializedAsync");
|
LoggerService.Write("TOPNAV_OnInitializedAsync");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ToggleAcademyDropdown() {
|
protected void ToggleAcademyDropdown() {
|
||||||
|
|
|
@ -41,7 +41,7 @@ public partial class About : ComponentBase, IDisposable
|
||||||
_isProcessing = true;
|
_isProcessing = true;
|
||||||
|
|
||||||
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
||||||
Console.WriteLine($"리다이렉트된 URI: {uri}");
|
LoggerService.Write($"리다이렉트된 URI: {uri}");
|
||||||
|
|
||||||
// 쿼리 파라미터가 있는 경우에만 처리
|
// 쿼리 파라미터가 있는 경우에만 처리
|
||||||
if (!string.IsNullOrEmpty(uri.Query))
|
if (!string.IsNullOrEmpty(uri.Query))
|
||||||
|
@ -54,14 +54,14 @@ public partial class About : ComponentBase, IDisposable
|
||||||
|
|
||||||
// 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
|
// 쿼리 파라미터를 제거한 기본 URI로 리다이렉트
|
||||||
var baseUri = uri.GetLeftPart(UriPartial.Path);
|
var baseUri = uri.GetLeftPart(UriPartial.Path);
|
||||||
Console.WriteLine($"리다이렉트할 URI: {baseUri}");
|
LoggerService.Write($"리다이렉트할 URI: {baseUri}");
|
||||||
await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
|
await InvokeAsync(StateHasChanged); // StateHasChanged를 호출하여 UI 업데이트
|
||||||
Navigation.NavigateTo(baseUri, forceLoad: false);
|
Navigation.NavigateTo(baseUri, forceLoad: false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Error in HandleLocationChanged: {ex.Message}");
|
LoggerService.Write($"Error in HandleLocationChanged: {ex.Message}");
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,7 @@ public partial class TopProjectNav : ComponentBase
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Console.WriteLine("TOPNAV_OnInitializedAsync");
|
LoggerService.Write("TOPNAV_OnInitializedAsync");
|
||||||
|
|
||||||
if (!UserStateService.isFirstCheck) await UserStateService.GetUserDataAsync();
|
if (!UserStateService.isFirstCheck) await UserStateService.GetUserDataAsync();
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public partial class Auth : ComponentBase, IDisposable
|
||||||
private void HandleLocationChanged(object? sender, Microsoft.AspNetCore.Components.Routing.LocationChangedEventArgs e)
|
private void HandleLocationChanged(object? sender, Microsoft.AspNetCore.Components.Routing.LocationChangedEventArgs e)
|
||||||
{
|
{
|
||||||
// 페이지 이동이 발생했을 때 로딩 상태 해제
|
// 페이지 이동이 발생했을 때 로딩 상태 해제
|
||||||
Console.WriteLine($"페이지 이동 감지: {NavigationManager.Uri}");
|
LoggerService.Write($"페이지 이동 감지: {NavigationManager.Uri}");
|
||||||
LoadingService.HideLoading();
|
LoadingService.HideLoading();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ public partial class Auth : ComponentBase, IDisposable
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"카카오 로그인 오류: {ex.Message}");
|
LoggerService.Write($"카카오 로그인 오류: {ex.Message}");
|
||||||
LoadingService.HideLoading();
|
LoadingService.HideLoading();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ public partial class Register : ComponentBase
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
var content = await response.Content.ReadFromJsonAsync<JsonElement>();
|
var content = await response.Content.ReadFromJsonAsync<JsonElement>();
|
||||||
Console.WriteLine($"세션 응답: {content}");
|
LoggerService.Write($"세션 응답: {content}");
|
||||||
|
|
||||||
if (content.TryGetProperty("status", out var statusElement) &&
|
if (content.TryGetProperty("status", out var statusElement) &&
|
||||||
statusElement.TryGetProperty("code", out var codeElement) &&
|
statusElement.TryGetProperty("code", out var codeElement) &&
|
||||||
|
@ -66,29 +66,29 @@ public partial class Register : ComponentBase
|
||||||
dataElement.TryGetProperty("data", out var snsIdElement))
|
dataElement.TryGetProperty("data", out var snsIdElement))
|
||||||
{
|
{
|
||||||
snsId = snsIdElement.GetString() ?? "";
|
snsId = snsIdElement.GetString() ?? "";
|
||||||
Console.WriteLine($"서버 세션에서 가져온 SNS ID: {snsId}");
|
LoggerService.Write($"서버 세션에서 가져온 SNS ID: {snsId}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine($"세션 데이터 가져오기 실패: {content}");
|
LoggerService.Write($"세션 데이터 가져오기 실패: {content}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine($"세션 API 호출 실패: {response.StatusCode}");
|
LoggerService.Write($"세션 API 호출 실패: {response.StatusCode}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(snsId))
|
if (string.IsNullOrEmpty(snsId))
|
||||||
{
|
{
|
||||||
Console.WriteLine("SNS ID가 없습니다.");
|
LoggerService.Write("SNS ID가 없습니다.");
|
||||||
await JS.InvokeVoidAsync("alert", "잘못된 접근입니다.");
|
await JS.InvokeVoidAsync("alert", "잘못된 접근입니다.");
|
||||||
NavigationManager.NavigateTo("/");
|
NavigationManager.NavigateTo("/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"SNS ID 가져오기 실패: {ex.Message}");
|
LoggerService.Write($"SNS ID 가져오기 실패: {ex.Message}");
|
||||||
await JS.InvokeVoidAsync("alert", "세션 정보를 가져오는데 실패했습니다.");
|
await JS.InvokeVoidAsync("alert", "세션 정보를 가져오는데 실패했습니다.");
|
||||||
NavigationManager.NavigateTo("/");
|
NavigationManager.NavigateTo("/");
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ public partial class Register : ComponentBase
|
||||||
{
|
{
|
||||||
LoadingService.ShowLoading();
|
LoadingService.ShowLoading();
|
||||||
var token = await CookieService.GetItemAsync("Web-AM-Connect-Key");
|
var token = await CookieService.GetItemAsync("Web-AM-Connect-Key");
|
||||||
Console.WriteLine($"쿠키에서 가져온 토큰: '{token}'");
|
LoggerService.Write($"쿠키에서 가져온 토큰: '{token}'");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(token))
|
if (string.IsNullOrEmpty(token))
|
||||||
{
|
{
|
||||||
|
@ -183,7 +183,7 @@ public partial class Register : ComponentBase
|
||||||
|
|
||||||
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/in/user/register");
|
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/in/user/register");
|
||||||
request.Headers.Add("Web-AM-Connect_Key", token);
|
request.Headers.Add("Web-AM-Connect_Key", token);
|
||||||
Console.WriteLine($"요청 헤더: {string.Join(", ", request.Headers.Select(h => $"{h.Key}: {string.Join(", ", h.Value)}"))}");
|
LoggerService.Write($"요청 헤더: {string.Join(", ", request.Headers.Select(h => $"{h.Key}: {string.Join(", ", h.Value)}"))}");
|
||||||
|
|
||||||
request.Content = JsonContent.Create(registerData);
|
request.Content = JsonContent.Create(registerData);
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ public partial class Register : ComponentBase
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoadingService.HideLoading();
|
LoadingService.HideLoading();
|
||||||
Console.WriteLine($"예외 발생: {ex.Message}");
|
LoggerService.Write($"예외 발생: {ex.Message}");
|
||||||
await JS.InvokeVoidAsync("alert", "회원가입 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.");
|
await JS.InvokeVoidAsync("alert", "회원가입 중 오류가 발생했습니다.\n잠시 후 다시 시도해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,11 +243,11 @@ public partial class Register : ComponentBase
|
||||||
if (phonePart1.Length == 3 && phonePart2.Length == 4 && phonePart3.Length == 4)
|
if (phonePart1.Length == 3 && phonePart2.Length == 4 && phonePart3.Length == 4)
|
||||||
{
|
{
|
||||||
var fullPhone = $"{phonePart1}-{phonePart2}-{phonePart3}";
|
var fullPhone = $"{phonePart1}-{phonePart2}-{phonePart3}";
|
||||||
Console.WriteLine($"입력된 전화번호: {fullPhone}");
|
LoggerService.Write($"입력된 전화번호: {fullPhone}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("전화번호를 올바르게 입력해주세요.");
|
LoggerService.Write("전화번호를 올바르게 입력해주세요.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,12 +261,12 @@ public partial class Register : ComponentBase
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"달력 표시 오류: {ex.Message}");
|
LoggerService.Write($"달력 표시 오류: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void OnBirthChanged(ChangeEventArgs e)
|
private void OnBirthChanged(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"선택된 생일: {birth}");
|
LoggerService.Write($"선택된 생일: {birth}");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +287,7 @@ public partial class Register : ComponentBase
|
||||||
public void SetAddress(string roadAddress, string jibunAddress, string zonecode)
|
public void SetAddress(string roadAddress, string jibunAddress, string zonecode)
|
||||||
{
|
{
|
||||||
address = roadAddress;
|
address = roadAddress;
|
||||||
Console.WriteLine($"SetAddress 호출됨: {roadAddress}, {jibunAddress}, {zonecode}");
|
LoggerService.Write($"SetAddress 호출됨: {roadAddress}, {jibunAddress}, {zonecode}");
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
|
@ -31,7 +31,18 @@
|
||||||
<a href="" class="underline text-blue-600 ml-2">Reload</a>
|
<a href="" class="underline text-blue-600 ml-2">Reload</a>
|
||||||
<button class="ml-4 text-red-600 font-bold dismiss">✕</button>
|
<button class="ml-4 text-red-600 font-bold dismiss">✕</button>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 개발모드 설정 -->
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.appConfig = {
|
||||||
|
isDev: location.hostname.includes('devacamate.ipstein.myds.me') ||
|
||||||
|
location.hostname === '0.0.0.0' ||
|
||||||
|
location.port === '5144'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<script src="scripts/logger.js"></script>
|
||||||
<script src="scripts/scroll.js"></script>
|
<script src="scripts/scroll.js"></script>
|
||||||
<script src="scripts/apiSender.js"></script>
|
<script src="scripts/apiSender.js"></script>
|
||||||
<script src="scripts/jsCommonFunc.js"></script>
|
<script src="scripts/jsCommonFunc.js"></script>
|
||||||
|
|
|
@ -31,37 +31,37 @@ window.fetchWithHeaderAndReturnUrl = async function(args) {
|
||||||
|
|
||||||
const contentType = response.headers.get('content-type');
|
const contentType = response.headers.get('content-type');
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
console.error('API 호출 실패:', response.status, response.statusText);
|
window.appLogger.error('API 호출 실패:', response.status, response.statusText);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!contentType || !contentType.includes('application/json')) {
|
if (!contentType || !contentType.includes('application/json')) {
|
||||||
const text = await response.text();
|
const text = await response.text();
|
||||||
console.error('JSON이 아닌 응답:', text);
|
window.appLogger.error('JSON이 아닌 응답:', text);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
console.log('API 응답 데이터:', data);
|
window.appLogger.log('API 응답 데이터:', data);
|
||||||
return data;
|
return data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('API 호출 중 오류 발생:', error);
|
window.appLogger.error('API 호출 중 오류 발생:', error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
window.loadConfig = async function(configFile) {
|
window.loadConfig = async function(configFile) {
|
||||||
try {
|
try {
|
||||||
console.log('설정 파일 로드 시도:', configFile);
|
window.appLogger.log('설정 파일 로드 시도:', configFile);
|
||||||
const response = await fetch(configFile);
|
const response = await fetch(configFile);
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
console.error('설정 파일 로드 실패:', response.status, response.statusText);
|
window.appLogger.error('설정 파일 로드 실패:', response.status, response.statusText);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const config = await response.json();
|
const config = await response.json();
|
||||||
console.log('설정 파일 로드 성공:', configFile);
|
window.appLogger.log('설정 파일 로드 성공:', configFile);
|
||||||
return config;
|
return config;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('설정 파일 로드 중 오류 발생:', error);
|
window.appLogger.error('설정 파일 로드 중 오류 발생:', error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -81,7 +81,7 @@ window.encryptText = async function(text, key, iv) {
|
||||||
const base64 = btoa(String.fromCharCode.apply(null, bytes));
|
const base64 = btoa(String.fromCharCode.apply(null, bytes));
|
||||||
return base64;
|
return base64;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('암호화 중 오류 발생:', error);
|
window.appLogger.error('암호화 중 오류 발생:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -105,7 +105,7 @@ window.decryptText = async function(encryptedText, key, iv) {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('복호화 중 오류 발생:', error);
|
window.appLogger.error('복호화 중 오류 발생:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
19
wwwroot/scripts/logger.js
Normal file
19
wwwroot/scripts/logger.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
window.appLogger = (function() {
|
||||||
|
const isDev = window.appConfig?.isDev === true;
|
||||||
|
|
||||||
|
return {
|
||||||
|
log: function(message, data) {
|
||||||
|
if (isDev) console.log(`[LOG] ${message}`, data || '');
|
||||||
|
},
|
||||||
|
error: function(message, error) {
|
||||||
|
if (isDev) console.error(`[ERROR] ${message}`, error || '');
|
||||||
|
},
|
||||||
|
warn: function(message, data) {
|
||||||
|
if (isDev) console.warn(`[WARN] ${message}`, data || '');
|
||||||
|
},
|
||||||
|
// 운영 환경에서도 기록해야 하는 중요 오류
|
||||||
|
critical: function(message, error) {
|
||||||
|
console.error(`[CRITICAL] ${message}`, error || '');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})();
|
Loading…
Reference in New Issue
Block a user