我的计划实施登入一个网络应用程序,我目前正在对但我在努力与一些细节。什么是最好的方法去解记录Java网应用程序?

具体而言;

  • 那么,配置文件。战争的封装文件?
  • 在哪里做人的记录,相对或绝对的道路平的文件,或者一个数据库?
  • 不Log4J记录进入直接应用程序服务器登录文件自动或者是这些东西你已经设置了?在这种情况下,我使用Tomcat,但我经常使用Jrun。
  • 任何其他陷阱我应该知道的为网络应用程序的记录?

目前,我使用Log4J但我想,最好的做法将普遍适用于所有记录的实现。

编辑:
一个外问题上面。

  • 你从哪里来初始化的日志 配置?

在一个传统的应用程序,我这样做是在入口点;

DOMConfigurator.configureAndWatch("log4j.xml");

会是什么样的网络应用程序等同的是什么?

有帮助吗?

解决方案

我把我的配置上默认的包装:src/

和登录文件的使用${卡塔利娜.家庭}系统的财产:

log4j.appender.???.file=${catalina.home}/logs/system.log

其他提示

我建议你使用 SLF4J.这是简单的记录正面支持最受欢迎的记录系统(Log4j, 公共记录, Java记录APILogback).使用它, 你将能够代替你的强调的日志系统 任何其他通过简单的类路径的更新。

其他的利益 SLF4J参数化的电话, ,这减少了丑陋的记录代码。

实际上,他们建议使用 SLF4JLogback. Logback 是一个继任者 Log4J.它的设计是由同一作者。

那么,配置文件。战争的封装文件? 根类路径。

在哪里做人的记录,相对或绝对的道路平的文件,或者一个数据库? 取决于所需要的。它的总是更好地使用相对路径。数据库都是很好的如果你执行的另一个应用程序,这将取日志从发他们使用的电子邮件/短信

不Log4J记录进入直接应用程序服务器登录文件自动或者是这些东西你已经设置了?在这种情况下,我使用Tomcat,但我经常使用Jrun。 如果你使用了控制台信息输出目的地,是的,这将会记录在你的小容器日志的文件。

任何其他陷阱我应该知道的为网络应用程序的记录? 如果你是记录从不同使用螺纹 logback, 它的安全和它公开参数登录的信息。

记录到数据库增加了另一个故障点。我们有一个情况下,生产服务器登录数据库和别人跑了一个昂贵的查询该数据库,减缓了这么多,生产的服务器变得非常、非常缓慢。记录到的文件可能会导致的问题,如果你跑出来的空间,但它似乎不太可能缓慢下来,整个的应用程序。

它可能是一个好主意地配置文件的地方管理员可以修改它没有重建自己的网页应用程序(例如,使他们可以打开详细记录,而不吵醒你了在半夜)。

不幸的是,没有"正式"的方式寻找外部资源从一个网页应用程序(正确的我,如果我错了).最常见的方式这样做,我们看到的是来看,通过目录的类路径。

我建议的通话记录API(log4j)通过slf4j.甚至如果你使用log4j、网的容器或根据不同的模块可以使用不同的日志API如Java。工具.记录或雅加达的公共记录。Slf4j提供了桥模块,向他们slf4j API。结果,所有的日志信息书面通过log4j在这种情况。

该出色的文件 如何做到应用程序记录的权利 有一堆的陷阱。

我认为,你其他问题都已经回答了其他的人在这个网页。

我也建议你使用SLF4J.

最后一件事:具有 speakable表示的对象 可以节省一些时间。

  • 把log4j在容器(服务器)和创建适当的附加程序,每个应用程序
  • 相对于服务器的道路,但是这取决于你的需求
  • 我们使用的附加程序日志到不同的文件,取决于你的需要,例如一个文件对于休眠信息/数据统计,一个用于应用程序只能,等等。
  • 不记录很多,这减慢了下来的应用程序

我个人把log4j.性WEB-INF目录和使用init servlet与下列代码:

public class InitServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

private static final String LOG4J_FILE = "WEB-INF/log4j.properties";

public InitServlet() {
    super();
}

@Override
public void init() throws ServletException {
    super.init();
    PropertyConfigurator.configure(getServletContext().getRealPath(LOG4J_FILE));
    LogFactory.getLog(InitServlet.class).info("LOG 4J configured");
}

}

  • 那么,配置文件。战争的封装文件?

在根类路径,但是...不要投入的配置文件,在战争中包。你不想要重新包装和重新部署的应用程序,如果你改变记录的配置,不是吗?一个更好的做法将配置文件的某个地方的类路径以外的战争。

  • 在哪里做人的记录,相对或绝对的道路平的文件,或者一个数据库?

我通常记录到的文件系统上的 同的分区 (日志文件可以增长速度非常快并且不应该阻止该应用程序或操作系统,如果他们变得太大)。我使用的大部分时间 绝对路径 根据下列模式:/var/项目/<PROJECT_NAME>/<PRODUCT>/<CLUSTER_NAME>/日志/<INSTANCE_NAME>.日志里 <PROJECT_NAME> 是的项目名称, <PRODUCT> 可Apache、Tomcat任何,..., <CLUSTER_NAME> 集群的名称和 <INSTANCE_NAME> 名称的实例内的集群。日志记录,以文件系统快于在一个数据库。其缺点是,记录不是集中的,如果你正在使用的几个实例和物理机。但是,合并可以很容易地用脚本。

  • 不Log4J记录进入直接应用程序服务器登录文件自动或者是这些东西你已经设置了?在这种情况下,我使用Tomcat,但我经常使用Jrun。

应用程序服务器记录应用程序服务器记录,不应用程序记录。不要写信给他们,但设立一个记录仪的工具(例如log4j),并写信给应用程序日志(了解专用).

  • 任何其他陷阱我应该知道的为网络应用程序的记录?

如果您使用的是log4j,不要忘记使用isDebugEnabled()之前,以日志:

if(logger.isDebugEnabled()) {
  logger.debug("Bla Bla Bla");
}
  • 那么,配置文件。战争的封装文件?

通常,我不会将任何记录构成的应用程序,而不是离开这的应用服务器管理员配置记录服务器。在罕见的情况下,我想log4j配置部署一个网络应用程序、网络INF是通常的路径。

  • 在哪里做人的记录,相对或绝对的道路平的文件,或者一个数据库?

再次,取决于应用服务器设置。一个共同的日志文件应用服务器和旋转在一个日常的基础是通常的设置。如果有任何特定应用的需要,管理员可以配置一个单独的文件对于一个应用程序(尊敬的包装/分类名称).

  • 不Log4J记录进入直接应用程序服务器登录文件自动或者是这些东西你已经设置了?在这种情况下,我使用Tomcat,但我经常使用Jrun。

参见上文。为tomcat用于发展目的,我只是看看它的日志记录(log4j)配置并加入特定应用具体存在。

  • 任何其他陷阱我应该知道的为网络应用程序的记录?性能。限制、记录水平为最小(即警告或误差)一旦你去住。使用 if (log.isDebugEnabled()) { log.debug("..."); } 和一样的结构在代码。

注意,如果你只是需要一点点的记录,servlet标准规定,可以获得ServletContext和使用日志的方法。这是通用的小当量系统。出。释放.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top