Uygulamanın WPF'den başlatıldığı, 2 arka plan iş parçacığı bir web soket sunucusu ve bir Web API sunucusu başlatan bir Çok İş parçacıklı ortamım var.LogithNet'i çok iş parçacıklı ortamlarda kullanma
Tüm olayları tek bir günlük dosyasına kaydetmek istiyorum. Log4Net kullanıyorum (ilk kez).
3 örnek Logger yaratıyorum ve dosya ekleyicisinin yalnızca tek bir dosyaya yazması gerektiğini anlayacağım.
Kodu:
Kaydedici Sınıfı:
public class Logger :ILogger
{
private static ILog log = null;
static Logger()
{
log = LogManager.GetLogger(typeof(Logger));
GlobalContext.Properties["host"] = Environment.MachineName;
}
public Logger(Type logClass)
{
log = LogManager.GetLogger(logClass);
}
#region ILogger Members
public void LogException(Exception exception)
{
if (log.IsErrorEnabled)
log.Error(string.Format(CultureInfo.InvariantCulture, "{0}", exception.Message), exception);
}
public void LogError(string message)
{
if (log.IsErrorEnabled)
log.Error(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
public void LogWarningMessage(string message)
{
if (log.IsWarnEnabled)
log.Warn(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
public void LogInfoMessage(string message)
{
if (log.IsInfoEnabled)
log.Info(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
#endregion
}
Giriş Yapılandırma: Ben gibi 3 farklı projelerde Kaydedici 3 örneğini, oluşturma
<log4net debug="true">
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="/pathToLogFile" />
<staticLogFileName value="false"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=" yyyy-MM-dd".txt""/>
<layout type="log4net.Layout.PatternLayout">
<!--<param name="ConversionPattern"
value="%d [%t] %-5p %c %m%n" />-->
<conversionPattern
value="%date [%thread] %-5level %logger ==> %message%newline"/>
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
:
static ILogger logger = new Logger(typeof(MainWindow));
static ILogger logger = new Logger(typeof(DefaultApiController));
static ILogger logger = new Logger(typeof(WebSocket));
Ancak, Günlük dosyası yalnızca WebSocket
günlüğüne sahiptir. Anlayışımda bir boşluk var mı? Nerede yanlış gidiyorum?
Temel olarak, 3 iş parçacığı çalışıyor, bu yüzden kesinlikle aynı Logger nesnesinde birinden diğerine geçemiyorum.
Sargılayıcı neden? Log4net'te zaten var olan işlevselliği (günlük seviyesine göre filtreleme) çoğaltır gibi görünüyor - bunu yapmak için log4net'in konfigürasyonunu bile kullanıyorsunuz. – Adrian