监视EclipseLink JPA进度

时间:2012-08-24 10:13:57

标签: java logging jpa eclipselink monitoring

我回到了我的第一个EclipseLink JPA项目,发现了一些与性能有关的问题。情况如下:

应用程序使用本地Apache Derby DB运行。在创建EntityManager期间,控制台会记录一些信息和警告,这需要几秒钟,但到目前为止还不错。但是,如果我将整个代码打包到一个可执行的jar中并在Eclipse之外运行它,整个过程会花费更多的时间。

现在虽然首先找到这个问题的原因是明智的,但我至少想添加一个ProgressBar以便粗略跟踪进度。

我查看了EclipseLink wiki,发现它已经具有PerformanceMonitor和一些日志记录实用程序。我现在陷入了将1和1放在一起的看似简单的任务。

如何使用EclipseLink连接ProgressBar?或者另一种方法:我如何首先记录EclipseLink的持续活动?

非常感谢任何帮助。

干杯

3 个答案:

答案 0 :(得分:3)

以下是为具有EclipseLink JPA的SE项目(非应用程序服务器)生成日志文件的步骤:

  1. 打开文件“persistence.xml”并分配以下属性:

    property name =“eclipselink.logging.logger”value =“JavaLogger”

    property name =“eclipselink.logging.level”value =“FINEST”

  2. 鉴于Eclipselink JavaLogger实际上是java.util.logging文件,请参阅JDK文件夹以找到要修改的文件logging.properties,如下所示:
  3.   

    handlers = java.util.logging.FileHandler,java.util.logging.ConsoleHandler

         

    #默认全局日志记录级别。

         

    .level = FINEST

         

    #default file output在用户的主目录中

         

    #java.util.logging.FileHandler.pattern =%h / java%u.log

         

    #但我更喜欢硬连线如下:

         

    java.util.logging.FileHandler.pattern = C \:/ SamLogFile.log

         

    java.util.logging.FileHandler.level = FINER

         

    java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

         

    #我个人并不关心stdout日志记录,所以我将其关闭。

         

    java.util.logging.ConsoleHandler.level = OFF

         

    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

         

    java.util.logging.SimpleFormatter.format =%4 $ s:%5 $ s [%1 $ tc]%n

    现在,您可以通过导入:

    在您的课程中添加一些日志记录
    import java.util.logging.Level;
    
    import java.util.logging.Logger;
    

    并致电:

    public void yourMethod() { 
    
    Logger.getLogger( YourClassName.class.getName() ).log( Level.INFO, "I am logging well......!" ); }
    

    现在你已经准备好了。运行/测试您的项目并享受阅读您的日志!

答案 1 :(得分:3)

您还可以通过将2个文件slf4j-api-1.7.1.jar和文件slf4j-jdk14-1.7.1.jar添加到类路径中来将日志记录代码转换为最佳实践。这两个文件将从http://www.slf4j.org/download.html

下载

向您的班级添加导入:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

然后在此方法中添加以下内容:

LoggerFactory.getLogger(Mysafeperson.class.getName()).info("I am logging using the slf4j api");

这种做法是使用slf4j api而不是java.util.logging(JUL)api来创建代码。因此,您的代码与JUL分离,并准备好将任何日志记录框架绑定为slf4j实现(选项是logback - log4j - 或refer to this link.

我在此推广的想法是基于http://www.slf4j.org/legacy.html中的文档。所以:

  • 文件:slf4j-api-1.7.1是你的新api门面。
  • 文件:slf4j-jdk14-1.7.1从现有的日志记录实现(即java.util.logging(JUL))和调用slf4j api的应用程序代码中建立桥梁。

还有两个提示:

  1. 请注意,JUL中可用的已定义级别为:

    • 严重(最高价值)
    • 警告
    • INFO
    • CONFIG
    • FINE
    • FINER
    • 最佳(最低价值)

    因此,不要使用slf4j api的级别(Error - TRACE - DEBUG),它们不会触发任何日志记录级别。 INFO和WARN可以使用

  2. 对于EclipseLink,请注意您仍然使用JUL配置文件logging.properties

答案 2 :(得分:2)

您应该通过在persistence.xml文件的持久单元属性中添加它来启用eclipselink日志记录:

<property name="eclipselink.logging.level" value="DEBUG"/>

启用最详细的日志记录,如果还不够,甚至“ALL”而不是“DEBUG”。但是在进入生产时将其移除,或者该线本身会使其变慢。

可能使eclipse链接变慢的两个常见问题是:

在不需要的时候在persistence.xml中使用它:

<property name="eclipselink.ddl-generation" value="create-tables"/>

并且没有这个(如果你在persistence.xml文件中声明de类。如果不这样做,请将它设置为false):

<exclude-unlisted-classes>true</exclude-unlisted-classes>
从进度条开始,我会说它会非常难,而且不准确,因为即使是eclipselink也不知道它在开始时会处理的全部课程数量,所以我觉得这不值得努力,但如果你找到办法,那就好运。