在每个应用程序启动时滚动一次的代码中配置log4net RollingFileAppender
我想创建一个log4net RollingFileAppender,每次程序启动时都会创建一个新文件。 如果文件变大,它可以滚动,但每次启动应用程序时都必须滚动。 如果在配置中配置了另一个appender,则不应添加appender。 实质上,创建可以通过更改配置文件来覆盖的默认日志配置。
在拼凑了许多其他post后,我终于得到了这个工作。 实现是在静态包装类中。 您所要做的就是将此代码粘贴到您的应用程序中,设置创建文件的位置,并在应用程序启动时调用Log.Configure()。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using System.Windows.Threading; using log4net; using log4net.Core; using log4net.Appender; using log4net.Repository.Hierarchy; using System.Reflection; using System.IO; namespace [Your Namespace] { public static class Log { private static bool isConfigured = false; private static ILog iLog; public static void Configure() { if (isConfigured) return; var loggerName = typeof(DiagnosticsManager).FullName; var logger = (log4net.Repository.Hierarchy.Logger)log4net.LogManager.GetRepository().GetLogger(loggerName); var ilogger = log4net.LogManager.GetRepository().GetLogger(loggerName); //Add the default log appender if none exist if(logger.Appenders.Count == 0) { var directoryName = "[Your directory name here. ec 'C:\ProgramData\AppName\Logs']"; //If the directory doesn't exist then create it if(!Directory.Exists(directoryName)) Directory.CreateDirectory(directoryName); var fileName = Path.Combine(directoryName, "[Your static file name here. ec 'AppName.log']"); //Create the rolling file appender var appender = new log4net.Appender.RollingFileAppender(); appender.Name = "RollingFileAppender"; appender.File = fileName; appender.StaticLogFileName = true; appender.AppendToFile = false; appender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size; appender.MaxSizeRollBackups = 10; appender.MaximumFileSize = "10MB"; appender.PreserveLogFileNameExtension = true; //Configure the layout of the trace message write var layout = new log4net.Layout.PatternLayout() { ConversionPattern = "%date{hh:mm:ss.fff} [%thread] %-5level - %message%newline" }; appender.Layout = layout; layout.ActivateOptions(); //Let log4net configure itself based on the values provided appender.ActivateOptions(); log4net.Config.BasicConfigurator.Configure(appender); } iLog = LogManager.GetLogger(loggerName); isConfigured = true; Info("Logging Configured at " + DateTime.Now.ToString("g")); } public static event EventHandler ExceptionLogged; public static void Debug(object message) { Configure(); iLog.Debug(message); } public static void Debug(object message, Exception exception) { Configure(); iLog.Debug(message, exception); } public static void Error(object message) { Configure(); iLog.Error(message); } public static void Error(object message, Exception exception) { Configure(); iLog.Error(message, exception); } public static void Fatal(object message) { Configure(); iLog.Fatal(message); } public static void Fatal(object message, Exception exception) { Configure(); iLog.Fatal(message, exception); } public static void Info(object message) { Configure(); iLog.Info(message); } public static void Info(object message, Exception exception) { Configure(); iLog.Info(message, exception); } public static void Warn(object message) { Configure(); iLog.Warn(message); } public static void Warn(object message, Exception exception) { Configure(); iLog.Warn(message, exception); } } }