问题描述
我使用 log4net.ext.json 登录 wcf 类库,但没有 exe。但是我想给 appname 一些别名,例如CarService 而不是 /LM/W3SVC/2/ROOT-1-132599327970820414。我该如何配置?
当前配置:
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<encoding value="UTF-8" type="System.Text.UTF8Encoding" />
<file type="log4net.Util.PatternString" value="C:\Logs\WcfLibrary.log" name ="RollingLogFileAppender" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<countDirection value="-1"/>
<datePattern value="yyyy-MM-dd"/>
<logName value="Myapp" />
<applicationName value="BmwService" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.SerializedLayout,log4net.Ext.Json">
<member value="logDateTime%date:yyyy-MM-dd HH:mm:ss:ffff" />
<decorator type="log4net.Layout.Decorators.StandardTypesDecorator,log4net.Ext.Json" />
<member value="hostName" />
<default />
<remove value="date" />
<remove value="ndc" />
<remove value="message" />
<remove value="thread" />
<remove value="exception" />
<member value="logData:messageObject" />
</layout>
</appender>
<root>
<level value="All"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
我收到以下日志:
{"logDateTime":"2021-03-11","hostName":"PC","level":"DEBUG","appname":"/LM/W3SVC/2/ROOT-1-132599327970820414","logger":"Service","logData":{"Message":"Service started","ClassName":"Utils","MethodName":"Start"}}
预期的日志是:
{"logDateTime":"2021-03-11","appname":"CarService","MethodName":"Start"}}
解决方法
查看各种 context objects in log4net。您将在第一次日志记录调用之前设置它(可能在构造函数中或在初始化期间)。它会在您的线程调用的整个生命周期中持续存在,如果您在线程之外,您只需要再次设置它。如果您已经为记录器实现了一个包装库,您还可以根据您公开的某些参数将其设置在那里。
ThreadContext.Properties["appname"] = "CarService"
设置后,您应该能够在您的 appender 配置或映射中引用“appname”。
此外,如果您尝试获取应用程序的实际名称,并且在您的 IIS 站点名称中反映了该名称,您可以使用“HostingEnvironment.SiteName”传递到线程上下文中。