<log4net debug="true">
<appender name="DBRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="[你的路徑]\temp\%date{yyyy}\%date{MM}\%date{dd}\" />
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<!--設定檔案分割依據Date和Size-->
<rollingStyle value="Composite"/>
<!--設定每個檔案的大小-->
<MaximumFileSize value="250KB" />
<!--設定分割檔案的最大數量-->
<maxSizeRollBackups value="2000" />
<CountDirection value="1" />
<!--log檔案的命名-->
<datePattern value="yyyy-MM-dd-HH-DB2.lo\g"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%-5level] From %logger%newline %file:%line [%property{NDC}]%newline %message%newline%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
</filter>
</appender>
<appender name="SystemRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--存放log檔案的路徑(%property{LogPath}屬性請勿任意修改)-->
<file type="log4net.Util.PatternString" value="[你的路徑]\temp\%date{yyyy}\%date{MM}\%date{dd}\" />
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<!--設定檔案分割依據Date和Size-->
<rollingStyle value="Composite"/>
<!--設定每個檔案的大小-->
<MaximumFileSize value="20KB" />
<!--設定分割檔案的最大數量-->
<maxSizeRollBackups value="2000" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<CountDirection value="1" />
<!--log檔案的命名-->
<datePattern value="yyyy-MM-dd-HH-DB.lo\g"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm} %level %logger %ndc - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="DEBUG"/>
</filter>
</appender>
<!--紀錄錯誤訊息-->
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--存放log檔案的路徑-->
<file type="log4net.Util.PatternString" value="[你的路徑]\temp\%date{yyyy}\%date{MM}\%date{dd}\" />
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<!--設定檔案分割依據Date和Size-->
<rollingStyle value="Composite"/>
<!--設定每個檔案的大小-->
<MaximumFileSize value="250KB" />
<!--設定分割檔案的最大數量-->
<maxSizeRollBackups value="2000" />
<!--log檔案的命名-->
<datePattern value="yyyy-MM-dd-HH-DB3.lo\g"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] [%-5level] From %logger%newline %file:%line [%property{NDC}]%newline %message%newline%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN"/>
</filter>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="DBRollingFileAppender"/>
<appender-ref ref="SystemRollingFileAppender"/>
<appender-ref ref="ErrorRollingFileAppender"/>
</root>
</log4net>
// 如果不是透過 class access ,記得要在 Application_Start 呼叫 log4net.Config.XmlConfigurator.Configure(); 哦!
var logType = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
//Assembly assem = logType.Assembly;
var logger = LogManager.GetLogger(logType);
var appenders = logger.Logger.Repository.GetAppenders();
var rollingAppenders = appenders.OfType<RollingFileAppender>();
foreach (var appender in rollingAppenders)
{
Response.Write($"<h3>*** Name:{appender.Name} *** </h3>");
Response.Write($"File : {appender.File}<br/>");
Response.Write($"CountDirection : {appender.CountDirection}<br/>");
Response.Write($"MaxSizeRollBackups : {appender.MaxSizeRollBackups}<br/>");
Response.Write($"MaxFileSize : {appender.MaxFileSize}<br/>");
Response.Write($"StaticLogFileName : {appender.StaticLogFileName}<br/>");
var propInfo = appender.GetType().BaseType.BaseType
.GetProperty("QuietWriter", BindingFlags.NonPublic | BindingFlags.Instance);
var quiteWriter = propInfo?.GetValue(appender) as CountingQuietTextWriter;
Response.Write($"FileSize : {quiteWriter?.Count}<br/>");
var scheduleFieldInfo = appender.GetType().GetField("m_scheduledFilename", BindingFlags.NonPublic | BindingFlags.Instance);
var scheduleField = scheduleFieldInfo.GetValue(appender) ;
Response.Write($"m_scheduledFilename : {scheduleField}<br/>");
var m_curSizeRollBackupsFieldInfo = appender.GetType().GetField("m_curSizeRollBackups", BindingFlags.NonPublic | BindingFlags.Instance);
var m_curSizeRollBackupsField = m_curSizeRollBackupsFieldInfo.GetValue(appender);
Response.Write($"m_curSizeRollBackups : {m_curSizeRollBackupsField}<br/>");
}
*** Name:SystemRollingFileAppender ***
File : C:\Users\rainm\Documents\Visual Studio 2017\Projects\log4netTest\log4netTest\temp\2017\10\27\2017-10-27-14-DB.log.0
CountDirection : 1
MaxSizeRollBackups : 2000
MaxFileSize : 20480
StaticLogFileName : False
FileSize : 20540
m_scheduledFilename : C:\Users\rainm\Documents\Visual Studio 2017\Projects\log4netTest\log4netTest\temp\2017\10\27\2017-10-27-14-DB.log.0
m_curSizeRollBackups : 0
private void DetermineCurSizeRollBackups()
{
m_curSizeRollBackups = 0;
string fullPath = null;
string fileName = null;
using(SecurityContext.Impersonate(this))
{
fullPath = System.IO.Path.GetFullPath(m_baseFileName);
fileName = System.IO.Path.GetFileName(fullPath);
}
ArrayList arrayFiles = GetExistingFiles(fullPath);
InitializeRollBackups(fileName, arrayFiles);
LogLog.Debug(declaringType, "curSizeRollBackups starts at ["+m_curSizeRollBackups+"]");
}
private void InitializeRollBackups(string baseFile, ArrayList arrayFiles){
if (null != arrayFiles)
{
string baseFileLower = baseFile.ToLower(System.Globalization.CultureInfo.InvariantCulture);
foreach(string curFileName in arrayFiles)
{
InitializeFromOneFile(baseFileLower, curFileName.ToLower(System.Globalization.CultureInfo.InvariantCulture));
}
}
}