在 Log4Net 中将变量添加到 rollingfileappender 的文件名
Add variables to filename of rollingfileappender in Log4Net
有没有办法使 fileAppender 变量的名称?
IE。当我在我的控制器上调用一个带有对象的操作时,我想将其写入日志文件。
该文件的名称类似于:
yyyyMMdd_hhmssms_[控制器]_[方法].json
这是我的配置文件中的内容:
<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="c:\temp\" />
<datePattern value="yyyyMMdd_hh.mm.ss.ms_%thread{CommonApplicationData}'.json'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%message%newline" />
</layout>
</appender>
此 returns 以下文件名:20160224_01.30.28.3028_P1rea24{Co30onApplicaPionDaPa}.json
一种方法是在您的代码中设置环境变量,例如:
Environment.SetEnvironmentVariable("APPENDER_FILE", "Your File Path");
然后在log4net中配置这个环境变量XML:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="${APPENDER_FILE}"/>
您可以像这样在 运行 时访问您的 log4net 配置的附加程序
var repository = (Hierarchy)LogManager.GetRepository();
var appenders = repository.GetAppenders().Where(x => x is FileAppender);
您可以通过名称获取特定的 appender
var appender = appenders.FirstOfDefault(x => x.Name.Equals("MyAppeader"));
有了 appender 后,您可以随意修改它。你想设置文件路径
appender.File = @"c:\folder\yyyyMMdd_hhmssms_[controller]_[method].json";
您不应该执行任何其他操作,因为 log4net 应该会自动开始使用新配置。
将这一切放入一个小辅助方法中,你会得到这个
public static void SetAppenderPath(string appender, string path)
{
var repository = (Hierarchy)LogManager.GetRepository();
var appenders = repository.GetAppenders().Where(x => x is FileAppender);
var appender = appenders.FirstOfDefault(x => x.Name.Equals(appender));
if (appender == null)
{
throw new ConfigurationErrorsException("Appender not found (" + appender + ")");
}
appender.File = path;
}
...
LogHelper.SetAppenderPath("MyAppender", @"yyyyMMdd_hhmssms_[controller]_[method].json");
有没有办法使 fileAppender 变量的名称? IE。当我在我的控制器上调用一个带有对象的操作时,我想将其写入日志文件。 该文件的名称类似于: yyyyMMdd_hhmssms_[控制器]_[方法].json
这是我的配置文件中的内容:
<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="c:\temp\" />
<datePattern value="yyyyMMdd_hh.mm.ss.ms_%thread{CommonApplicationData}'.json'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%message%newline" />
</layout>
</appender>
此 returns 以下文件名:20160224_01.30.28.3028_P1rea24{Co30onApplicaPionDaPa}.json
一种方法是在您的代码中设置环境变量,例如:
Environment.SetEnvironmentVariable("APPENDER_FILE", "Your File Path");
然后在log4net中配置这个环境变量XML:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="${APPENDER_FILE}"/>
您可以像这样在 运行 时访问您的 log4net 配置的附加程序
var repository = (Hierarchy)LogManager.GetRepository();
var appenders = repository.GetAppenders().Where(x => x is FileAppender);
您可以通过名称获取特定的 appender
var appender = appenders.FirstOfDefault(x => x.Name.Equals("MyAppeader"));
有了 appender 后,您可以随意修改它。你想设置文件路径
appender.File = @"c:\folder\yyyyMMdd_hhmssms_[controller]_[method].json";
您不应该执行任何其他操作,因为 log4net 应该会自动开始使用新配置。
将这一切放入一个小辅助方法中,你会得到这个
public static void SetAppenderPath(string appender, string path)
{
var repository = (Hierarchy)LogManager.GetRepository();
var appenders = repository.GetAppenders().Where(x => x is FileAppender);
var appender = appenders.FirstOfDefault(x => x.Name.Equals(appender));
if (appender == null)
{
throw new ConfigurationErrorsException("Appender not found (" + appender + ")");
}
appender.File = path;
}
...
LogHelper.SetAppenderPath("MyAppender", @"yyyyMMdd_hhmssms_[controller]_[method].json");