import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;


void test() {

    //resultsettable log off 
    LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();

    loggerContext.getLogger("jdbc.resultsettable").setLevel(Level.OFF);

    examDao.selectList(...);

    loggerContext.getLogger("jdbc.resultsettable").setLevel(Level.INFO);

}

tomcat 서버설정
Server.xml을 설정합니다.


[설정방법]
< Connector port="포트번호" protocol="HTTP/1.1" SSLEnabled="true"
               maxThread="150" scheme="https" secure="true"
               keystoreFile="pfx파일경로" keystorePass="pfx패스워드" keystoreType="PKCS12"
               clientAuth="false" sslProtocol="TLS" />


[설정예제]  
< Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThread="150" scheme="https" secure="true"
               keystoreFile="/etc/tomcat/ssl/example.com.pfx" keystorePass="123456" keystoreType="PKCS12"
               clientAuth="false" sslProtocol="TLS" />



URL : https://www.comodossl.co.kr/certificate/ssl-installation-guides/Tomcat-pfx.aspx

가상환경 설정

$ cd /my/working/dir

$ virtualenv -p python3 env35

$ cd env35

$ mkdir run

$ source bin/activate

$ pip install django gunicorn

$ django-admin startproject testproject

$ cd testproject

$ django-admin startapp testapp


디렉토리 구조

/my/working/dir


