При использовании рамки ASP.NET MVC можно получить вызывающий действие от LoginInterceptor (проверка this link), в ASP.NET Web Api I убежище Не нашел подходящего пути для его достижения, используя перехватчики с замком Виндзор.
С другой стороны, я нашел способ добиться того, что вы пытаетесь сделать, воспользовавшись Caller Info Attributes
и компонентом Castle Windsor LoggingFacility
.
Caller Info Атрибуты
Эти атрибуты
- [CallerMemberName] - Устанавливает информацию об имени члена вызывающего абонента.
- [CallerFilePath] - Устанавливает информацию об исходном коде вызывающего абонента .
- [CallerLineNumber] - Устанавливает информацию о номере линии звонящего.
И вы можете использовать их таким образом (как необязательные параметры):
public static void ShowCallerInfo([CallerMemberName]
string callerName = null, [CallerFilePath] string
callerFilePath = null, [CallerLineNumber] int callerLine=-1)
{
Console.WriteLine("Caller Name: {0}", callerName);
Console.WriteLine("Caller FilePath: {0}", callerFilePath);
Console.WriteLine("Caller Line number: {0}", callerLine);
}
Calling ShowCallerInfo();
метод (без параметров) отображает:
Caller Name: Main
Caller FilePath: h:\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1\Class1.cs
Caller Line number: 7
LoggingFacility
замок Windsor предоставляет компонент LoggingFacility
как alt (с использованием инъекции вместо перехвата), что позволяет вести журнал внутри ваших методов не только после и до (разрешенных с помощью перехватчиков).
Просто регистрации ваш Logger так:
container.AddFacility<LoggingFacility>(f => f.UseNLog().WithConfig("NLog.config"));
автоматически впрыскивает объект ILogger, который может использовать в своем коде.
public class MyController : ApiController
{
public ILogger Logger { get; set; }
[HttpGet]
public IHttpActionResult Get()
{
Logger.Info("Log Test");
…
}
...
}
Проверить это link, и это link для получения дополнительной информации.
Пример
Так, в качестве примера, вы можете смешать обе возможности для достижения Logging в действиях контроллера таким образом:
public class MyController : ApiController
{
// Make Logger optional
private ILogger logger = NullLogger.Instance;
public ILogger Logger
{
get { return logger; }
set { logger = value; }
}
[HttpGet]
public IHttpActionResult Get()
{
loggerError("Error");
...
return Ok();
}
....
public void loggerError(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Logger.Error(message +
" - Caller Name: " + memberName
+ " - Caller FilePath: " + sourceFilePath
+ " - Line number: " + sourceLineNumber
);
}
...
}
Вы имеете в виду 'призывание .Arguments'? – PatrickSteele