Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类和成员名称的通用Java记录器输出null.null_Java_Logging_Null_Member - Fatal编程技术网

类和成员名称的通用Java记录器输出null.null

类和成员名称的通用Java记录器输出null.null,java,logging,null,member,Java,Logging,Null,Member,我正在使用带有以下初始化行的general java.util.logging.Logger: private static final Logger _log = Logger.getLogger(Login.class.getName()); 然后我就这样使用它(只是一个例子): 在日志中,有时我可以看到以下内容: 2014年11月24日17:26:13.692罚款[http-nio-80-exec-1]空。空会话id:18BD6989930169F7755EA2D001A5759 但是,

我正在使用带有以下初始化行的general java.util.logging.Logger:

private static final Logger _log = Logger.getLogger(Login.class.getName());
然后我就这样使用它(只是一个例子):

在日志中,有时我可以看到以下内容:

2014年11月24日17:26:13.692罚款[http-nio-80-exec-1]空。空会话id:18BD6989930169F7755EA2D001A5759


但是,大多数时候,它会正确地向我显示调用类和函数。这在其他类和成员中也会发生。我不明白为什么会这样?这是Loggger中的错误吗?

输出看起来像来自“org.apache.juli.OneLineFormatter”,而“null.null”是源类和源方法名称。从文件中:

如果无法获得任何信息,则可能为空

可能无法确定或已经确定

查看“org.apache.juli.AsyncFileHandler”的源代码时,有一个错误,该代码没有捕获原始调用站点

您可以在AsynchFileHandler上创建和,以在线程转移之前强制计算方法和类名。以下是此类过滤器的示例:

    public class InferCallerFilter implements Filter {

        public boolean isLoggable(LogRecord record) {
            record.getSourceMethodName(); //Infer caller.
            return true;
        }
    }
甚至JDK中也包含了。根据日志记录文件:

因此,如果日志处理程序希望将日志记录传递给另一个线程,或通过RMI传输日志记录,并且如果希望随后获得方法名或类名信息,则应调用getSourceClassName或getSourceMethodName中的一个以强制填充值

我通过更改我的自定义LogFormatter来“解决”这个问题,以在format方法的最开始处获取源类名和源方法名

这些方法的返回值似乎有一个“过期日期”


到目前为止,在那次更改之后,我再也没有观察到任何null.null条目,而在我有很多条目之前。

这是GlassFish的com.sun.enterprise.server.logging.UniformLogFormatter吗?如果是,GF的版本是什么?没有。对不起,我没有提到软件包的名称。它是java.util.logging.Logger。我在Tomcat中使用它,我在Tomcat中也体验到了这一点(不是在eclipse中)。我使用自己的自定义日志格式化程序。是的,这是非常可能的。我无法确定它何时显示null以及何时工作正常。在同一种方法中,大多数情况下日志工作正常,但有时会显示null。如果您使用AsynchFileHandler,则将代码切换为使用FileHander或安装InferrCallerFilter以排除切换错误。不是因为它过期,而是第一个调用的线程永远是赢家。这就是为什么javadocs在任何线程转移发生之前警告调用getSourceXXX。
    public class InferCallerFilter implements Filter {

        public boolean isLoggable(LogRecord record) {
            record.getSourceMethodName(); //Infer caller.
            return true;
        }
    }
 @Override
  public String format(LogRecord record)
  {
    String sourceClassName = record.getSourceClassName();
    String sourceMethodName = record.getSourceMethodName();
    ...
  }