我需要在我的asp.net应用程序中设置日志。将输出添加到控制台很容易,但我需要在Azure中进行配置。我不知道怎么做。我需要将我的应用程序发生的所有信息记录到某个文件中并阅读它。
答案 0 :(得分:1)
ILoggerFactory
允许应用使用ILogger
和ILoggerProvider
的任何实现。
有关如何正确实现接口的详细信息,请查看框架ConsoleLogger
和ConsoleLoggerProvider
。另请参阅ASP.NET Core documentation on logging。
以下是自定义ILogger
的最小示例。 这不是生产代码,而是展示足够的技术深度来编写您自己的ILogger
或使用社区中的一个。
<强> project.json 强>
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final"
}
<强> MyLoggingProvider.cs 强>
namespace LoggingExample
{
using Microsoft.Extensions.Logging;
public class MyLoggingProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName)
{
return new MyLogger();
}
public void Dispose()
{
// TODO Cleanup
}
}
}
MyLogger.cs
在Azure中,您需要写入C:/temp/some-guid.txt
以外的其他位置。但是,这足以让您开始编写自己的简单记录器。
namespace LoggingExample
{
using System;
using Microsoft.Extensions.Logging;
public class MyLogger : ILogger
{
public void Log(LogLevel logLevel, int eventId, object state,
Exception exception, Func<object, Exception, string> formatter)
{
var builder = new StringBuilder();
if (formatter != null) {
builder.AppendLine(formatter(state, exception));
}
var values = state as ILogValues;
if (values != null) {
foreach (var v in values.GetValues()) {
builder.AppendLine(v.Key + ":" + v.Value);
}
}
var logPath = string.Format("C:/temp/{0}.txt", Guid.NewGuid());
File.WriteAllText(logPath, builder.ToString());
}
public bool IsEnabled(LogLevel logLevel) {
return true;
}
public IDisposable BeginScopeImpl(object state) {
return null;
}
}
}
<强> Startup.cs 强>
现在,您可以通过loggerFactory.AddProvider(new MyLoggingProvider())
添加记录器。现在,对ILogger
的每次通话都会与您的提供商进行对话。
namespace LoggingExample
{
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.Logging;
public class Startup
{
public void Configure(
IApplicationBuilder app,
ILoggerFactory loggerFactory)
{
loggerFactory
.AddConsole(minLevel: LogLevel.Verbose)
.AddProvider(new MyLoggingProvider());
app.Run(async (context) =>
{
var logger = loggerFactory.CreateLogger("CatchAll");
logger.LogInformation("Hello logger!");
await context.Response.WriteAsync("Hello world!");
});
}
}
}
<强> MyController.cs 强>
支持依赖项注入的任何地方现在都可以收到ILogger
,它将记录到我们在Startup.Configure
方法中注册的所有提供程序。
namespace LoggingExample
{
using Microsoft.AspNet.Mvc;
using Microsoft.Extensions.Logging;
public class MyController : Controller
{
public MyController(ILogger logger)
{
logger.LogInformation("Logging from my controller");
}
}
}
答案 1 :(得分:0)
使用Log4Net。它是一个常见的日志记录框架,每个跟踪代码的人都能理解,并且它可以让你通过编辑配置文件来动态地附加一个新的日志“目标”。它已经涵盖了你想要做的大部分事情(比如为每个“day”创建一个单独的文件),并且那里的大多数日志挖掘工具都能够读取l4n创建的文件。
设置
如何开始tutorials online,但它们基本上只需要几个简单的步骤:
创建 logger object的静态实例
日志资料,无论您需要哪个地方。如果您决定要让记录器写入文件,它会。如果添加数据库编写器,它也会写入数据库。希望您的日志条目显示在控制台中,只需在默认(调试)配置中添加该记录器。
设置完成后,日志记录就像这段代码一样简单:
...
} catch(SystemException ex) {
logger.Error("This error was thrown by the XXX routine", ex);
}
希望这有帮助。
编辑:配置文件+核心
正如@auga在他非常有用的评论中指出的那样,ASP.Net 5的配置可能要求您仔细阅读我在上面的步骤#2中添加的链接(配置您的记录器)。我只是link to the article I used在我们的ASP.NET 5环境中设置它,而不是重写其他人的博客文章。工作得很好。
如果您正在阅读这篇文章以学习(而不是略读评论),我建议您关注这些链接......