ASP.NET 3.5 문제가있는 log4net
-
03-07-2019 - |
문제
ASP.NET 3.5에서 Log4Net이 작동하는 데 어려움이 있습니다. Log4net을 사용하려고 시도한 것은 이번이 처음입니다. 퍼즐 조각이 빠진 것 같습니다.
내 프로젝트는 log4net 어셈블리를 참조하고 내가 알 수있는 한 내 서버에 성공적으로 배포되고 있습니다.
내 web.config는 다음을 포함합니다.
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler
, log4net"
requirePermission="false"/>
</configSections>
<log4net>
<appender name="InfoAppender" type="log4net.Appender.FileAppender">
<file value="..\..\logs\\InfoLog.html" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern
value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<logger name="_Default">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
</log4net>
다음 코드를 사용하여 로거를 테스트합니다.
using log4net;
using log4net.Config;
public partial class _Default : System.Web.UI.Page
{
private static readonly ILog log = LogManager.GetLogger("_Default");
protected void Page_Load(object sender, EventArgs e)
{
log.Info("Hello logging world!");
}
}
내 Global.asax에서는 다음을 수행하고 있습니다.
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
이 시점에서 나는 내가 잘못하고있는 다른 것을 생각할 수 없습니다. 로그인을 저장하려는 디렉토리는 쓰기가 가능하며, 다른 디렉토리를 시도하더라도 파일, 로그가 없음과 같은 결과를 얻습니다.
제안이 있습니까? :-)
편집 : 로그 파일의 경로 및 이름에 대해 몇 가지 다른 형식을 시도했는데 그 중 일부는 ".. .. , 누군가가 그것이 문제인지 궁금해하는 경우를 대비하여.
편집 : 루트 로거 노드를 Log4NET 섹션에 다시 추가했는데 샘플에서 복사 할 때 사고시이를 획득했습니다. 루트 로거 노드는 다음과 같습니다.
<root>
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</root>
그러나 그럼에도 불구하고 나는 여전히 운이 없습니다.
해결책
루트 로거는 필수입니다. 루트가 존재하지 않기 때문에 구성이 실패했다고 생각합니다.
또 다른 잠재적 인 문제는 구성이 web.config를 가리키지 않다는 것입니다.
대신 configure (server.mappath ( "~/web.config"))를 사용해보십시오.
다른 팁
파일 권한 문제와 매우 흡사합니다. 경로가없는 파일 이름을 지정하면 Log4Net은 웹 응용 프로그램의 루트 디렉토리에 씁니다. 시도해보십시오. 성공을 막기 위해 다음을 web.config에 넣어 내부 Log4Net 디버깅을 활성화하는 것이 좋습니다.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
그런 다음 디버그 모드로 컴파일 된 앱을 배포하고 Visual Studio 원격 디버거 던지는 오류를 보려면.
IV 방금이 문제를 해결하는 데 3 시간을 보냈습니다. Web.config 형식은 끝이었습니다.
나는 이것을 가지고 있었고 효과가 없었습니다.
<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler
, log4net"
requirePermission="false"/>
이로 변경하여 고정되었습니다.
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>
성가신!!
정보를 위해 : 파일 경로는 다음과 같이 형식화되어야합니다.
<file value="..\\..\\logs\\InfoLog.html" />
간단한 구성 튜토리얼 CodeProject
.NET 3.5에서 실행할 Global.asx가 없습니다.
이것은 내 코드입니다 ... 별도의 파일로 log4net을 구성합니다. log4net.config
// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
//My Web Services class name
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");
나는 같은 (실망스러운) 문제가있었습니다. 루트를 log4net 구성 섹션의 상단으로 옮겼으며 모두 작동했습니다. 또한, 나도 루거와 로거 요소가 있었기 때문에 로거를 호출 할 때마다 두 줄이 생겼습니다. 나는 로거 요소를 제거하고 단순히 뿌리와 그 일을 잘 유지합니다.
다음과 같은 페이지 유형으로 로거를 만드는 것은 어떻습니까?
private static readonly ILog log = LogManager.GetLogger(typeof(_Default));
이것이 제가 Global.asx에서 가지고있는 것입니다. ASP.NET 3.5에서 모두 작동했습니다
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
log4net.Config.XmlConfigurator.Configure();
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
log4net.LogManager.Shutdown();
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
</script>