2017-02-14 43 views
0

У меня есть приложение службы WCF, и в его Web.config, я определил следующую конфигурацию: log4netпространство имен/класс/метод не отображается в файле журнала, когда параметры более 2

<log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <param name="File" value="F:\InternalAPIServer\logs\InternalAPIServer.log"/> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="2" /> 
    <maximumFileSize value="1MB" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] [%-5p] %C.%M - %m%n"/> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
    </root> 
</log4net> 

В кодах, когда я назвал регистратор с одним или двумя параметрами:

Log.InfoFormat("Server certificate validity dates: [{0} - {1}].", ServerCertificate.GetEffectiveDateString(), ServerCertificate.GetExpirationDateString()); 

журнал Обнаруживаются оК в файле журнала:

2017-02-14 17:12:01,056 [12] [INFO ] InternalAPIServer.Connection.ValidateServerCertficate - Server certificate validity dates: [31/5/2016 8:00:00 AM - 7/6/2017 8:00:00 PM]. 

Но когда я назвал регистратор с тремя параметрами:

Log.InfoFormat("Server certificate issuer: [{0}], validity dates: [{1} - {2}].", ServerCertificate.Issuer, ServerCertificate.GetEffectiveDateString(), ServerCertificate.GetExpirationDateString()); 

Бревно уже не нормально, потому что пространство имен, класс и метод стал «?.?»:

2017-02-14 17:22:01,056 [12] [INFO ] ?.? - Server certificate issuer: [CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc], C=US, validity dates: [31/5/2016 8:00:00 AM - 7/6/2017 8:00:00 PM]. 

Почему это так ? Как сохранить имя пространства имен, класс и имя метода из-за подавления, когда количество параметров для регистратора больше двух?

Заранее спасибо.

ответ

0

Я точно не знаю параметров, которые вы должны использовать с Log4Net, но ваша ошибка должна произойти из-за того, что вы должны передавать простую строку.

Вы можете сделать это, используя String.Format().

string message = String.Format("Server certificate issuer: [{0}], validity dates: [{1} - {2}].", 
    ServerCertificate.Issuer, 
    ServerCertificate.GetEffectiveDateString(), 
    ServerCertificate.GetExpirationDateString()) 

Log.InfoFormat(message); 

Так значит, вы должны быть в состоянии использовать в качестве альтернативы

Log.InfoFormat(String.Format("{0} {1}", string1, string2));