데이터베이스에 쓰도록 log4net을 구성했습니다. 내 로그 구성은 다음과 같습니다.log4net을 사용하여 SQL 연결을 다시 시도하십시오.
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<appender-ref ref="SqlAppenderAll" />
<level value="DEBUG" />
</root>
<appender name="SqlAppenderAll" type="log4net.Appender.ADONetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="MyConnectionString" />
...
</appender>
</log4net>
문제는 MyConnectionString을 즉시 사용할 수 없다는 것입니다. 서비스에 대한 여러 구성 항목이 구성 데이터베이스에 저장되고 서비스가 시작될 때 검색됩니다. 이렇게하면 연결 문자열을 각 서비스마다 개별적으로 설정하지 않고 전체 시스템에 대해 한 번 구성 할 수 있습니다. 이 초기화 될 때 연결 문자열을 사용할 수 없기 때문에
가var myConnectionString = ConfigProvider.GetConnectionString("MyConnectionString");
AddConnectionString(myConnectionString, "web.config");
이것은 SQL의 펜더를 무시 log4net 원인 : 서비스가 시작되면
그래서,이 같은 작업을 수행합니다.
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Could not open database connection []. Connection string context [Unable to determine connection string context.].
log4net.Core.LogException: Unable to find [MyConnectionString] ConfigurationManager.ConnectionStrings item
at log4net.Appender.AdoNetAppender.ResolveConnectionString(String& connectionStringContext)
at log4net.Appender.AdoNetAppender.InitializeDatabaseConnection()
이후의 모든 log.Info/Debug/etc 호출은 기록되지 않습니다.
web.config에 연결 문자열을 추가 한 후 log4net에서 연결을 다시 시도하는 방법이 있습니까? 또는 log4net init 프로세스를 연기 할 수있는 방법이 있습니까?
로깅은 watch = true로 설정됩니다. 문제는 로깅 파일에서 변경이 일어나지 않고, web.config (그리고 심지어는 실제 파일이 아닌 메모리에만 있음)에 있습니다. 로깅 파일은 연결 문자열을 이름으로 만 참조합니다. 따라서 연결 문자열이 추가되면 log4net에 의해 선택되지 않습니다. – ConditionRacer
@ConditionRacer - 업데이트를 확인하고 현재 작동하는지 확인하십시오. –
작동! 고마워요. – ConditionRacer