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);
}
프로그래밍/WEB
- spring 특정 로그 일시 중시 2020.12.06
- SSL Tomcat : PFX 인증서 적용 2018.10.02
- django gunicorn systemctl 등록 2018.09.27
- Django Nginx WSGI - Gunicorn 설정 2018.09.20 1
- 예외를 위한 Log 시스템 구현 2012.08.17
- 하루에 한번 도는 스케줄러 구현 2012.08.17
- ASP.NET 사용자 정의 DB를 이용한 MemberShip 설정 방법 2012.08.14
- ASP.NET 컴파일 된 소스 웹 배포 2012.08.14
- asp.net SmartEditor 2.1.1 적용 소스 2012.07.30
spring 특정 로그 일시 중시
SSL Tomcat : PFX 인증서 적용
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
django gunicorn systemctl 등록
가상환경 설정
$ 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
|
gunicorn systemd 등록
$ sudo mkdir /run/gunicorn $ sudo chown youurUserName.yourGroup /run/gunicorn # sudo vi /etc/systemd/system/gunicorn.service [Unit] |
gunicorn 서비스 시작
$ sudo systemctrl enable gunicorn.service $ sudo systemctl start gunicorn.service |
Django Nginx WSGI - Gunicorn 설정
$ 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 $ gunicorn -c gunicorn_cfg.py testproject.wsgi:application $ sudo -i # apt install nginx # cd /etc/nginx/sites-available/ # cat << EOF > testproject_conf # cd ../sites-enabled/ # ln -s ../sites-available/testproject_conf # nginx -t # nginx -s reload |
아래에 링크에 자세한 설명
예외를 위한 Log 시스템 구현
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;
}
// 스케줄러 소스 종료
//////////////////////////////////////////////////////////////////////////
}
}
ASP.NET 사용자 정의 DB를 이용한 MemberShip 설정 방법
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>
끝
ASP.NET 컴파일 된 소스 웹 배포
asp.net SmartEditor 2.1.1 적용 소스
스마트 에디터 2.1.1 다운로드
http://dev.naver.com/projects/smarteditor/download
asp.net 프로젝트 생성(naver01로 생성했음) 첨부 파일 참고
프로젝트 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