728x90
반응형
오랜만에 개발 관련 글을 작성하는 것 같네요.
Listbox Control 사용처는 저만 그런지 모르겠지만 로그를 볼 때 사용하게 되는데 가끔 고객들이 로그레벨에 따라 색상 구분해주세요. 라는 요청을 받고 무시하곤 했습니다만, 이번에 한번 만들어보았습니다.
코드에 주석을 달았으니, 맘껏 응용해보아요. ^^
// 준비작업: 폼에 ListBox를 올려두고 이름을 LstLog로 변경합니다.
// Listbox 콘트롤 아이템에 넣을 Object입니다. 로그레벨 구분을 위함.
private class LogStruct
{
public LOGGER_LEVEL logLevel { get; set; }
public string Message { get; set; }
public LogStruct(LOGGER_LEVEL logLevel, string message)
{
this.logLevel = logLevel;
Message = message;
}
}
// 로그레벨 상수입니다.
// NLog.Loglevel 이 상수가 아니라 클래스라서 아규먼트로 넣어지질 않네요.
private enum LOGGER_LEVEL
{
Info,
Error,
Debug
}
// 자동스크롤 여부 (설정으로 빼시면 됩니다.)
private bool AutoScroll = false;
private void AddLog(string message, LOGGER_LEVEL LogLevel = LOGGER_LEVEL.Info)
{
Invoke(new Action(() =>
{
string totMsg = string.Format("{0} : {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);
LogStruct logStruct = new LogStruct(LogLevel, totMsg);
LstLog.Items.Add(logStruct);
if (AutoScroll) LstLog.SelectedIndex = LstLog.ItemCount - 1;
// 100건이 넘어가면 과거 아이템을 삭제한다.
if (LstLog.Items.Count > 100)
{
LstLog.Items.RemoveAt(0);
}
switch (LogLevel)
{
case LOGGER_LEVEL.Info:
logger.Info(totMsg);
break;
case LOGGER_LEVEL.Error:
logger.Error(totMsg);
break;
case LOGGER_LEVEL.Debug:
logger.Debug(totMsg);
break;
default:
break;
}
}));
}
// 로그레벨에 따라 전경색(글자색)을 분기하여 처리합니다.
private void LstLog_DrawItem(object sender, ListBoxDrawItemEventArgs e)
{
LogStruct logStruct = (LogStruct)e.Item;
switch (logStruct.logLevel)
{
case LOGGER_LEVEL.Info:
e.Appearance.ForeColor = Color.Black;
break;
case LOGGER_LEVEL.Error:
e.Appearance.ForeColor = Color.Red;
break;
case LOGGER_LEVEL.Debug:
e.Appearance.ForeColor = Color.DarkGray;
break;
default:
break;
}
}
// 아이템이 오브젝트이기 때문에 표시할 텍스트를 바꿔서 보여줍니다.
private void LstLog_CustomItemDisplayText(object sender, CustomItemDisplayTextEventArgs e)
{
LogStruct logStruct = (LogStruct)e.Item;
e.DisplayText = logStruct.Message;
}
반응형
'개발 > C# + DevExpress' 카테고리의 다른 글
DevExpress Skin & Skin Palette 동시 적용 및 가져오기 (0) | 2023.09.12 |
---|---|
DevExpress Dock Manager 팝업 메뉴 안 보이게... (0) | 2022.12.15 |
[2022.08] DevExpress Grid Autofilter에 값 설정 (0) | 2022.08.31 |
[2022.08] Devexpress ComboboxEdit 폰트 설정 (0) | 2022.08.12 |
[2022.06] Devexpress ImageComboboxEdit 사용법 (0) | 2022.06.21 |