我正在开发.net core 2.1应用程序,并尝试将log4net合并到文件中。我可以使用它,但是无法弄清楚如何将日志写入不同位置的不同环境(即测试/生产)。
log4net.config
<log4net>
<root>
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level - %message%newline" />
</layout>
<threshold value="Info" />
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="C:\logs\TestLocation\MyLog.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="100MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level - %message%newline" />
</layout>
<threshold value="Info" />
</appender>
</log4net>
我的startup.cs配置方法是:
loggerFactory.AddLog4Net();
我将记录器注入控制器中
public MyController(ILogger<MyController> logger)
{
_logger = logger;
}
并在我的控制器中使用它:
_logger.LogInformation("My logger worked!!!!!!!!!!!");
一切正常。我希望我可以仅添加一个新的log4net.config文件并将其命名为log4net.Production.config,然后应用程序将根据其所处的环境(如appnsettings.json)使用不同的配置文件。相反,它仅使用我的默认log4net.config文件。
对于每个环境(例如appsettings.json)是否可以有多个log4net.config文件?
答案 0 :(得分:1)
在您的Startup.cs
上,您可以这样配置它:
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
FileInfo fInfo;
if (File.Exists(Path.Combine(env.ContentRootPath, $"log4net.{env.EnvironmentName}.xml")))
fInfo = env.GetLog4NetFile($"log4net.{env.EnvironmentName}.xml");
else
fInfo = env.GetLog4NetFile($"log4net.xml");
XmlConfigurator.Configure(fInfo);
LogManager.GetLogger(DefaultLoggerName)?.Info($"Environment={env.EnvironmentName}");
Configuration = configuration;
}
然后,您可以创建一个log4net.Production.xml
之类的文件,并根据使用的环境对其进行自定义。
答案 1 :(得分:0)
您可以选择从应用设置中使用高级custom configuration。{environment} .json。
覆盖Log4NetConfigFileName
属性的值,您将能够为每个环境指示不同的log4net.config文件。
"Log4NetCore": {
"Log4NetConfigFileName": "log4net.production.config"
}
为了完成此自定义配置,应将AddLog4Net()
调用替换为对AddLog4Net(Log4NetProviderOptions)
方法的等效调用。
var loggingOptions = this.Configuration.GetSection("Log4NetCore")
.Get<Log4NetProviderOptions>();
loggerFactory.AddLog4Net(loggingOptions);
由于已经在您的项目上配置了按环境动态加载appsettings.json,因此应自动针对生产环境进行特定配置。
希望这会有所帮助。