`-- env35
    |-- bin
    |  
    |-- include
    |   `-- python3.5m -> /usr/include/python3.5m
    |-- lib
    |   `-- python3.5
    |-- testproject
    |   |-- media
    |   |-- testproject
    |   |-- static
    |   |-- templates
    |   `-- testapp
    `-- run



gunicorn systemd 등록

$ sudo mkdir /run/gunicorn

$ sudo chown youurUserName.yourGroup /run/gunicorn

# sudo vi /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
PIDFile=/run/gunicorn/pid
User=youurUserName
Group=yourGroup
WorkingDirectory=/my/working/dir/env35/testproject
ExecStart=/my/working/dir/env35/bin/gunicorn \
        --pid /run/gunicorn/pid \
        --workers 2 \
        --bind unix:/run/gunicorn/gunicorn.sock \
        testproject.wsgi:application

ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target


gunicorn 서비스 시작

$ sudo systemctrl enable gunicorn.service

$ sudo systemctl start gunicorn.service



# 가상환경 설정

$ virtualenv -p python3 env35

$ cd envDjango

$ mkdir run

$ source bin/activate

$ pip install django gunicorn

$ django-admin startproject testproject

$ cd testproject

$ django 작업

$ cat << EOF > gunicorn_cfg.py
daemon=True
bind='unix:/your/dir/env35/run/gunicorn.sock'
workers=3
EOF

$ gunicorn -c gunicorn_cfg.py testproject.wsgi:application

$ sudo -i

# apt install nginx

# cd /etc/nginx/sites-available/

# cat << EOF > testproject_conf
server {
        listen 80;
        server_name    ${YOUR_SERVER_NAME};
        root        /usr/share/nginx/html;

        location = /favicon.ico { access_log off; log_not_found off; }

        location /static {
                root    root ${YOUR_PROJECT_DIR};
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/your/dir/env35/run/gunicorn.sock;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}
EOF

# cd ../sites-enabled/

# ln -s ../sites-available/testproject_conf

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# nginx -s reload



아래에 링크에 자세한 설명

http://dveamer.github.io/backend/PythonWAS.html

ASP.NET에서 예외 처리 로그를 출력하게 하는 것을 구현


LogMgr 클래스 만들기

public class LogMgr

{

static string prefixMsg = "\r\n-------------------------------------------";


// 일반 로그 남기기

static public void Log(string msg)

{

try

{

string logFileName = DateTime.Now.ToString("yyyy-MM-dd") + ".log";

StreamWriter tw = File.AppendText(logFileName);

tw.WriteLine(prefixMsg);

tw.WriteLine(msg);

tw.Close();

}

catch (Exception)

{

}

}


// 예외 로그

static public void ExceptionLog(Exception ex, string titleString = null)

{

string msg = "";

if (!string.IsNullOrEmpty(msg))

{

msg = titleString + "\r\n";

}


msg += GetExceptionMessage(ex);

msg = "예외 발생 일자 : " + DateTime.Now.ToString() + msg + "\r\n";

Log(msg);

}

// 마지막 예외 로그

static public void LastExceptionLog(string titleString = null)

{

//예외를 데이터베이스나 파일에 로깅한다

Exception ex = HttpContext.Current.Server.GetLastError();

ExceptionLog(ex, titleString);

}



// 예외 메세지 만들기

static private string GetExceptionMessage(Exception ex)

{

string err = "\r\n 에러 발생 원인 : " + ex.Source +

"\r\n 에러 메시지 :" + ex.Message +

"\r\n Stack Trace : " + ex.StackTrace.ToString();


if (ex.InnerException != null)

{

err += GetExceptionMessage(ex.InnerException);

}


return err;

}

}


사용)

Global.asax 파일에 전역 예외처리 로그 작성(try catch 잡지 않은 예외를 로그파일에 출력)

public class Global : System.Web.HttpApplication

{


...

...

protected void Application_Error(object sender, EventArgs e)

{

// 예외 처리구간에서 예외가 나왔을때는 예외처리를 하지 않는다.

try

{

LogMgr.LastExceptionLog("Application_Error");

}

catch(Exception)

{

}

}

}


try catch 예외 처리 로그로 사용.

DBConn conn = new DBConn();

try

{

conn.Open();

conn.CreateCommand(sql);

conn.AddParam("@USER_CODE", userName);


SqlDataReader reader = conn.ExecuteReader();


if (reader.Read())

{

playername = reader["USER_NAME"].ToString();

ret = true;

}

}

catch (Exception e)

{

LogMgr.ExceptionLog(e);

}

finally

{

conn.Close();

}

return ret;


일반 로그로 사용.

LogMgr.Log("하이 로그 테스트");


ASP.NET 에서 돌아가는 스케줄러 구현


루트에 Global.aspx 생성

public class Global : System.Web.HttpApplication

{

protected void Application_Start(object sender, EventArgs e)

{

StartScheduler();

}


...

...


//////////////////////////////////////////////////////////////////////////

// 스케줄러 소스 시작

private static DateTime whenTaskLastRan = DateTime.Now; // 마지막 스케줄러가 실행된 시간


private void StartScheduler()

{

ThreadStart tsTask = new ThreadStart(ScheduleTaskLoop);

Thread MyTask = new Thread(tsTask);

MyTask.Start();

}


static void ScheduleTaskLoop()

{

while (true)

{

DateTime oneDayAgo = DateTime.Now.AddDays(-1);


// 하루가 지났으면(새벽 4~ 6사이)

if ((whenTaskLastRan < oneDayAgo) && (4 <= oneDayAgo.Hour && oneDayAgo.Hour <= 6))

{

if(ScheduledTask())

whenTaskLastRan = DateTime.Now;

}

// 한시간 동안 Sleep

System.Threading.Thread.Sleep(TimeSpan.FromHours(1));

}

}


static bool ScheduledTask()

{

bool ret = false;

try

{

// DoSomething... 스케줄 걸 작업들.

ret = true;

}

catch (Exception e)

{

}

return ret;

}


// 스케줄러 소스 종료

//////////////////////////////////////////////////////////////////////////

}


}


1. MSSQL에서 CustomMemberShip Database 생성및 계정 추가


2. cmd 실행

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319>

aspnet_regsql.exe


DB 이름 선택, 연결 하여 끝냄


3. web.config 설정


<configuration>

  <connectionStrings>

    <add name="ConnectionString" 

connectionString="server=SERVERNAME;

database=CustomMembership;uid=userid;password=userpassword;"/>

  </connectionStrings>

  <system.web>

<roleManager defaultProvider="CustomProvider" enabled="true">

<providers>

<add connectionStringName="ConnectionString" 

name="CustomProvider"

type="System.Web.Security.SqlRoleProvider" />

</providers>

</roleManager>


<membership defaultProvider="CustomMembershipProvider">

<providers>

<add name="CustomMembershipProvider"

type="System.Web.Security.SqlMembershipProvider"

connectionStringName="ConnectionString" />

</providers>

</membership>



참고 URL : http://blog.naver.com/PostView.nhn?blogId=knight50&logNo=80101563731&redirect=Dlog&widgetTypeCall=true

1. 빌드 & publish 
  


 


 d:\tmp\bak 로 소스 출력됨


2. 컴파일

aspnet_compiler.exe -p d:\tmp\bak -v / d:\tmp\bak1 -errorstack

 입력 d:\tmp\bak -->  출력 d:\tmp\bak1
 



  C:\> C:
  C:\>cd \Windows\Microsoft.NET\Framework64\v4.0.30319
  C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_compiler.exe -p d:\tmp\bak -v / d:\tmp\bak1 -errorstack
  Utility to precompile an ASP.NET application
  Copyright (C) Microsoft Corporation. All rights reserved.

  C:\Windows\Microsoft.NET\Framework64\v4.0.30319>

3 배포
 d:\tmp\bak1 --> 웹사이트에 배포함.
 



스마트 에디터 2.1.1 다운로드

http://dev.naver.com/projects/smarteditor/download 


asp.net 프로젝트 생성(naver01로 생성했음) 첨부 파일 참고 


smartedtor2.1_aspnet_v2.zip



프로젝트 se 디렉토리에 복사.


/se/popup/quick_photo/FileUploader.aspx 생성및 작성


private string UploadDir = "/UploadFiles/"; // Upload dirctory


// 이미지 파일을 서버에 저장하고 저장한 정보를 클라이언트에 보내줌.

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

HttpFileCollection uploadedFiles = Request.Files;

string callback_func = Request.Form["callback_func"];


// 다수의 파일을 다운로드 하여 파일을 저장함

for (int j = 0; j < uploadedFiles.Count; j++)

{

HttpPostedFile userPostedFile = uploadedFiles[j];


// 파일 내용이 있을경우

if (userPostedFile.ContentLength > 0)

{

string fileName = Path.GetFileName(userPostedFile.FileName);

string fileUrl = UploadDir + fileName; // 업로드 디렉토리 + 파일명.


// 파일 저장  (같은 파일명일경우 에러 처리 필요)

userPostedFile.SaveAs(Server.MapPath(fileUrl));


// 클라이언트에 저장한 파일 정보를 보내 줌

string returnUrl = string.Format("callback.html?callback_func={0}&bNewLine=true&sFileName={1}&sFileURL={2}",

callback_func, fileName, fileUrl);


Response.Redirect(returnUrl);

}


}

}

}



/se/popup/quick_photo/QuickPhotoPopup.js 수정

function callFileUploader (){

oFileUploader = new jindo.FileUploader(jindo.$("uploadInputBox"),{

sUrl: location.href.replace(/\/[^\/]*$/, '') + '/FileUploader.aspx', // FileUploader.aspx 경로


/se/popup/quick_photo/callback.html 수정

document.domain = location.protocol + "//" + location.host; // 자기 서버 URL



/Write.aspx 생성 및 작성

제일 상단 내용에 ValidateRequest="false" 추가.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Write.aspx.cs" Inherits="naver01.Write" %>

를 아래와 같이

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Write.aspx.cs" Inherits="naver01.Write" ValidateRequest="false" %>

나머지는 소스 참고.


web.config 설정 파일에 아래내용 추가

    <system.web>

<httpRuntime requestValidationMode="2.0" />

</system.web>



참고 URL

http://dev.naver.com/projects/smarteditor/tech/39360



환경 visual stodio 2010,  SmartEditor 2.1.1


smartedtor2.1_aspnet_v2.zip



+ Recent posts