배포환경은 리눅스 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 따라 각기 다른 환경에 맞게 로그가 잘 기록이 되는군요.

1. 기본 사항

당연한 이야기지만 FTP서비스와 Management 서비스가 설치되어 있어야 합니다.

2. Management Service에서 IIS Manager credetials가 체크되어 있어야 합니다.

3. FTP 인증에서 IIS ManagerAuth가 설정되어 있어야 합니다.

4. FTP 권한 룰에서는 접속 계정명이 설정되어 있어야 합니다.

Read, Write Permission을 상황에 맞게 적절하게 선택합니다.

 

5.퍼미션 설정 확인

 

#트러블 슈팅 기본

1.로컬 요청에대해서 상세 메시지를 볼 수 있도록 합니다.(기본으로 되어있으나 확인!)

2. 이벤트 로그를 확인합시다.

 

 

대표 해결 사례, # 530 에러 발생시

1.

C:\Windows\System32\inetsrv\Config 에 NETWORK SERVICE 계정에 읽기 권한을 줍니다.

 

2.관리자 권한으로 커맨드 라인을 실행하여 

iisreset /noforce

을 입력해서 iis를 리셋합니다.

 

3.잘 적용이 안되는 경우 서버를 리부팅합니다. (이렇게 해서 해결된적 있네요;;)

 

Blender3d에서 창을 나누거나 합치는 방법입니다.

 

상단 좌우측 끝을 왼쪽, 혹은 오른쪽으로 이동하여 합치거나 나누는 것이 가능합니다.

좌측 모서리에서 좌측으로 마우스를 드래그 할 경우나, 우측 모서리에서 우측으로 마우스를 드래그하는 경우,

창을 합치고, 그 반대의 경우는 창을 분리하게 됩니다.

 

창 합치기, 창 분리하기

'앱개발' 카테고리의 다른 글

JSON.stringify / JSON.parse 활용  (0) 2024.08.31
inkscape - 도형 머지하기  (0) 2024.06.19
윈도우용 npm 업그레이드 하기,  (0) 2019.04.01
PouchDB에 관해서...  (0) 2019.02.22
예쁜 패턴 만들어주는 사이트  (0) 2018.09.28

quartz net 에서는 timestamp값을 0001-01-01 00:00:00 부터 Time Tick (TotalMiliSecond * 100)값을 저장합니다.

오라클에서 Tick값을 그대로 계산해서 보면 2일이 모자라게 나타납니다.

 

아래 쿼리로 확인하면 제대로 보입니다.

 

9/24 시간을 붙힌 이유는 대한민국 Timezone 시간을 덧 붙혀서 계산해야 제대로 보입니다.


select to_date('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS') +
       (
          (LAST_CHECKIN_TIME - 621355968000000000 ) -- (now ticks - UNIX epoch in CLR ticks)
            /10000000 -- CLR ticks per second
        )/60/60/24 + 9/24 -- convert from seconds to days for date addition arithmetic
as date_from_ticks
from QRTZ_SCHEDULER_STATE;

 

 

아래처럼 해도 결과는 동일합니다.

SELECT to_date('0001-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS') +
       (LAST_CHECKIN_TIME / (10000000 * 60 * 60 * 24)) + 2 + (9/24)
as date_from_ticks
from QRTZ_SCHEDULER_STATE;

 

Time Tick값을 DateTime으로 변경

 

참고:

https://stackoverflow.com/questions/20052643/date-math-in-oracle-related-to-net-ticks

quartz에서는 db에 날짜 데이터를 0001년 부터 해서 milisecond 값을 bigint (int64)형태로 저장합니다.

 

mysql에서 직접 쿼리를 통해 이 값을 보기 쉬운 날짜 형태로 보기 위해서는 다소 여러 연산을 거쳐야 확인이 가능합니다.

 

아래 함수로 확인이 가능합니다.

 

 

SELECT CONVERT_TZ( FROM_DAYS(365+(FIRED_TIME / 864000000000))
   + INTERVAL (FIRED_TIME % 864000000000) / 10000000 SECOND , 'GMT', 'Asia/Seoul') AS FIRED  FROM QRTZ_FIRED_TRIGGERS;

 

표준시간대로 저장되기 때문에 정확하게 보려면 현재  TimeZone으로 계산까지 해야 확인이 됩니다.

 

 

참고 #1

https://stackoverflow.com/questions/34695247/mysql-script-to-convert-datetime-ticks-values-to-sql-date/34696553#34696553

 

참고 #2

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_convert-tz

 

윈도우즈용으로 사용할 bcrypt tool을 찾는데 은근 간단한게 안보여서.. 직접 빌드해서 올립니다.

 

npm 에서 받거나, go 를 쓰거나.. 라이브러리 다운받아서 쓰도록 하는데 되게 번거롭더군요..

 

난 단순히 문자열 변환하는 커맨드라인 툴만 필요했을뿐 인데.... !

 

또 자주 사용하는 C#으로 만들려니, 같이 받는 참조파일은 왜 이렇게 많은지...

 

깔끔하게.. win32 x86용으로  visual studio 2019/C++에서 빌드하였습니다.

라이브러리도 static 으로 빌드하여 exe 파일 하나입니다.

 

사용법)

 

bcrypt [암호화할문자열] -- bcrypt로 암호화합니다.

 

bcrypt [암호] [HASH문자열] 을 입력할경우 유효한지 유효하지 않는지 확인해 줍니다.

 

 

잘 되네요.

 

용량 : 30KB

 

bcrypt.zip
0.02MB

VMware 사용시 아래 오류 발생시 처리할 사항에 대해서 정리해둡니다.

 

"VMware Workstation and Device/Credential Guard are not compatible Error"

 

 

콘솔창에서 gpedit.msc 입력. 그룹정책 편집기로 들어갑니다...

 

컴퓨터 구성 > 관리 템플릿 > 시스템 > Device Guard > 가상화 기반 보안켜기 를 사용안함으로 설정합니다.

 

Hyper-V를 꺼라고 안내하는 사이트도 있던데, 나의 경우엔 체크해놔도 동작하는데는 문제 없었고,

 

다만 콘솔창에서 

 

 

bcdedit /set hypervisorlaunchtype off  

 

 

입력 후 재부팅하면 제대로 동작하였습니다.

 

 

 

 

딸의 유치원 등록을 위해 처음학교로 사이트에 로그인하려는데 키보드 입력이 안되더군요.

키보드 입력이 Shift를 눌렀을때만 입력되는 이상한 현상이었습니다.

 

 

아무래도  nprotect 문제인 듯해서 찾아보았습니다.

 

역시나 관련 글이 있네요.

https://quasarzone.co.kr/bbs/board.php?bo_table=qn_hardware&wr_id=30532

 

윈도우10 환경 키보드 인식 관련내용 안내

안녕하세요~! 앱코 신차장입니다.현재 윈도우10 환경에서 키보드 제품 중 리얼 RGB 제품군의 키보드 인식 문제를 몇몇 소비자 분들께서 제보해 주셨습니다.저희측에 접수된 고객님들 중 문제가 생기셨다는 시스템과 동일한 부품을 이용한 시스템을 조립하여 테스트를 진행하여도 명확한 원인을 확인할 수 없던 중, 가장 유력한 원인으로 파악되는 내용을 발견하여 공지하여…

quasarzone.co.kr

저의 경우 키보드에 꽂힌 USB포트를 변경하여. 원래 키보드, 마우스 USB 포트 자리에 꽂아보았습니다.

그러니까 해결이 되더군요.

 

혹시나 저같은 문제를 겪으신 분들은 참고되시길 바랍니다.

+ Recent posts