我有一个WCF服务应用程序,在其Web.config中,我定义了以下log4net配置:
<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());
日志不再正常,因为名称空间,类和方法名称变为&#34;?。?&#34;:
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 :(得分:0)
我并不完全了解您应该与Log4Net一起使用的参数,但是您的错误必须发生,因为您应该传递一个纯字符串。
您可以使用@PersistenceContext
。
String.Format()
因此,您应该可以使用
string message = String.Format("Server certificate issuer: [{0}], validity dates: [{1} - {2}].",
ServerCertificate.Issuer,
ServerCertificate.GetEffectiveDateString(),
ServerCertificate.GetExpirationDateString())
Log.InfoFormat(message);