2014-09-11 4 views
0

Log4net을 사용하여 두 개의 다른 테이블에 로그를 만들려고합니다. 첫 번째 adonetappender는 'log'라는 테이블에 로그인하고 표준 ID, 날짜, 스레드, 레벨 등이어야합니다. 두 번째 adonetappender는 'usageLog'라는 세 개의 열이있는 테이블에 로그온해야하며 날짜 만 기록하면됩니다/시간 및 두 개의 추가 문자열 값. 나는 내 인생을 생각할 수 없다. 내가 무엇을해야 하나? 아래는 나의 설정입니다. 그 정확한지 나는 프로그램에서 이것을 어떻게 사용하는지 모른다. log4net 각 사용자 정의 필드가있는 복수 adonetappender

<log4net> 
<logger additivity="false" name="Log"> 
    <level value="INFO"/> 
    <appender-ref ref="LogAppender" /> 
</logger> 
<logger additivity="false" name="UsageLog"> 
    <level value="INFO"/> 
    <appender-ref ref="UsageLogAppender" /> 
</logger> 

<appender name="LogAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1" /> 
    <!-- Causes errors to be written immediately - default is 100 --> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=dummy;initial catalog=dummy;integrated security=false;persist security info=True;User ID=dummy;Password=dummy" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@thread" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@log_level" /> 
    <dbType value="String" /> 
    <size value="50" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@logger" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 

<appender name="UsageLogAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1" /> 
    <!-- Causes errors to be written immediately - default is 100 --> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=dummy;initial catalog=dummy;integrated security=false;persist security info=True;User ID=dummy;Password=dummy" /> 
    <commandText value="INSERT INTO UsageLog ([Date],[ManDesc],[ModDesc]) VALUES (@log_date, @man_desc, @model_desc)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@man_desc" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.RawPropertyLayout"> 
     <conversionPattern value="%property{man_desc}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@model_desc" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{model_desc}" /> 
    </layout> 
    </parameter> 
</appender> 

+0

그것은 조금 다음 확인할 수 있습니다, 잘못을 확인하려면 어렵습니다 : 당신은 디스크의 텍스트 파일에 쓸 때 로그 작업을합니까? 그렇지 않다면 log4net에 대한 구성 단계를 다시 거쳐 무엇이 잘못되었는지 확인하십시오. 그렇다면 자격 증명이 올바른지 확인하고 응용 프로그램이 배포 된 컴퓨터에서 SQL db에 대한 명령 줄 호출이 작동하는지 확인하십시오. – samy

답변

1

당신이 다른 열 두 개의 서로 다른 테이블에 같은 메시지를 기록하고 싶은 것을 나에게 보인다. 이것이 사실이라면 루트 로거 누락처럼 보인다 :

당신은 그러나 코드에서 다음과 같이 귀하의 로거를 선언하고 만 특정 로거는 다른 이들 다른 테이블에 로그인 할 경우
<root> 
    <level value="INFO" /> 
    <appender-ref ref="LogAppender" /> 
    <appender-ref ref="UsageLogAppender" /> 
</root> 

이야기 :

코드에서 로거를 이렇게 지정하면 위의 구성이 계속 작동합니다. 이 방법으로 로그를 선언하지 않으면 아무 것도 기록되지 않습니다. 너무하지만 log4net 로깅을 설정하는 것이 도움이 :

How to track down log4net problems

관련 문제