我正在寻找一个工具或脚本,它将从我的Web应用程序中获取控制台日志,解析垃圾收集信息并以有意义的方式显示它.
我正在使用以下标志启动Sun Java 1.4.2 JVM:
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
Run Code Online (Sandbox Code Playgroud)
日志输出如下所示:
54.736: [Full GC 54.737: [Tenured: 172798K->18092K(174784K), 2.3792658 secs] 257598K->18092K(259584K), [Perm : 20476K->20476K(20480K)], 2.4715398 secs]
Run Code Online (Sandbox Code Playgroud)
如果我有一个能够直观地绘制垃圾收集趋势图的工具,那么理解几百种这样的日志条目就会容易得多.
我想知道是否使用JavaScript通过http或https访问该页面.是否有某种isSecure()方法,或者我应该以某种方式将其解析出来?
我希望只要应用程序正在运行就会滚动日志,但我希望在重新启动应用程序时重新启动日志.
更新: 根据erickson的反馈,我的appender看起来像这样:
<appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="my-server.log"/>
<param name="Append" value="false" />
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} %p - %t - %c - %m%n"/>
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
我只是添加了以下行:
<param name="Append" value="false" />
Run Code Online (Sandbox Code Playgroud)
它现在在启动时截断基本日志文件,但它会单独保留已滚动的文件.
例如,以下代码段:
<h:form id="levelone">
<h:inputText id="leveltwo" value="Test" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
生成以下标记:
<form id="levelone" name="levelone" method="post" action="/test/testPage.html"
enctype="application/x-www-form-urlencoded">
<input id="levelone:leveltwo" type="text" name="levelone:leveltwo"
value="Test" />
</form>
Run Code Online (Sandbox Code Playgroud)
是否可以更改自动生成的ID以使用与冒号不同的分隔符?
例如,我想改变
levelone:leveltwo
Run Code Online (Sandbox Code Playgroud)
至
levelone-leveltwo
Run Code Online (Sandbox Code Playgroud)
我们在webapp中使用Mojo JavaScript应用程序框架,它似乎不喜欢id中的冒号.
我有以下目标:
<target name="promptforchoice">
<input addproperty="choice">
Copy the file?. [Y, n]
</input>
<condition property="copy.file">
<or>
<equals arg1="Y" arg2="${choice}"/>
<equals arg1="y" arg2="${choice}"/>
</or>
</condition>
</target>
Run Code Online (Sandbox Code Playgroud)
在另一个目标中,我想根据是否设置copy.file属性有条件地复制文件.这可能吗?还有其他方法可以实现吗?
以下是我根据ChrisH的反应提出的建议.
<target name="promptforchoice">
<input addproperty="choice">
Copy the file?. [Y, n]
</input>
<condition property="copy.file">
<or>
<equals arg1="Y" arg2="${choice}"/>
<equals arg1="y" arg2="${choice}"/>
</or>
</condition>
</target>
<target name="copyfile" if="copy.file">
<copy file="file1.cfg" tofile="file2.cfg"/>
</target>
<target name="build" depends="promptforchoice">
<antcall target="copyfile"/>
<!-- Other stuff goes here -->
</target>
Run Code Online (Sandbox Code Playgroud)
谢谢!
我们目前有一个ant任务,其中包含类似于以下内容的内容:
<filelist dir="${css.dir}" id="ordered_css">
<file name="interface/foo.css" />
<file name="pages/monkey.css" />
<file name="pages/ninja.css" />
<file name="pages/sidebar.css" />
<file name="pages/bar.css" />
<file name="pages/baz.css" />
<file name="pages/robot.css" />
</filelist>
<patternset id="exclude_css">
<exclude name="interface/foo.css" />
<exclude name="pages/monkey.css" />
<exclude name="pages/ninja.css" />
<exclude name="pages/sidebar.css" />
<exclude name="pages/bar.css" />
<exclude name="pages/baz.css" />
<exclude name="pages/robot.css" />
</patternset>
Run Code Online (Sandbox Code Playgroud)
然后任务在这里引用模式集:
<fileset dir="${css.dir}" id="stuff_css" includes="*/stuff/*.css">
<patternset refid="exclude_css" />
</fileset>
Run Code Online (Sandbox Code Playgroud)
进一步说,它在这里引用了文件集:
<concat destfile="build/all.css" append="false" force="yes">
<filelist refid="ordered_css" />
<fileset refid="stuff_css" />
</concat>
Run Code Online (Sandbox Code Playgroud)
有没有办法将两个文件列表合并为一个可以在两个地方引用的类型?到目前为止,我还没有找到方法,因为模式集包含排除.我希望能够简单地创建一个文件列表并包含或排除引用的列表.
我设置了一个断点,允许我在对象的字段中查看值.我想更改值然后继续执行,但后来我尝试编辑变量视图中的值,值字段显示为灰色.调试时有没有办法改变变量值?
我们的网站使用Apache Velocity模板语言.我们的内容管理系统已经检查了所有生成的XML文档是否格式良好.在将文件推送到实际站点之前,我们已经被要求检查文档以捕获Velocity语法错误.
是否有一种从命令行验证Velocity模板正确性的标准方法?
我准备读取模板路径,初始化Velocity Engine,解析模板,捕获任何错误,如本页所示,但是如果有一个现成的工具,它接受一个文件和一个配置,并吐出任何错误,那我宁愿用那个.
这是我最终做的事情:
package velocitysample;
import java.io.IOException;
import java.io.StringWriter;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.MethodInvocationException;
public class Main
{
/** Define a static logger variable so that it references the Logger
* instance named "MyApp".
*/
private static Logger logger = Logger.getLogger(Main.class);
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
/* Set up a simple …
Run Code Online (Sandbox Code Playgroud) 我有一个Java Web应用程序,目前使用Log4J进行日志记录.我想使用Apache Chainsaw远程查看和解析日志.到目前为止,我无法理解如何设置客户端(Chainsaw客户端)和服务器端(我的webapp中的log4j配置)以成功启用远程日志记录.
这是我到目前为止所尝试的.
服务器端log4j配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true">
<appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/logs}/my.log"/>
<param name="Append" value="false" />
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ISO8601} %p - [%X{LoggingId}] - %t - %c - %m%n"/>
</layout>
</appender>
<appender name="SOCKET" class="org.apache.log4j.net.SocketAppender">
<param name="Port" value="4445"/>
<param name="RemoteHost" value="localhost"/>
<param name="ReconnectionDelay" value="60000"/>
<param name="Threshold" value="DEBUG"/>
</appender>
<logger name="com" additivity="false">
<level value="warn"/>
<appender-ref ref="myRFA"/>
</logger>
<logger name="org" additivity="false">
<level value="warn"/> …
Run Code Online (Sandbox Code Playgroud) 我们的 Web 应用程序的用户有时会遇到以下错误消息:
Request Entity Too Large
The requested resource
/ourapp/ourlocation/
does not allow request data with GET requests, or the amount of data provided in the request exceeds the capacity limit.
Run Code Online (Sandbox Code Playgroud)
我们检查了日志,但找不到任何似乎与上述错误相关的条目。经过一些研究,我认为问题在于请求的某些方面对于某些代理服务器来说太大了,并且代理将 413 错误返回给用户的 Web 浏览器。(不过,这只是一个猜测。)
您有什么想法可以找出导致此错误的原因吗?到目前为止,我已经使用Charles Web Debugging Proxy和LiveHTTPHeaders来尝试观察给定页面的每个请求使用了多少字节。
以下是一些可能有助于我进行故障排除的其他问题。