Log4net이 로그 파일에 로그를 쓰지 않습니다


159

Log4net을 사용하여 간단한 시나리오를 만들었지 만 메시지가 로그 파일에 추가되지 않아서 로그 어 펜더가 작동하지 않는 것 같습니다.

web.config 파일에 다음을 추가했습니다.

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>        
</configSections>

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="D:\MyData\Desktop\LogFile.txt" />
            <appendToFile value="true" />
            <encoding value="utf-8" />
            <layout type="log4net.Layout.SimpleLayout" />
    </appender>


    <root>
        <level value="INFO" />
        <appender-ref ref="LogFileAppender" />
    </root>
</log4net>

글로벌 ASAX 파일 내에서 다음을 추가했습니다.

ILog logger = LogManager.GetLogger(typeof(MvcApplication));

그리고 Application_Start 메소드 내에서 :

logger.Info("Starting the application...");

테스트 로그 "응용 프로그램 시작 중 ..."이 로그 파일에 추가되지 않는 이유는 무엇입니까?

답변:


316

전화하세요

log4net.Config.XmlConfigurator.Configure();

log4net이 구성을 읽을 수있는 곳이 있습니까? 예를 들어 Global.asax에서 :

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup

    // Initialize log4net.
    log4net.Config.XmlConfigurator.Configure();
}

4
감사합니다. 감사합니다. 다음 줄이 있습니다. log4net.Config.BasicConfigurator.Configure (); web.config 대신 c # 구성을 사용하여 log4net을 구성하는 경우 이것을 호출합니까? 많은 "튜토리얼에서이 코드 줄을 찾지 못했기 때문에 어떤 방식 으로든이"구성 "-방법 호출이 필요합니까?
john84

9
log4net에 구성을 찾을 위치를 알려주는 방법은 여러 가지가 있습니다 ( logging.apache.org/log4net/release/manual/configuration.html 참조) . XmlConfigurator.Configure ()를 호출하면 log4net이 <app.exe> ​​.config 또는 web.config에서 구성을 찾습니다. BasicConfigurator.Configure는 (SDK 문서에 따라) : "Console.Out에 쓸 ConsoleAppender를 사용하여 log4net 로깅 시스템을 초기화합니다."
Andreas Paulsson 2018 년

참고-파일 기반으로 원하지 않는 경우 log4net.Config.BasicConfigurator를 사용할 수도 있습니다. 출력이 콘솔로 전송됩니다.
silverArc

1
AssemblyInfo파일 에서 구성을 수행하고 있습니다 . 아래 답변으로 게시됩니다.
LCJ

Argh는 이러한 많은 질문을 발견했으며 어디에서나 실제 로그 파일을 찾을 수있는 곳을 언급하지 못했습니다 ... 모두가 이미 알고 있다는 것이 분명합니까?
MrFox

50

이 FAQ 페이지를 사용하십시오 : Apache log4net 자주 묻는 질문

약 3/4는 응용 프로그램 추적을 사용하여 log4net 디버깅을 활성화하는 방법을 알려줍니다. 문제가 어디에 있는지 알려줍니다.

기본 사항은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

그리고 당신은 표준 출력에서 ​​추적을 볼


1
감사합니다. FAQ를 확인했지만 문제를 해결할 수 없습니다.
john84

1
이 답변 덕분에 내 root섹션이 잘못된 로거를 참조 하고 있음을 알 수있었습니다 !
seebiscuit

좋은 팁. asp.net 사용자에 대한 액세스가 거부 된 것으로 나타났습니다
Blue Clouds

누군가에게 작동하지 않으면 다음 방법을 사용해보십시오. <log4net> <internal> <Debug value = "true"> </ Debug> </ internal> </ log4net>
himanshupareek66

35

@AndreasPaulsson이 제안했듯이 구성해야합니다. AssemblyInfo파일 에서 구성을 수행하고 있습니다 . configuration file name여기에 지정합니다 .

// Log4Net Configuration.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

9
이것과 log4net.Config.XmlConfigurator.Configure ()가 모두 있으면 어떻게됩니까? 길 위에?
n00b

1
@ n00b, 우리는이 줄을 주석 처리 할 수 ​​있습니다. 실제로이 방법으로 만 작동했습니다. = "log4net.Internal.Debug"value = "true"/>
himanshupareek66

