Java 无法在jsf web应用程序中记录文件

Java 无法在jsf web应用程序中记录文件,java,web-applications,logging,jsf-2,Java,Web Applications,Logging,Jsf 2,Im使用WebSphereServer和JSF2.0 在我的托管bean中,我声明了以下内容: private final static Logger LOGGER = Logger.getLogger(ABC.class .getName()); 下面的代码在bean的构造函数中 try { FileHandler handler = new FileHandler("logging.txt"); LOGGER.addHandler(handler); StringWriter sw = n

Im使用WebSphereServer和JSF2.0

在我的托管bean中,我声明了以下内容:

private final static Logger LOGGER = Logger.getLogger(ABC.class .getName());
下面的代码在bean的构造函数中

try {
FileHandler handler = new FileHandler("logging.txt");
LOGGER.addHandler(handler);
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
LOGGER.log(Level.SEVERE, stacktrace);
} catch (Exception logException) {
System.err.println("Logging error");
}
代码将所有日志写入控制台,但不写入文件。也没有创建日志文件
logging.txt

我应该自己创建文件还是路径错误。从您的代码中帮助我:

FileHandler handler = new FileHandler("logging.txt");
这将在appserver的默认工作目录中创建一个
logging.txt
文件。您可以按如下方式确定默认工作目录的确切路径:

System.out.println(new File(".").getAbsolutePath());
logging.txt
文件应位于该文件夹中

然而,这不是最好的主意。当无法从应用程序内部控制默认工作目录时,使用相对路径是个坏主意。您应该改用绝对路径。也就是说,从
/
开始:

FileHandler handler = new FileHandler("/path/to/logging.txt");
在Windows中,这将保存在当前工作目录所在的同一磁盘中。否则,当您还想更换磁盘时,您还需要使用
C:
或其他前缀

注意,这个问题与JSF没有任何关系。对于任何其他Java API/框架,您都会遇到完全相同的问题。

代码:

FileHandler handler = new FileHandler("logging.txt");
这将在appserver的默认工作目录中创建一个
logging.txt
文件。您可以按如下方式确定默认工作目录的确切路径:

System.out.println(new File(".").getAbsolutePath());
logging.txt
文件应位于该文件夹中

然而,这不是最好的主意。当无法从应用程序内部控制默认工作目录时,使用相对路径是个坏主意。您应该改用绝对路径。也就是说,从
/
开始:

FileHandler handler = new FileHandler("/path/to/logging.txt");
在Windows中,这将保存在当前工作目录所在的同一磁盘中。否则,当您还想更换磁盘时,您还需要使用
C:
或其他前缀


注意,这个问题与JSF没有任何关系。任何其他Java API/框架都会有完全相同的问题。

正如BalusC已经指出的那样。日志文件可能会在已部署的应用程序中创建

使用websphere,您通常可以在以下位置找到您的应用程序:

WEBSPHERE_INSTALLATION_PATH/profiles/YOURPROFILE/installedApps/YOURAPPNAME


切换到该文件夹后,在该文件夹及其子文件夹中搜索您的文件。我不确定,但如果你在WEB-INF/classes中找到它,我也不会感到惊讶。

正如巴卢斯克已经指出的那样。日志文件可能会在已部署的应用程序中创建

使用websphere,您通常可以在以下位置找到您的应用程序:

WEBSPHERE_INSTALLATION_PATH/profiles/YOURPROFILE/installedApps/YOURAPPNAME


切换到该文件夹后,在该文件夹及其子文件夹中搜索您的文件。我不确定,但如果您在WEB-INF/classes中找到它,我也不会感到惊讶。

通常,appserver的工作目录是它自己的
/bin
文件夹。但是,如果您是通过IDE执行它,则它是项目的根文件夹。或者,如果您使用命令控制台执行它,那么它就是当前打开的文件夹。我从未见过一个设置是
/WEB-INF/classes
。或者,您必须坐在该文件夹中,通过命令提示符手动运行它。噢,stackoverflow清除了我路径的一部分:)一个人不应该使用小于或大于unscaped。这没关系。归根结底,工作目录取决于您启动服务器的方式,这在应用程序代码内部是无法控制的。如果您从Eclipse、IntelliJ、命令提示符甚至as服务中的示例启动WebPere,工作目录将完全不同。因此,依赖它是一个非常糟糕的想法。我同意我不会依赖这样的路径,我也不会使用相对路径编写任何应用程序逻辑。AFAIK with websphere文件应该会弹出。通常,appserver的工作目录是它自己的
/bin
文件夹。但是,如果您是通过IDE执行它,则它是项目的根文件夹。或者,如果您使用命令控制台执行它,那么它就是当前打开的文件夹。我从未见过一个设置是
/WEB-INF/classes
。或者,您必须坐在该文件夹中,通过命令提示符手动运行它。噢,stackoverflow清除了我路径的一部分:)一个人不应该使用小于或大于unscaped。这没关系。归根结底,工作目录取决于您启动服务器的方式,这在应用程序代码内部是无法控制的。如果您从Eclipse、IntelliJ、命令提示符甚至as服务中的示例启动WebPere,工作目录将完全不同。因此,依赖它是一个非常糟糕的想法。我同意我不会依赖这样的路径,我也不会使用相对路径编写任何应用程序逻辑。如果您对websphere感兴趣,应该会在那里弹出该文件。感谢它为绝对路径工作。最初我遇到了filenotfound异常,然后我在我的C:驱动器中创建了文件夹,并且在那里创建了日志文件。但我无法在应用服务器中查看文件的相对路径或绝对路径。我正在从RAD IDE运行该应用程序。感谢它为绝对路径工作。最初我遇到了filenotfound异常,然后我在我的C:驱动器中创建了文件夹,日志文件就是在那里创建的。但我无法在应用服务器中查看文件的相对路径或绝对路径。我正在从RADIDE运行应用程序。