배포환경은 리눅스 Centos7 였습니다.
윈도우 로컬 개발환경에서는 잘 기록되는 NLog가 리눅스 서버에 배포하면 잘 기록되지 않는 문제였습니다.
진입점소스는 아래와 같은 형태였었습니다. (네, 인터넷에서 검색해서 그냥 넣었습니다 ㅡㅡ)
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
NLog.LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));
var host = CreateHostBuilder(args)
.Build();
host.Run();
}
그리고 배포시에 사용하는 appsettings.Production.json 파일에 다음과 같이 설정하였습니다.
{"NLog": {
"variables": {
"var_logdir": "/var/www/www.mydomain.com/log"
},
"targets": {
"logfile": {
"type": "File",
"fileName": "${var_logdir}/nlog-${shortdate}.log"
},
"logconsole": {
"type": "Console"
}
}
}
}
기본 개발환경에서는 var_logsdir 부분의 값은 "D:\Logs" 였구요..
첨에 왜 안되는지 이유를 모르고 좀 헤맸는데, 소스를 보면 간단히 확인되는 문제였습니다.!
위에 .AddJsonFile에서 기본적인 appsetting.json 만 해주었기 때문입니다.
(알아서 Production 등이 처리되는 줄... 착각했었네요..)
.AddJsonFile ... 부분 하단 라인에 아래와 같이 추가적으로 실행 환경에 맞는 설정을 추가해줘야합니다.
진입 함수에서 아래코드로 확인 가능합니다.
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
=== 생략 ===
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables()
보통 Startup에서 저런 구성을 넣어주더군요...
하지만 굳이 env 불러오지 않고, 아래처럼 소스를 수정하여 해결을 보았습니다.
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args)
.Build();
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(ConfigConfiguration) //ConfigConfiguration 호출
.UseNLog() //NLog 사용
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.ConfigureKestrel(serverOptions => {
serverOptions.Limits.MaxConcurrentConnections = 1000;
serverOptions.Limits.MaxConcurrentUpgradedConnections = 1000;
serverOptions.Limits.MaxRequestBodySize = 1024 * 1024 * 100;
serverOptions.Limits.MinRequestBodyDataRate = new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.MinResponseDataRate = new MinDataRate(bytesPerSecond: 100,
gracePeriod: TimeSpan.FromSeconds(10));
serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
serverOptions.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(1);
})
.UseStartup<Startup>();
});
static void ConfigConfiguration(HostBuilderContext ctx, IConfigurationBuilder config)
{
NLog.LogManager.Configuration = new NLogLoggingConfiguration(config.Build().GetSection("NLog"));
}
}
Builder 구성부분에서 config를 받아 메소드를 수행할 수 있도록 했고.
해당 메소드에서 NLog설정을 셋팅하도록 했습니다.
이제 각 환경 Development, Staging, Production 따라 각기 다른 환경에 맞게 로그가 잘 기록이 되는군요.