Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在groovy中为类/方法名配置java.util.logging?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
testlog. java

import java.util.logging.Logger;
public class testlog {
    private final static Logger log = Logger.getLogger(testlog.class.getName());
    public static void main(String[] args) {
        System.setProperty("java.util.logging.SimpleFormatter.format","[%1$tF %1$tT]:%4$s:(%2$s): %5$s%n");
        log.info("logging test");
    }
}

执行:

$java testlog
[2014-01-18 11:08:51]:INFO:(testlog main): logging test

testlog.groovy:

import java.util.logging.Logger;
public class testlog {
    private final static Logger log = Logger.getLogger("testlog");
    public static void main(String[] args) {
        System.setProperty("java.util.logging.SimpleFormatter.format",'[%1$tF %1$tT]:%4$s:(%2$s): %5$s%n');
        log.info("logging test");
    }
}

执行:

$groovy testlog
[2014-01-18 11:11:23]:INFO:(java_util_logging_Logger$info call): logging test

如何为类/方法名称而不是“java_util_logging_Logger $info call”配置groovy?

解决方法

一般来说,Groovy在字节码中使用 CallSite.上面提到的Groovy代码将编译为以下格式的字节码:

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import java.util.logging.Logger;
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
import org.codehaus.groovy.runtime.callsite.CallSite;

public class testlog
  implements GroovyObject
{
  private static final Logger log;

  static
  {
    __$swapInit();long l1 = 0L;__timestamp__239_neverHappen1390064566496 = l1;
      long l2 = 
        1390064566495L;__timestamp = l2;
       Object localObject = 
        $getCallSiteArray()
           [2].call(Logger.class,"testlog");log = 
           (Logger)ScriptBytecodeAdapter.castToType(localObject,Logger.class);
  }

  public static void main(String... args)
  {
    CallSite[] arrayOfCallSite = 
      $getCallSiteArray();arrayOfCallSite[0].call(System.class,"java.util.logging.SimpleFormatter.format","[%1$tF %1$tT]:%4$s:(%2$s): %5$s%n");
    arrayOfCallSite[1].call(log,"logging test");
  }

  public testlog()
  {
    testlog this;
    CallSite[] arrayOfCallSite = $getCallSiteArray();
    MetaClass localMetaClass = $getStaticMetaClass();
    this.MetaClass = localMetaClass;
  }
}

因此,它指的是格式化程序引用时的Log类.要解决此问题,您可以在类级别使用CompileStatic注释,它将代码转换为普通Java约定中的字节码.

以下是脚本的外观(注意: – 类名是CamelCasE)

import java.util.logging.Logger
import groovy.transform.CompileStatic

@CompileStatic
public class Testlog {
    private final static Logger log = Logger.getLogger("testlog")
    public static void main(String[] args) {
        System.setProperty("java.util.logging.SimpleFormatter.format",'[%1$tF %1$tT]:%4$s:(%2$s): %5$s%n')
        log.info("logging test")
    }
}

大佬总结

以上是大佬教程为你收集整理的如何在groovy中为类/方法名配置java.util.logging?全部内容,希望文章能够帮你解决如何在groovy中为类/方法名配置java.util.logging?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。