草庐IT

java - JDK 类中 java.lang.ref.WeakReference 对象的内存泄漏

下面的简单代码再现了java.lang.ref.WeakReference对象在堆中的增长:publicstaticvoidmain(String[]args)throwsException{while(true){java.util.logging.Logger.getAnonymousLogger();Thread.sleep(1);}}这是jmap命令在几秒内的输出:user@t1007:~>jmap-d64-histo:live29201|grepWeakReference8:224931079664java.lang.ref.WeakReference31:132144[Lj

java - 在编译时禁用 Java 日志记录

我有一些Java代码,我想使用日志消息进行检测以进行调试。但是,最终(已编译)生产代码不应包含任何日志记录,因为它会减慢执行时间。Java中有什么方法可以在编译时禁用记录器吗?我不担心运行时启用/禁用记录器的日志方法中的检查会增加足迹。if(logging==enabled){//dologging}但我想在我的生产代码中避免像下面这样的参数构造:Logger.log("undefinedstate"+state+"@"+newDate());我正在使用Sun的Java编译器。 最佳答案 您是否考虑过使用{}占位符的slf4j方法。

java - 如何从 Spring Controller 获取 AOP 建议中的 RequestMapping 请求?

给定某种带有请求映射的Controller@RequestMapping(value="/some/path",method=RequestMethod.POST)如何在方面类中检索方法值(RequestMethod.POST)?我想跟踪执行POST请求的所有Controller方法。谢谢 最佳答案 @AL13N:你自己的回答是正确的,但如果你只是将注解绑定(bind)到一个参数上,就不需要使用反射。这是POJO+AspectJ中的示例。不过在SpringAOP中它应该是相同的:带有main方法的示例Controller:packa

java - Hook 到 System.out.println();并修改

我想修改System.out.println();打印的输出。这怎么可能?这是可能的——我在Bukkit/Craftbukkit中看到过。如果插件使用System.out.println(Stringstring)打印字符串;Bukkit将时间/日期和日志记录状态添加到字符串中。我想像Bukkit一样做。 最佳答案 您可以更改用作标准输出的PrintStream:System.setOut(PrintStreamout)创建您自己的PrintStream将您想要的任何额外信息打印到(旧)标准输出的实现,并将其设置为:System.s

Java Logger 不向控制台打印任何内容

我刚刚开始学习Java中的Logger;但是,我不明白它是如何工作的。我在类声明之后有这段代码:privatestaticfinalLoggerLOGGER=Logger.getLogger(MyClass.class.getName());然后在我的方法中我这样使用它(示例):LOGGER.log(Level.FINE,"Testing");LOGGER.info("Moretesting...");...}catch(Exceptione){LOGGER.log(Level.SEVERE,e.toString(),e);}但是没有任何内容打印到控制台。它是保存在某个文件中还是我只是

java - Spring Boot 日志记录 - 每个日志条目开头的无关连字符

我正在尝试使用默认的logback配置从SpringBoot1.3.5.RELEASE的控制台和文件日志中删除前导连字符。记录模式如下:logging:pattern:console:'%d{yyyy-MM-ddHH:mm:ss.SSS}%clr([${spring.application.name}]){red}%clr(%5p)%clr(${PID:-}){magenta}%clr(---){faint}%X{req.requestId}%clr([%15.15t]){faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}%m%n${LO

java - 如何在静态上下文中获取类的记录器?

我正在尝试接收我类(class)的记录器:publicstaticfinaljava.util.logging.Loggerlog=java.util.logging.Logger.getLogger(this);但是在此处使用“this”会导致“无法在静态上下文中使用它”错误。有人知道如何解决这个问题吗?编辑:我必须能够从我程序中的所有类访问记录器,因此它必须是公开的。 最佳答案 请注意,我将修饰符从public更改为private:publicclassFooBar{privatestaticfinalLoggerlog=Log

java - log4j.properties 中的 rootCategory 是什么意思?

log4j.properties中的log4j.rootCategory字段可以有4个不同的值,分别是:DEBUG,WARN,INFO和ERROR。你能告诉我哪个最适合哪些情况吗? 最佳答案 从最不严重到最严重:ALL如果您选择其中之一,log4j将生成该类型和更严重类型的所有消息。目的:ALL:生成所有消息*DEBUG:调试消息INFO:不是问题的信息WARN:不是错误,而是可能导致future错误的事情ERROR:出错了,应用程序管理的问题,应用程序可以停止也可以不停止,通常必须报告FATAL:导致应用程序崩溃的错误OFF:不生

java util logging.properties : How to log to two different files

我在tomcat的WEB-INF/classes目录中放置了一个logging.properties我想登录到两个不同的文件。例如:org.pkg1转到一个文件,org.pkg2转到另一个文件。我可以配置一个文件,但不能配置两个。这可能吗? 最佳答案 我终于明白了。在tomcat中,他们扩展了javautil日志记录(“JULI”)以启用此功能。这是我放在WEB-INF目录中的一个logging.properties文件,它最终完成了我想要的……:handlers=1console.java.util.logging.Console

java - 如何在枚举单例中实现日志记录?

我正在使用枚举单例,但实现日志记录很麻烦。这:publicenumFoo{INSTANCE;privatefinalLoggerlog=Logger.getLogger(Foo.class.getName());...}记录器的实例化方式与我为普通Java类实例化记录器的方式相同,但是我当然会收到以下错误:Foo.java:illegalreferencetostaticfieldfrominitializer是否有等效的方法来登录枚举单例? 最佳答案 在回答您的问题时,只需将记录器设为静态...顺便说一句,我认为即使对于对象实例也