gpt4 book ai didi

java - 如何登录web项目?最佳实践

转载 作者:行者123 更新时间:2023-11-30 08:17:13 25 4
gpt4 key购买 nike

我正在尝试使用 tomcat、jsp、servlet 和 log4j 来完成我的第一个 Web 项目。现在我在 AbstractRepository 中有一个记录器,其初始化如下:

private final static Logger LOG = Logger.getLogger(AbstractRepository.class);

问题是如何登录子类(用户存储库、主题存储库等)。每个子类都有一个记录器或在 AbstractRepository 中创建 getter 并只使用这个记录器更好吗?

repository hierarchy

PS 帮我改题

最佳答案

将 Loggers 设为私有(private)并为每个子类创建新的 Loggers。如果这样做,您可以为每个记录器单独配置级别:

<logger name="ua.nure.[...etc..].AbstractRepository" level="INFO" />
<logger name="ua.nure.[...etc..].SubjectRepository" level="DEBUG" />
<logger name="ua.nure.[...etc..].UserRepository" level="WARN" />

如果您可以自由选择日志框架,请使用 SLF4J .这是一个日志外观,它将收集来自所有 legacy frameworks 的日志记录。并将其路由到您选择的框架,即 log4j 或 logback。我建议您使用 Logback 作为日志记录实现,因为它已经基于 SLF4J,现代且快速,并且配置与 Log4J 一样简单。

更新

要使其正常工作,您首先需要将这些 Jar 包含到您的类路径中(通过 Maven 或“lib”-directroy):

  1. slf4j-api.jar
  2. jcl-over-slf4j.jar (将 Apache Commons Logging 重定向到 SLF4J)
  3. log4j-over-slf4j.jar (将 Log4J 重定向到 SLF4J)
  4. jul-to-slf4j.jar (将 Java Util Logging 重定向到 SLF4J,请参阅 HandlerBridge info)
  5. logback-classic.jar (从 SLF4J 重定向到 Logback 日志记录)
  6. logback-core.jar

将名为“logback.xml”的文件放入“src/java/resources”(Maven)或类路径的默认包(“src”)中并添加一些 content ,即:

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="false" scanPeriod="10 seconds">

<!-- This appender prints to stdout: -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>%p %d{dd.MM.yyyy HH:mm:ss} [%c] - %m%n</pattern>
</encoder>
</appender>

<!-- Log levels for specific packages or classes: -->

<logger name="my.company.projectname.package" level="INFO" />

<logger name="ua.nure" level="INFO" />

// add more here ...

<!-- Log levels for all packages and classes can be controlled here: -->
<root level="INFO">
<!-- add more appenders (rolling file, email, ...) here: -->
<appender-ref ref="stdout" />
</root>

</configuration>

例如,将根记录器设置为“警告”,并将您的项目特定记录器设置为“信息”。这将显示您项目中的最多日志,但仅显示来自其他库的警告和错误。

在您的类中以这种方式创建记录器:

//default
private final Logger LOG = LoggerFactory.getLogger(this.getClass());
//static
private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);
//in a serializable
private transient final Logger LOG = LoggerFactory.getLogger(this.getClass());

关于java - 如何登录web项目?最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com