126 lines
5.5 KiB
C#
126 lines
5.5 KiB
C#
#if !UNITY_WEBGL || UNITY_EDITOR
|
|
using log4net;
|
|
using log4net.Appender;
|
|
using log4net.Core;
|
|
using log4net.Filter;
|
|
using log4net.Layout;
|
|
using log4net.Repository.Hierarchy;
|
|
using log4net.Unity;
|
|
using log4net.Unity.Config;
|
|
using System;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
|
|
namespace UVC.Log
|
|
{
|
|
/// <summary>
|
|
/// xml 설정에서 AppData\LocalLow\Company Name\Product Name\ 접근 할 수 없어서 사용.
|
|
/// 로그 파일 어펜더 및 로깅 수준을 포함하여 애플리케이션의 log4net 로깅을 구성합니다.
|
|
/// </summary>
|
|
/// <remarks>이 클래스는 log4net이 로깅에 롤링 파일 어펜더를 사용하도록 설정합니다.
|
|
/// 일반 로그와 치명적인 로그에 대해 별도의 구성을 사용합니다.
|
|
/// 로그 메시지의 형식이 일관되고
|
|
/// 애플리케이션의 런타임 환경(편집기 또는 런타임)에 따라 적절한 로그 파일에 기록되도록 합니다.</remarks>/// <summary>
|
|
/// 로그 파일 어펜더 및 로깅 수준을 포함하여 애플리케이션의 log4net 로깅을 구성합니다.
|
|
/// </summary>
|
|
/// <remarks>이 클래스는 log4net이 로깅에 롤링 파일 어펜더를 사용하도록 설정합니다.
|
|
/// 일반 로그와 치명적인 로그에 대해 별도의 구성을 사용합니다.
|
|
/// 로그 메시지의 형식이 일관되고
|
|
/// 애플리케이션의 런타임 환경(편집기 또는 런타임)에 따라 적절한 로그 파일에 기록되도록 합니다.</remarks>
|
|
[ExcludeFromSearch]
|
|
public class Log4netCodeConfigurator : IConfigurator
|
|
{
|
|
/// <summary>
|
|
/// 미리 정의된 log4net 구성을 사용하여 로깅 시스템을 구성합니다.
|
|
/// </summary>
|
|
/// <remarks>이 메서드는 구성 프로세서에 log4net 기반 구성기를 추가하여 로깅 시스템을 초기화합니다.
|
|
/// 로깅이 올바르게 설정되도록 애플리케이션 시작 중에 한 번 호출해야 합니다.
|
|
///</remarks>
|
|
public static void Setup()
|
|
{
|
|
var configurator = new Log4netCodeConfigurator(0);
|
|
ConfigProcessor.AddConfigurator(configurator);
|
|
configurator.TryConfigure();
|
|
}
|
|
|
|
public int Order { get; }
|
|
public event Action OnChange;
|
|
|
|
public Log4netCodeConfigurator(int order)
|
|
{
|
|
Order = order;
|
|
}
|
|
|
|
public void TryConfigure()
|
|
{
|
|
var hierarchy = (Hierarchy)LogManager.GetRepository();
|
|
|
|
var patternLayout = new PatternLayout();
|
|
patternLayout.ConversionPattern = "[%date][%thread][%level][%logger] %message%newline";
|
|
patternLayout.ActivateOptions();
|
|
|
|
var appender = GetAppenderRolling();
|
|
appender.Layout = patternLayout;
|
|
hierarchy.Root.AddAppender(appender);
|
|
|
|
var appenderFatal = GetAppenderRollingFatal();
|
|
appenderFatal.Layout = patternLayout;
|
|
hierarchy.Root.AddAppender(appenderFatal);
|
|
|
|
hierarchy.Root.Level = Level.All;
|
|
hierarchy.Configured = true;
|
|
}
|
|
|
|
|
|
private RollingFileAppender GetAppenderRolling()
|
|
{
|
|
var appender = new RollingFileAppender();
|
|
appender.Encoding = System.Text.Encoding.UTF8; // UTF-8 인코딩 사용
|
|
appender.AppendToFile = true;
|
|
appender.MaxSizeRollBackups = 10; // 최대 롤백업 수
|
|
appender.MaximumFileSize = "10MB"; // 최대 파일 크기
|
|
appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
|
|
appender.StaticLogFileName = true; // 파일 이름을 고정
|
|
appender.DatePattern = "yyyy-MM-dd"; // 날짜 패턴
|
|
if (Application.isEditor)
|
|
{
|
|
appender.File = Path.Combine(Application.persistentDataPath, "unityLogs/editor.log"); // 에디터에서의 로그 파일 경로
|
|
}
|
|
else
|
|
{
|
|
appender.File = Path.Combine(Application.persistentDataPath, "unityLogs/runtime.log"); ; // 빌드된 애플리케이션에서의 로그 파일 경로
|
|
}
|
|
Debug.Log($"Log4netCodeConfigurator: Log file path: {appender.File}");
|
|
return appender;
|
|
}
|
|
|
|
private RollingFileAppender GetAppenderRollingFatal()
|
|
{
|
|
var appender = new RollingFileAppender();
|
|
appender.Encoding = System.Text.Encoding.UTF8; // UTF-8 인코딩 사용
|
|
appender.AppendToFile = true;
|
|
appender.MaxSizeRollBackups = 500; // 최대 롤백업 수
|
|
appender.MaximumFileSize = "10MB"; // 최대 파일 크기
|
|
appender.RollingStyle = RollingFileAppender.RollingMode.Size;
|
|
appender.StaticLogFileName = true; // 파일 이름을 고정
|
|
appender.DatePattern = "yyyy-MM-dd"; // 날짜 패턴
|
|
var levelFilter = new LevelRangeFilter
|
|
{
|
|
LevelMin = Level.Fatal,
|
|
LevelMax = Level.Fatal
|
|
};
|
|
appender.AddFilter(levelFilter);
|
|
if (Application.isEditor)
|
|
{
|
|
appender.File = Path.Combine(Application.persistentDataPath, "unityLogs/editorFatal.log"); // 에디터에서의 로그 파일 경로
|
|
}
|
|
else
|
|
{
|
|
appender.File = Path.Combine(Application.persistentDataPath, "unityLogs/runtimeFatal.log"); ; // 빌드된 애플리케이션에서의 로그 파일 경로
|
|
}
|
|
return appender;
|
|
}
|
|
|
|
}
|
|
}
|
|
#endif |