반응형
log4net에서 프로그래밍 방식으로 버퍼를 플러시하는 방법이 있습니까?
AdoNetAppender와 함께 log4net을 사용하고 있습니다. AdoNetAppender에 Flush 메서드 가있는 것 같습니다 . 어쨌든 내 코드에서 호출 할 수 있습니까?
데이터베이스 로그의 모든 항목을보기 위해 관리자 페이지를 만들려고합니다. log4net을 bufferSize = 100 (또는 그 이상)으로 설정하고 싶습니다. 그런 다음 관리자가 관리자에서 버튼을 클릭 할 수 있기를 바랍니다. log4net이 버퍼링 된 로그 항목을 데이터베이스에 기록하도록 강제하는 페이지입니다 (log4net을 종료하지 않음).
가능합니까?
log4net을 기본적으로 사용한다고 가정하면 다음과 같이 어 펜더를 파고 플러시 할 수 있습니다.
public void FlushBuffers()
{
ILog log = LogManager.GetLogger("whatever");
var logger = log.Logger as Logger;
if (logger != null)
{
foreach (IAppender appender in logger.Appenders)
{
var buffered = appender as BufferingAppenderSkeleton;
if (buffered != null)
{
buffered.Flush();
}
}
}
}
편집 : 나는 당신이 특정 ILog
(질문을 다시 읽었 으므로 아마도 나쁜 가정)에 대한 추가자를 플러시하고 싶다는 가정하에 위의 내용을 썼지 만 Stefan이 아래 주석에서 지적했듯이 코드를 단순화 할 수 있습니다. 다음과 같이 전체 저장소에서 모든 어 펜더를 플러시하려는 경우 거의 없습니다.
public void FlushBuffers()
{
ILoggerRepository rep = LogManager.GetRepository();
foreach (IAppender appender in rep.GetAppenders())
{
var buffered = appender as BufferingAppenderSkeleton;
if (buffered != null)
{
buffered.Flush();
}
}
}
오늘날 더 간단한 옵션을 사용할 수 있습니다.
LogManager.Flush();
기본 저장소의 구성된 모든 어 펜더에 버퍼링 된 로깅 이벤트를 플러시합니다. https://logging.apache.org/log4net/release/sdk/html/M_log4net_LogManager_Flush.htm
다음과 같이 시간 제한을 추가하는 것이 좋습니다.
LogManager.Flush(3000);
반응형
'IT story' 카테고리의 다른 글
Facebook 오프라인 액세스 단계별 (0) | 2020.12.25 |
---|---|
해시 코드 계산을위한 합리적인 소수는 무엇입니까? (0) | 2020.12.25 |
Java에서 부울 "작업 순서"는 무엇입니까? (0) | 2020.12.25 |
Zsh에서 Bash의 Ctrl-U와 동일한 단축키는 무엇입니까? (0) | 2020.12.25 |
한 줄에 여러 검색 및 바꾸기 (0) | 2020.12.25 |