每个api调用log4net单独的文件

时间:2017-02-22 22:06:57

标签: c# asp.net log4net

我正在开发一个由两个组件组成的项目。一个是ASP.NET Web API,另一个是类库。

我在类库中使用了log4net,这样当我使用库时,我可以获取记录在其中的消息。

我想要完成的是每次执行其中一个控制器内的函数时,我想创建一个新的日志文件,其中只包含在此函数调用中生成的日志消息以及调用此函数产生的日志消息。图书馆。

当我两次调用API两次同时将来自两个调用的消息写入两个文件时,会发生什么。

我使用以下帮助程序类来避免使用配置XML文件:

public class Logger
{
    public static void ConfigureFileAppender(string logFile)
    {
        var fileAppender = GetFileAppender(logFile);
        BasicConfigurator.Configure(fileAppender);
        //((Hierarchy)LogManager.GetRepository()).Root.Level = Level.Debug;
    }

    private static IAppender GetFileAppender(string logFile)
    {
        var layout = new PatternLayout("%date %-5level %logger - %message%newline");
        layout.ActivateOptions(); // According to the docs this must be called as soon as any properties have been changed.

        var appender = new FileAppender
        {
            File = logFile,
            Encoding = Encoding.UTF8,
            Threshold = Level.All,
            Layout = layout
        };

        appender.ActivateOptions();

        return appender;
    }
}

我的部分API代码:

private static readonly ILog Log = LogManager.GetLogger(typeof(Program));

// POST api/values
[HttpPost]
public void Post([FromBody]ApiParameter parameter)
{
    var instanceId = $"{parameter.ActionInstanceId}_{parameter.ConfigFileName}_{DateTime.Now.ToString("MMddyyyy_HHmmss")}";

    string RunPath = Path.Combine(ROOT_PATH, instanceId);
    Logger.ConfigureFileAppender(Path.Combine(RunPath) +"\\ETLLOG.log");


    Log.Info("ETL API Started");

    ....
    ....
}

0 个答案:

没有答案