Asp.net core 2.0에서 log4net을 사용하는 방법
는 니다합구를 구성합니다.log4net
이 기사에서 언급한 것처럼 나의 asp.net 코어 2.0 애플리케이션에서 링크.
program.cs
public static void Main(string[] args)
{
var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
BuildWebHost(args).Run();
}
홈 컨트롤러
public class HomeController : Controller
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));
public IActionResult Error()
{
log.Info("Hello logging world!");
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
log4net.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
<appender name="RollingFile" type="log4net.Appender.FileAppender">
<file value="C:\Temp\app.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
불행합니다! 생성된 파일을 보지 못했습니다.C:\Temp\app.log
디렉토리입니다.무엇이 잘못되었습니까? log4net
.netasp.net core 2.0의 경우?
ASP.NET Core 로깅 인터페이스에는 타사 log4net 어댑터가 있습니다.
당신이 해야 할 일은 단지 통과하는 것입니다.ILoggerFactory
의 신에게에.Startup
수업, 그리고 나서 전화하기
loggerFactory.AddLog4Net();
구성을 준비해야 합니다.그래서 당신은 보일러 플레이트 코드를 작성할 필요가 없습니다.
다음 코드를 사용하여 파일을 성공적으로 기록할 수 있습니다.
public static void Main(string[] args)
{
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead("log4net.config"));
var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
BuildWebHost(args).Run();
}
웹 사이트 루트의 log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="C:\Temp\" />
<datePattern value="yyyy-MM-dd.'txt'"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<maxSizeRollBackups value="100"/>
<maximumFileSize value="15MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level App %newline %message %newline %newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
아직도 해결책을 찾고 계십니까?저는 이 링크에서 제 것을 얻었습니다.
제가 해야 할 일은 "프로그램 클래스"에서 "public static void main" 메서드의 맨 위에 이 두 줄의 코드를 추가하는 것이었습니다.
var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));
예, 다음을 추가해야 합니다.
- 마이크로소프트.내선 번호.로깅.Log4Net.NuGet을 사용하는 AsNetCore.
- log4net.config 이름을 가진 텍스트 파일로 파일의 속성(출력 디렉터리에 복사)을 "새로 복사" 또는 "항상 복사"로 변경합니다.
또한 출력 콘솔에 기록된 모든 내용이 원하는 appender에 기록되도록 asp.net 코어 응용 프로그램을 구성할 수 있습니다.또한 github에서 이 예제 코드를 다운로드하여 내가 어떻게 구성했는지 확인할 수 있습니다.
Microsoft를 설치해야 합니다.내선 번호.로깅.Log4Net.AsNetCore NuGet 패키지를 가져오고 log4net.config-file을 응용 프로그램에 추가합니다.그러면 다음과 같이 작동합니다.
public class Program
{
private readonly ILogger<Program> logger;
public Program()
{
var services = new ServiceCollection()
.AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug))
.BuildServiceProvider();
logger = services.GetService<ILoggerFactory>()
.AddLog4Net()
.CreateLogger<Program>();
}
static void Main(string[] args)
{
Program program = new Program();
program.Run();
Console.WriteLine("\n\nPress any key to continue...");
Console.ReadKey();
}
private void Run()
{
logger.LogInformation("Logging is working");
}
}
의 . 2.사용하는 하여 Irfan의 . Core 2.1.300을 합니다../log
폴더 및 콘솔에도 연결됩니다.에 하십시오.log4net.config
솔루션 루트에 존재해야 합니다(제 경우에는 앱 루트가 하위 폴더입니다).
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs/" />
<datePattern value="yyyy-MM-dd.'txt'"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<maxSizeRollBackups value="100"/>
<maximumFileSize value="15MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level App %newline %message %newline %newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
다참을사항은고설정전방법다니입인통적또는하른▁up▁another▁xml▁다▁theal▁way▁within 내에서 XML을 설정하는 입니다.app.config
작동하지 않음:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net> ...
어떤 이유로 인해 다음을 통해 XML 문서에 액세스할 때 log4net 노드를 찾을 수 없습니다.log4netConfig["log4net"]
.
loggerFactory에서 네임스페이스가 모호하다는 것이 어떤 문제인지 알아냈습니다.Log4Net()을 추가합니다.다음은 제가 어떻게 log4Net을 ASP에 추가했는지에 대한 간단한 요약입니다.NetCore 프로젝트.
- 마이크로소프트 너겟 패키지를 추가합니다.내선 번호.로깅.Log4Net.AsNetCore
루트 응용 프로그램 폴더에 log4net.config 파일을 추가합니다.
Startup.cs 파일을 열고 이 loggerFactory 라인을 사용하여 log4net 지원을 추가하도록 구성 방법을 변경합니다.Log4Net 추가
먼저 Microsoft를 사용하여 패키지를 가져와야 합니다.내선 번호.로깅; 사용 문 사용
전체 메서드입니다. 네임스페이스를 사용하여 ILoggerFactory 인터페이스 앞에 붙여야 합니다.
public void Configure(IApplicationBuilder 앱, IHostingEnvironment, NorthwindContext 컨텍스트, Microsoft).내선 번호.로깅.I Logger 공장 로거 공장){로거 팩토리.Log4Net() 추가;.... }
저는 다음과 같은 방법으로 대응할 수 있었습니다.
1-Install-Package log4net
2-Install-Package MicroKnights.Log4NetAdoNetAppender
3-Install-Package System.Data.SqlClient
먼저 다음 코드를 사용하여 데이터베이스 및 테이블을 만듭니다.
CREATE DATABSE Log4netDb
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
)
두 번째로, 프로그램에 log4net.config 파일을 만듭니다.다음은 로그 메시지에 대한 사용자 지정 없이 간단한 구성입니다.
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<!-- definition of the RollingLogFileAppender goes here -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs/WebApp.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!-- Format is [date/time] [log level] [thread] message-->
<conversionPattern value="[%date] [%level] [%thread] %m%n" />
</layout>
</appender>
<appender name="AdoNetAppender" type="MicroKnights.Logging.AdoNetAppender, MicroKnights.Log4NetAdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data" />
<connectionStringName value="log4net" />
<connectionStringFile value="appsettings.json" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
셋째, 아래 코드를 '로 바꿉니다.IHost Builder':
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
// clear default logging providers
logging.ClearProviders();
logging.AddConsole();
logging.AddDebug();
logging.AddEventLog();
// add more providers here
})
.UseStartup<Startup>();
넷째, appsettings.json에 다음 코드를 삽입합니다.
{
"connectionStrings": {
"log4net": "Server=MICKO-PC;Database=Log4netDb;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
마지막으로 다음 명령을 사용하여 로그인을 즐기십시오.
public class ValuesController : Controller
{
private static readonly ILog log = LogManager.GetLogger(typeof(ValuesController));
[HttpPost]
public async Task<IActionResult> Login(string userName, string password)
{
log.Info("Action start");
// More code here ...
log.Info("Action end");
}
// More code here...
}
행운을 빌어요.
.NET Core 2.2에서 log4net을 구현하는 방법을 알아보려면 여기를 클릭하십시오.
다음 단계는 위 링크에서 수행한 것으로, .NET Core 2.2 프로젝트에 log4net을 추가하는 방법을 설명합니다.
먼저 Package-Manager 콘솔에서 다음 명령을 실행합니다.
Install-Package Log4Net_Logging -Version 1.0.0
그런 다음 다음과 같은 정보를 사용하여 log4net.config를 추가합니다(설정과 일치하도록 편집하십시오).
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="logfile.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p - %m%n" />
</layout>
</appender>
<root>
<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<level value="ALL" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
</configuration>
그런 다음 다음 코드를 컨트롤러에 추가합니다(이 예는 컨트롤러에 추가하기 전에 편집하십시오).
public ValuesController()
{
LogFourNet.SetUp(Assembly.GetEntryAssembly(), "log4net.config");
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
LogFourNet.Info(this, "This is Info logging");
LogFourNet.Debug(this, "This is Debug logging");
LogFourNet.Error(this, "This is Error logging");
return new string[] { "value1", "value2" };
}
그런 다음 관련 컨트롤러 조치를 호출합니다(위의 예를 사용하여 콜)./Values/Get
HTTP GET)를 사용하면 다음과 일치하는 출력을 수신할 수 있습니다.
2019-06-05 19:58:45,103 [9] INFO-[Log4NetLogging_Project]컨트롤러.Values Controller.Get:23] - 정보 로깅입니다.
나는 a를 포팅합니다.NetFramework 콘솔 앱에서 .NetCore에서 특정 상황에서 로그 파일이 생성되지 않는 유사한 문제를 발견했습니다.
"CreateRepository"를 사용할 때 .net 프레임워크와 .net 표준 사이에 차이가 있는 것으로 나타납니다.
.Net Framework에서 이 작업은 log4net.config의 동일한 속성을 사용하여 고유한 파일 이름으로 고유한 로그 인스턴스를 만듭니다.
GlobalContext.Properties["LogName"] = LogName;
var loggerRepository = LogManager.CreateRepository(LogName);
XmlConfigurator.Configure(loggerRepository);
.Net Standard에서는 이 작업이 수행되지 않았으며 추적을 설정하면 구성 파일 ".config"를 찾을 수 없습니다.이전에 알려진 구성을 로드하지 않았습니다.구성자에 구성을 추가한 후에도 로그가 기록되지 않았으며 이에 대한 불만도 없었습니다.
그것을 작동시키기 위해.이전과 유사한 동작을 하는 Net Standard, 이것이 제가 한 일입니다.
var loggerRepository = LogManager.CreateRepository(LogName);
XmlConfigurator.Configure(loggerRepository,new FileInfo("log4net.config"));
var hierarchy = (Hierarchy) loggerRepository;
var appender = (RollingFileAppender)hierarchy.Root.GetAppender("RollingLogFileAppender");
appender.File = Path.Combine(Directory.GetCurrentDirectory(), "logs", $"{LogName}.log");
모든 레포에 대한 구성 파일을 만들고 싶지 않았기 때문에 이 작업이 가능합니다.아마도 더 나은 방법이 있을 것입니다.이전과 같은 Net Framework 동작과 만약 있다면 아래에 알려주시기 바랍니다.
언급URL : https://stackoverflow.com/questions/46169606/how-to-use-log4net-in-asp-net-core-2-0
'programing' 카테고리의 다른 글
.NET의 저장 프로시저에서 오라클 출력 매개 변수를 반환하는 방법 (0) | 2023.06.07 |
---|---|
큰 숫자와 함께 DEC2BIN() 사용 (0) | 2023.06.07 |
봄 데이터 JPA의 항목 목록을 포함 쿼리를 사용하여 여러 열 검색 (0) | 2023.06.07 |
ASP.NET에 호환되지 않는 두 개의 세션 상태 유형이 있는 이유는 무엇입니까? (0) | 2023.06.07 |
pl/sql 프로시저에서 변수를 선언할 때 구문 오류 발생 (0) | 2023.06.07 |