33

또한 [log4net] .config에 대해 "항상 복사" 옵션이 선택되어 있는지 확인하십시오

여기에 이미지 설명을 입력하십시오


1
이것은 나를위한 수정이었습니다. 나는 항상이 설정을 잊었다.
Ju66ernaut

25

사이트에서 실행중인 프로세스 (계정)에 출력 디렉토리에 쓸 수있는 권한이 있는지 확인하십시오.

IIS 7 이상에서는 응용 프로그램 풀에 구성되며 일반적으로 AppPool Identity 이며 일반적으로 모든 디렉토리에 쓸 수있는 권한이 없습니다.

이벤트 로그 (응용 프로그램 및 보안)를 확인하여 예외가 발생했는지 확인하십시오.


귀하의 도움에 감사드립니다. 또한 권한 문제에 대해 생각했지만 폴더에 설정된 모든 사용자에게 읽기, 쓰기, 수정 및 실행 권한이없는 경우 작동하지 않습니다.
john84

@ john84-예외가 있습니까? 이벤트 로그를 보셨습니까?
오디드

또한 방금 검색 한 것처럼 특정 계정으로 Windows 서비스를 실행하는 것이 중요합니다.
Bob Mc

많은 도움을 주셔서 감사합니다.
Abbas

20

끼워 넣다:

 [assembly: log4net.Config.XmlConfigurator(Watch = true)]

AssemblyInfo.cs 파일 끝에서


이것은 나의 구조였다. 데스크탑 양식 프로젝트 수행 및 log4net.Config.XmlConfigurator.Configure (); 주로 도움이되지 않았습니다. 감사합니다
Tomas Hesse

이것은 나를 도왔다. web.config에 구성이 있었지만 log4net은 변경 사항을 적용하지 않는 것 같습니다. 나는 그 속성에 "Watch = true"를 추가하고
애니메이션

3

나를 위해 로그 파일의 위치를 ​​옮겼으며 파일 이름을 다른 이름으로 변경했을 때만 다시 시작되었습니다.

같은 이름의 로그 파일이 이미 존재하면 아무 일도 일어나지 않는 것 같습니다.

그런 다음 이전 파일의 이름을 바꾸고 구성의 로그 파일 이름을 다시 원래대로 변경했습니다.


2

필자의 경우 프로젝트 이름에 공백이있어 log4net이 제대로 로깅되지 않았습니다. 왜 같은 코드가 다른 프로젝트에서 잘 작동했지만 새로운 코드에서는 작동하지 않는지 알 수 없었습니다. 공백. 간단한 공간.

따라서 프로젝트 이름에서 공백을주의하십시오. 나는 나의 교훈을 배웠다.


1
이 문제는 어디에 있었습니까? Log4Net은 한 프로젝트에서 훌륭하게 작동하지만 다른 프로젝트에서는 그렇지 않습니다 ... 이유를 모릅니다. Tks
Pascal

2

제 경우 IIS_IUSRS에는 로그 파일에 읽기 / 쓰기 권한을 부여해야했습니다.


1

AssemblyInfo.cs 파일에 다음 줄 코드가 있어야합니다.

[조립품 : log4net.Config.XmlConfigurator (ConfigFile = "Web.config", Watch = true)]

Application_start () 메소드에서이 행을 확인하십시오.

log4net.Config.XmlConfigurator.Configure();

0

구성 파일이 올바른 것 같습니다. 그런 다음 Log4net 구성 파일을 응용 프로그램에 등록해야합니다. 따라서 아래 코드를 사용할 수 있습니다.

var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));

프로세스를 등록한 후 아래 정의를 호출하여 로거를 호출 할 수 있습니다.

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

log.Error("Sample log");

0

나를 위해 로거를 Nuget 패키지로 옮겨야했습니다. 아래 코드는 NuGet 패키지 프로젝트에 추가해야합니다.

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

자세한 내용은 https://gurunadhduvvuru.wordpress.com/2020/04/30/log4net-issues-when-moved-it-to-a-nuget-package/ 를 참조하십시오.


답변으로 링크를 피하십시오. 그들은 항상 작동하지 않을 수 있습니다. 링크에 정보 요약을 포함하도록 답변을 편집하십시오.
Derek C.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.