我有一个类,类里边有一个静态变量,该类还会有一个静态构造对于该变量进行初始化,同时该构造会使用log4net生成日志文件。 代码如下: public class StaticVar
{
private static int test;
static StaticVar()
{
log4net.Config.XmlConfigurator.Configure(); log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString()); test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}现在有这样的问题,每次我访问日志生成的记事本文档,静态变量就会被初始化(也就是说,该静态构造又被重新调用),请问是什么原因?是否可以解决?或者说由于我C#基础不好才造成理解有了问题?
{
private static int test;
static StaticVar()
{
log4net.Config.XmlConfigurator.Configure(); log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString()); test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}现在有这样的问题,每次我访问日志生成的记事本文档,静态变量就会被初始化(也就是说,该静态构造又被重新调用),请问是什么原因?是否可以解决?或者说由于我C#基础不好才造成理解有了问题?
要保留全局变量 你可以试试在application_start中写
但是我并没有主动的重新启动WEB服务,只是打开了一下bin中生成的日志文档而已。
public class StaticVar
{
private static int test;
static StaticVar()
{
test = 0;
}
public static int Get()
{
test = test + 1;
return test;
}
}
private void button1_Click(object sender, EventArgs e)
{
StaticVar.Get();
}这么用没错,你肯定用错了
日志应该放在App_Data目录,更改bin目录内的文件也会导致应用程序重启.
static是可以全局共享的。
我拿两个不同的浏览器测试了。确实是可以共享使用static了。
只是一打开日志文件,那么静态构造就又会重新运行了。
1.我是web项目引用的一个数据访问的类库项目,在类库项目中存放着我的静态方法。
2.配置log4net能配置存储至App_Data文件中吗?
3.实际上我并没有更改bin目录内文件,只是打开了一下…
public class StaticVar
{
private static volatile StaticVar instance = null;
private static object lockHelper = new object();
private static int test;
private StaticVar()
{
log4net.Config.XmlConfigurator.Configure();
log4net.ILog logger = log4net.LogManager.GetLogger("File");
logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());
test = 0;
}
public int Get()
{
test = test + 1;
return test;
}
/// <summary>
/// 单体模式返回当前类的实例
/// </summary>
/// <returns></returns>
public static StaticVar GetStaticVar()
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Hard();
}
}
}
return instance;
}
} StaticVar sv=StaticVar.GetStaticVar();Response.Write("sv1="+ sv.Get() +"<br/>");StaticVar sv2=StaticVar.GetStaticVar();Response.Write("sv2="+ sv2.Get() +"<br/>");
其实我的实际项目中,是一个wcf服务…当然也是发布在IIS下的。发现一个奇怪的问题,我在bin目录中,自己新建了一个文本文档。重新打开后,静态变量并没有被初始化。看来应该得从log4net中入手去解决这个问题了。
iis寄宿,实际跟web应用程序一样了。http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx
已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
至于为什么这样,不太清楚…