2015-10-14 77 views
2

在普通的Java中,添加自己的自定义日志级别非常简单。 但是我知道的所有Java方法在GWT中都不起作用,因为GWT有自己的java.util.logging.Level实现。是否可以在GWT中添加额外的日志级别

说我想在SEVERE(1000)和warning(900) - > ERROR(950)之间增加一个等级。

我该如何做到这一点?

回答

2

我设法为自己排序。 如果有人对此感兴趣。

你需要做的是创建一个“超级”目录。这与您的模块的“客户端”目录处于同一级别。

在此目录中,您将创建一个java.util.logging.Level类,其中的内容与GWT源中的内容相同。但增加的水平。

例如:

/* 
* Copyright 2010 Google Inc. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); you may not 
* use this file except in compliance with the License. You may obtain a copy of 
* the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
* License for the specific language governing permissions and limitations under 
* the License. 
*/ 

package java.util.logging; 

import com.google.gwt.core.shared.GWT; 
import com.google.gwt.logging.impl.LevelImpl; 
import com.google.gwt.logging.impl.LevelImplNull; 

import java.io.Serializable; 

/** 
* An emulation of the java.util.logging.Level class. See 
* <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Level.html"> 
* The Java API doc for details</a> 
*/ 
public class Level implements Serializable { 
    private static LevelImpl staticImpl = GWT.create(LevelImplNull.class); 
    public static Level ALL = new LevelAll(); 
    public static Level CONFIG = new LevelConfig(); 
    public static Level FINE = new LevelFine(); 
    public static Level FINER = new LevelFiner(); 
    public static Level FINEST = new LevelFinest(); 
    public static Level INFO = new LevelInfo(); 
    public static Level OFF = new LevelOff(); 
    public static Level EXCEPTION = new LevelException(); 
    public static Level WARNING = new LevelWarning(); 
    public static Level ERROR = new LevelError(); 
    public static Level SEVERE = new LevelSevere(); 

    private static class LevelAll extends Level { 
    @Override public String getName() { return "ALL"; } 
    @Override public int intValue() { return Integer.MIN_VALUE; } 
    } 

    private static class LevelConfig extends Level { 
    @Override public String getName() { return "CONFIG"; } 
    @Override public int intValue() { return 700; } 
    } 

    private static class LevelFine extends Level { 
    @Override public String getName() { return "FINE"; } 
    @Override public int intValue() { return 500; } 
    } 

    private static class LevelFiner extends Level { 
    @Override public String getName() { return "FINER"; } 
    @Override public int intValue() { return 400; } 
    } 

    private static class LevelFinest extends Level { 
    @Override public String getName() { return "FINEST"; } 
    @Override public int intValue() { return 300; } 
    } 

    private static class LevelInfo extends Level { 
    @Override public String getName() { return "INFO"; } 
    @Override public int intValue() { return 800; } 
    } 

    private static class LevelOff extends Level { 
    @Override public String getName() { return "OFF"; } 
    @Override public int intValue() { return Integer.MAX_VALUE; } 
    } 

    private static class LevelException extends Level { 
    @Override public String getName() { return "EXCEPTION"; } 
    @Override public int intValue() { return 1000; } 
    } 

    private static class LevelSevere extends Level { 
    @Override public String getName() { return "SEVERE"; } 
    @Override public int intValue() { return 1000; } 
    } 

    private static class LevelError extends Level { 
    @Override public String getName() { return "ERROR"; } 
    @Override public int intValue() { return 950; } 
    } 

    private static class LevelWarning extends Level { 
    @Override public String getName() { return "WARNING"; } 
    @Override public int intValue() { return 900; } 
    } 

    public static Level parse(String name) { 
    return staticImpl.parse(name); 
    } 

    protected Level() { } 

    public String getName() { 
    return "DUMMY"; 
    } 

    public int intValue() { 
    return -1; 
    } 

    @Override 
    public String toString() { 
    return getName(); 
    } 

    /* Not Implemented */ 
    // public boolean equals(Object ox) {} 
    // protected Level(String name, int value, String resourceBundleName) {} 
    // public String getLocalizedName() {} 
    // public String getResourceBundleName() {} 
    // public int hashCode() {} 
} 

现在,你必须在这个“超级”目录超级源在gwt.xml

<super-source path="super"/> 

如果您使用的是Eclipse,你将不得不排除这种超标目录从源路径,以避免日食给出错误。然后再次将其添加为单独的源路径,以便eclipse检查文件是否存在错误。

最后,如果你在一个子模块中完成所有这些,你必须确保在编译你的主模块时,这个优先级高于rt.jar中的类。这可以通过在编译时使用背书目录来完成。

+0

我可以提醒你,如果它不是你的版权,你不能发布它。 – ArtOfCode

+0

afaik Apache许可证允许这样做,只要包含所需的通知(我已经这样做)? – Knarf

+0

Apache许可证允许对衍生作品进行重新授权,但未经修改您不得重新授权原作品。为了避免这种情况,最好链接到另一个代码源。 – ArtOfCode

相关问题