C# 使用静态ref log.cs类(使用log4net)创建一个日志文件的多个项目?
我知道这个问题已经被问过很多次了,但我的情况有点不同。我的解决方案中有多个项目。我有一个静态日志类,我静态引用它(添加为链接)到解决方案中的不同项目。我想使用一个日志文件来记录所有项目。我怎样才能做到这一点? 我的示例日志文件:C# 使用静态ref log.cs类(使用log4net)创建一个日志文件的多个项目?,c#,logging,log4net,C#,Logging,Log4net,我知道这个问题已经被问过很多次了,但我的情况有点不同。我的解决方案中有多个项目。我有一个静态日志类,我静态引用它(添加为链接)到解决方案中的不同项目。我想使用一个日志文件来记录所有项目。我怎样才能做到这一点? 我的示例日志文件: public static class Log { private static ILog _log; public static void Initialize(Level logLevel, string logFile, string logge
public static class Log
{
private static ILog _log;
public static void Initialize(Level logLevel, string logFile, string loggerName = null)
{
if (loggerName == null)
loggerName = Assembly.GetCallingAssembly().GetName().Name;
// root config
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.Level = logLevel;
hierarchy.Configured = true;
BasicConfigurator.Configure();
// Get logger with given name
_log = LogManager.GetLogger(loggerName);
// Add appender to log
var fileAppender = CreateFileAppender(logFile);
hierarchy.Root.AddAppender(fileAppender);
}
public static void d(string o, Exception e = null)
{
_log.Debug(o, e);
}
public static void e(string o, Exception e = null)
{
_log.Error(o, e);
}
public static void i(string o, Exception e = null)
{
_log.Info(o, e);
}
public static void w(string o, Exception e = null)
{
_log.Warn(o, e);
}
private static IAppender CreateFileAppender(string logFileName)
{
var appender = new FileAppender
{
Name = "FileAppender",
File = logFileName,
AppendToFile = true,
};
var layout = new PatternLayout
{
ConversionPattern = "%date{dd MMM yyyy HH:mm:ss,fff} [%level] [%appdomain] [%thread] [%logger] - %message%newline%exception"
};
layout.ActivateOptions();
appender.Layout = layout;
appender.ActivateOptions();
BasicConfigurator.Configure(appender);
return appender;
}
}
谢谢@stuartd!在每个项目中使用相同的文件名就可以解决问题(还要注意锁定模型),但这也带来了另一个问题。第一个项目(第一次初始化Log.cs)正在写入日志,而另一个进程(如B、C等)在以后启动时没有将日志写入文件
实际的Log.cs存在于项目B中,我静态地引用了项目A中的Log.cs。现在,我(物理地)将Log.cs类从项目B移动到项目A,对于所有其他项目,我静态地引用了新文件。然后每个项目都开始在同一个文件中写入日志 您只需在使用该类的每个项目中使用相同的文件名。同时写入时会发生什么情况?如果有不同的进程写入该文件,请将appender的
锁定模型设置为进程间锁定
,或者如果只有不同的线程同时写入,改为使用MinimalLock
——有关更多信息,请参阅。谢谢!在我的案例中,不同的进程写入同一个文件。另外,第一个项目(第一次初始化)正在写入日志,而随后启动的另一个进程没有将日志写入文件?原因可能是什么?当我停止第一个进程时,第二个进程开始写入日志?因为