我正在使用log4j和tomcat.当我在JSP中记录异常时,servlet:
private Logger _log = Logger.getLogger(this.getClass());
...
try{...} catch (Exception e) {
_log.error("Error refreshing all prices", e);
}
Run Code Online (Sandbox Code Playgroud)
我只得到异常的第一行,没有堆栈跟踪.
17-Feb 17:37:45 ERROR AutoContrib:175 - 发布csv文件时出现异常:java.lang.ArrayIndexOutOfBoundsException
根本没有帮助!
我的log4j.properties文件(/tomcat/common/classes/log4j.properties)如下所示:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.stdout.threshold=info
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=5000KB
log4j.appender.file.maxBackupIndex=10
log4j.appender.file.File=${catalina.home}/logs/web.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.file.threshold=info
log4j.rootLogger=debug, stdout, file
Run Code Online (Sandbox Code Playgroud) 我正在阅读描述SyncRoot模式的ac#book.表明
void doThis()
{
lock(this){ ... }
}
void doThat()
{
lock(this){ ... }
}
Run Code Online (Sandbox Code Playgroud)
并与SyncRoot模式进行比较:
object syncRoot = new object();
void doThis()
{
lock(syncRoot ){ ... }
}
void doThat()
{
lock(syncRoot){ ... }
}
Run Code Online (Sandbox Code Playgroud)
但是,我真的不明白这里的区别; 似乎在这两种情况下,两种方法一次只能由一个线程访问.
本书描述了...因为实例的对象也可以用于从外部进行同步访问而你无法控制这个类本身的类型,你可以使用SyncRoot模式呃?"实例的对象"?
谁能告诉我上述两种方法之间的区别?
我有一个简单的ASP页面与数据绑定网格(绑定到对象源).网格位于向导的页面内,每行都有一个"选择"复选框.
在向导的一个阶段,我绑定GridView:
protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
...
// Bind and display matches
GridViewMatches.EnableViewState = true;
GridViewMatches.DataSource = getEmailRecipients();
GridViewMatches.DataBind();
Run Code Online (Sandbox Code Playgroud)
单击完成按钮后,我会遍历行并检查所选内容:
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
{
// Set the selected values, depending on the checkboxes on the grid.
foreach (GridViewRow gr in GridViewMatches.Rows)
{
Int32 personID = Convert.ToInt32(gr.Cells[0].Text);
CheckBox selected = (CheckBox) gr.Cells[1].FindControl("CheckBoxSelectedToSend");
Run Code Online (Sandbox Code Playgroud)
但是在这个阶段GridViewMatches.Rows.Count = 0!我不重新绑定网格,我不应该,对吧?我希望视图状态能够维持状态.(另外,如果我重新绑定网格,我的选择复选框将被清除)
注意:此页面还在OnInit方法中动态添加用户控件.我听说它可能会破坏视图状态,但据我所知,我正确地执行它并且那些添加的控件的视图状态似乎有效(值在回发之间保持不变)
非常感谢您的任何帮助!
瑞安
更新:这可能与我以编程方式设置数据源的事实有关吗?我想知道asp引擎是否在页面生命周期中将网格数据绑定到尚未定义的数据源.(在测试页面中,GridView是'自动'数据绑定'.我不希望网格重新绑定我只想要来自上一篇文章的viewstate中的值!
此外,我在asp标题中有这个:ViewStateEncryptionMode ="Never" - 这是为了解决偶尔的"无效的Viewstate验证MAC"消息
作为参考,我的GridView定义如下:
<asp:GridView ID="GridViewMatches" runat="server" AllowSorting="True" AutoGenerateColumns="False"
BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3"
OnDataBinding="GridViewMatches_OnBinding"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行此查询以检索特定实体类型的审核项目
public List<Audit> GetAuditChangesSince(DateTime since, string entityType)
{
return (from a in OrgContext.CreateQuery<Audit>()
where
a.ObjectId != null && a.ObjectId.LogicalName == entityType &&
a.CreatedOn > since
select a).ToList();
}
Run Code Online (Sandbox Code Playgroud)
该a.ObjectId!= NULL && a.ObjectId.LogicalName ==的EntityType &&条款导致的问题.我知道.Equals()可能会导致问题(因此==)并且LINQ提供程序存在以下限制:
子句的左侧必须是属性名称,子句的右侧必须是值
左侧是属性,右侧是常量.是.ObjectId.LogicalName导致问题吗?
我有一个java进程(在tomcat中),它使用log4j来记录文件并发送异常邮件.这种做法非常有效,直到前几天一段代码陷入困境,每隔几秒抛出许多异常 - 发送数千封电子邮件.
有没有办法限制从log4j发送的电子邮件?也许"只发送一次此异常"或"每5分钟最多发送一次此异常".
(当然我会修复这个特定环境的代码,但它会在一夜之间每10秒运行一次,所以将来可能会发生类似的事情)
提前致谢
瑞安
我很困惑为什么这个编译:
private delegate int MyDelegate(int p1, int p2);
private void testDelegate()
{
MyDelegate imp = delegate
{
return 1;
};
}
Run Code Online (Sandbox Code Playgroud)
MyDelegate应该是一个指向一个方法的指针,该方法接受两个int参数并返回另一个int,对吗?为什么我可以分配一个不带参数的方法?
有趣的是,这些都没有编译(它抱怨签名不匹配,正如我所期待的那样)
private void testDelegate()
{
// Missing param
MyDelegate imp = delegate(int p1)
{
return 1;
};
// Wrong return type
MyDelegate imp2 = delegate(int p1, int p2)
{
return "String";
};
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
瑞安
SQL Server可以使用同义词库文件在自由文本查询中进行替换,因此搜索"IE"可能会在文本中返回带有"Internet Explorer"或"Quirky Browser"的结果.
不幸的是,SQL Server 2008的同义词库文件是空的!有没有预定义的英文SQL Server同义词库文件?我无法从搜索中找到任何明显的来源.
(是的,我可以根据需要建立一个)
谢谢
瑞安
我有以下代码:
delegate int doStuffDel(int instanceNo, int sleepTime, int repeatCount);
string result;
private int doStuff(int instanceNo, int sleepTime, int repeatCount)
{
for (int i = 0; i < repeatCount; i++)
{
Console.Write(instanceNo);
Thread.Sleep(sleepTime);
}
result = instanceNo + " repeated " + repeatCount;
return instanceNo;
}
private void button3_Click(object sender, EventArgs e)
{
doStuffDel del = doStuff;
IAsyncResult ar = del.BeginInvoke(3, 120, 50, finishedCallback, result);
}
private void finishedCallback(IAsyncResult ar)
{
Console.WriteLine("Done. The result was " + ar.AsyncState.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我认为res.AsyncState将返回字符串,作为BeginInvoke调用中的最后一个参数传递,但它为null.有人知道为什么吗?
PS,我知道我可以将del作为BeginInvoke中的最后一个参数传递,然后在回调中调用EndInvoke,从doStuff方法中获取一些结果,或者我可以从类中获取字符串val! …
我有一个批处理文件,该文件会弹出一个clickOnce应用程序:
@REM The odd PING statements are to create a 5 second wait
@echo off
taskkill /F /IM MyApp.exe
PING 1.1.1.1 -n 1 -w 5000 >NUL
"%USERPROFILE%\Path\To\My\App.appref-ms"
Run Code Online (Sandbox Code Playgroud)
当我双击它时,它可以正常工作:进程被杀死,然后在5秒钟后重新启动。
但是,如果我安排任务,它将终止该进程,但不会重新启动它。
有人知道发生了什么吗?(该任务与我双击批处理文件时登录的用户身份相同,并且运行正常)
谢谢
瑞安
我在我的项目文件中使用以下内容:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')">
<!--Generate transformed app config in the intermediate directory-->
<TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
<!--Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<AppConfigWithTargetPath Remove="App.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
但是,如果我在多行上有一个配置项
<add key="MultiLine" value="option1,
option2,
option3 />
Run Code Online (Sandbox Code Playgroud)
它变成了
<add key="MultiLine" value="
 option1,
 option2,
 option3/>
Run Code Online (Sandbox Code Playgroud)
我怎么能防止这种情况?
谢谢
瑞安
c# ×4
log4j ×2
logging ×2
.net ×1
asp.net ×1
clickonce ×1
concurrency ×1
crm ×1
delegates ×1
deployment ×1
dynamics-crm ×1
freetext ×1
gridview ×1
java ×1
linq ×1
msbuild ×1
postback ×1
sql ×1
sql-server ×1
tomcat ×1
viewstate ×1
web-config ×1