在我们的项目中,大约95%的日志正在根据我们配置的转换模式进行格式化。但是,有时我们会收到不符合要求的日志。
这是我们的配置
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="Logs\nsc.latest.log"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10 " />
<maximumFileSize value="100MB" />
<rollingStyle value="Size"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value='{ "level":"%level", "timestamp":"%utcdate{yyyy-MM-ddTHH:mm:ss.fffZ}", "logger":"%logger", "message":"%message" }%newline' />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
和我们的启动代码
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace NSCApp
{
public class MvcApplication : System.Web.HttpApplication
{
log4net.Config.XmlConfigurator.Configure();
///Rest of code...
}
}
这是我们通常得到的,这就是我们想要的
{ "level":"INFO", "timestamp":"2020-02-05T23:46:59.295Z", "logger":"", "message":"{"Application":"NSC App","ExpirationDateTime":"2020-02-05T22:46:59.2926871-07:00","SessionId":"00D80000000K5KK!AQsAQAAM7dU1tiCe1BHXL2NDcMiJU4prh8CnAgnHQ8jf6cYLYZgVo2FfkwFNm10b1eUA0gBSFPn_GFhDKwmye79fNQXoH2Cl","User":"nscapi@extraspace.com"}" }
但是偶尔我们会得到这样的一个
System.ArgumentNullException: Value cannot be null.
Parameter name: input
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement)
at System.Text.RegularExpressions.Regex.Replace(String input, String pattern, String replacement)
at CodeBase.Tools.ConvertToAlphaNumeric(String term) in C:\Code\TestRepos\extraspace.web.codebase\Tools.cs:line 2019
at CodeBase.Salesforce.LookupReservation(Config config, String opptyID) in C:\Code\TestRepos\extraspace.web.codebase\Salesforce.cs:line 1074
关于为什么会发生这种情况的任何想法?
log4net是否具有不符合指定转换模式的全局捕获?
您能为完全相同的日志代码行使用两种格式吗?还是总是特定的日志消息具有意外的格式?