Tag: 日志记录

GAE日志字段中时间值的确切含义是什么?

我在标准的谷歌应用引擎日志中看到一些神秘的时间字段让我很好奇: 2011-05-09 21:56:00.577 /whatever 200 211ms 775cpu_ms 589api_cpu_ms 0.1.0.1 – – [09/May/2011:21:56:00 -0700] “GET /whatever HTTP/1.1” 200 34 – “AppEngine-Google; (+http://code.google.com/appengine)” “****.appspot.com” ms=212 cpu_ms=776 api_cpu_ms=589 cpm_usd=0.021713 queue_name=__cron task_name=dc4d411120bc75ea8bbea773d23eaecc 特别是: ms , cpu_ms , api_cpu_ms ,每个都有两次略有不同的值。 另外,当我用GET请求下面的简单结构自己记录定时信息时,它会打印一个稍低的值。 在这种情况下,特别是182毫秒,对官方775 。 protected void doGet(HttpServletRequest req, HttpServletResponse resp) { long t0 = System.currentTimeMillis(); //Do the stuff long t1 = […]

Google App Engine – 无法找到我的日志消息

我找不到记录调用的结果。 要记录消息,我尝试了两个: System.out.println(“some message”); 和 Logger logger = Logger.getLogger(“MyLogger”); // Logger is java.util.logging.Logger // … logger.info(“some message”); 我已经部署了我的应用程序,经过几次测试,我决定查看一些日志消息。 但是没有消息。 我将最低严重性级别从默认“错误”更改为“信息”,并且只有我看过的消息是这样的服务消息: http://sofzh.miximages.com/java/logs.png 如果有人显示一些记录一些数据的片段(如果它有效),我也将不胜感激 – 我怀疑我的问题可能是一个愚蠢的问题,因为有些错误定位的逗号可能是导致情况的原因。

PatternLayout(log4j)的C,F,L,l和M到底有多慢?

众所周知,PatternLayout的C , F , L , l和M 很慢 : 警告生成调用者位置信息非常慢,应该避免,除非执行速度不是问题。 此外, 本书还提到某些应用程序只能通过更改日志记录格式来获得10%的速度。 但问题是,这些转换字符到底有多慢?

Log4J RollingFileAppender无法滚动文件

我正在用Java编写一个小的xml转换层。 我通过Web服务接收xml,修改它,然后将修改后的xml发送到另一个系统。 然后我等待响应并将响应返回给原始调用者。 System A -> Me -> System B -> Me -> System A 我想记录收到的请求,发送的请求,收到的响应以及发送的请求。 基本上我想记录每个箭头在我的图表中的xml。 我的问题在于RollingFileAppender。 我尝试以10MB滚动,有时它会滚动,有时它不会滚动。 如果它滚动了几次,然后停止,它将继续将滚动的文件重命名为3到4和4到5,依此类推。 我最好的猜测是,当超过10MB标记时,有多个线程写入日志文件,因此无法重命名该文件。 我希望Log4J有一个简单的解决方案,但如果有必要,我愿意切换到新的日志框架。 预先感谢您的任何帮助。 编辑这是我的属性文件。 log4j.rootLogger=DEBUG, fileOut log4j.appender.fileOut=org.apache.log4j.RollingFileAppender log4j.appender.fileOut.File=/logs/log.log log4j.appender.fileOut.layout=org.apache.log4j.PatternLayout log4j.appender.fileOut.layout.ConversionPattern=%d %-5p %c – %m%n log4j.appender.fileOut.MaxFileSize=10MB log4j.appender.fileOut.MaxBackupIndex=10 log4j.appender.fileOut.append=true 编辑2这实际上是一个颠簸,因为这篇文章的观看次数很少。 我觉得这不是一个独特的问题。 任何帮助深表感谢。 谢谢!

登录Eclipse / OSGi插件

我开始开发一个Eclipse插件(技术上来说,一个OSGi插件),我遇到的第一个问题之一就是我似乎无法像往常一样控制commons-logging输出。 我在插件依赖项中包含了commons-logging软件包,实际上,当我记录某些内容时(在INFO或更高的严重级别),它会被记录到控制台。 但是,我似乎无法登录任何较低级别(例如DEBUG或TRACE)。 我已经指定了一个log4j.properties文件,它位于类路径上(对于运行时,就像commons-logging软件包一样),但该属性文件中的任何设置都不会对记录器的行为产生任何影响。 这是log4j.properties文件: # Log4j Logging levels, in order of decreasing importance are: # FATAL, ERROR, WARN, INFO, DEBUG, TRACE # # Root logger option log4j.rootLogger=ERROR,stdout #,LOGFILE # Direct log messages to stdout 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{ABSOLUTE} %5p %r (%l) %t%n – %m%n 我需要做什么才能实际控制记录器的输出? 以下是一些示例输出消息,希望格式化可能与java.util.logging的默认值一致,或者向某人提供其他提示: Oct 21, 2008 11:01:23 PM com.stottlerhenke.sentinel.client.Activator start SEVERE: […]

如何在Java中自动记录方法的进入/退出?

现在我使用java.util.logging来记录我的Java项目中每个方法的入口和出口点。 这在调试时非常有用。 我在每个方法的开头都有这段代码,最后是类似的代码: if (logger.isLoggable(Level.FINER)) { logger.entering(this.getClass().getName(), “methodName”); } 其中“methodName”是方法的名称(硬编码)。 所以我想知道是否有办法自动执行此操作,而无需在每个方法中包含此代码。

分析Sun Hotspots,JVM 6的GC日志

我正在尝试分析我们的应用程序的GC行为(在Tomcat中运行,在Sun的Hotspots下 , JVM 1.6 )。 到目前为止,我已经指示JVM使用…将GC日志发送到单独的文件 -Xloggc:gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails …并使用jstat输出日志… jstat -gc -t 29045 5s > jstat.gc 我看到有趣的信息,但没有找到一个工具来帮助我分析/可视化这些日志。 我通过这个问题指向了GCViewer,但它只解析了gc.log中的几个日志行,然后崩溃并出现exception。 对于我正在使用的特定JVM,是否有更好或更新的工具来解析这些特定日志?

从日志文件中提取java堆栈跟踪的工具

是否有任何工具可以提取出现在日志文件中的堆栈跟踪列表,并且可能会计算唯一的堆栈跟踪列表? 编辑 :我会做一些不基于GUI的东西,并在后台运行并提供某种报告。 我从很多环境收集了很多日志,只是想快速浏览一下。

使用Logger和FileHandler Class of Java.util时,几秒钟后日志文件没有更新

我使用以下类’LoggerUtil’来记录到控制台和文件’logfile.log’。 记录到控制台工作正常。 但是,记录到’logfile.log’文件在几个日志后停止。 任何有关查找错误的建议都会受到欢迎。 我附上以下代码: public class LoggerUtil { public static final String LOGGERNAME = “project.logging”; static { try { Logger.getLogger(LOGGERNAME).setUseParentHandlers(false); Handler ch = new ConsoleHandler(); Handler fh = new FileHandler(“logfile.log”); SimpleFormatter sf = new SimpleFormatter(); fh.setFormatter(sf); Logger.getLogger(LOGGERNAME).addHandler(ch); Logger.getLogger(LOGGERNAME).addHandler(fh); setHandlersLevel(Level.ALL); } catch (IOException | SecurityException ex) { Logger.getLogger(LoggerUtil.class.getName()).log(Level.SEVERE, null, ex); } } public static void […]

何时记录捕获的exception的堆栈跟踪

我最近询问是否报告捕获的exception的getMessage()文本 。 相当令人惊讶的是,大多数答案误解了我的问题并且认为我在询问是否报告了捕获exception的堆栈跟踪,这表明这样做被认为是常态。 所以我要问一个跟进问题。 在catchexception时,您应该或者不应该在哪种情况下报告堆栈跟踪? 通过“报告”,我包括要求日志框架为您记录堆栈跟踪 。 我不是在问一些事情 。 我在问这个报告是否应该包含堆栈跟踪。