[英]How to log in web project ? best practice
我正在尝试使用tomcat,jsp,servlet和log4j做我的第一个Web项目。 现在我在AbstractRepository中有一个记录器,其初始化如下:
private final static Logger LOG = Logger.getLogger(AbstractRepository.class);
问题是如何登录子类(用户存储库,主题存储库等)。 每个子类在AbstractRepository中拥有一个记录器或创建getter并仅使用此记录器是否更好?
PS帮我解答问题标题
将Logger设为私有,并为每个子类创建新的Logger。 如果这样做,则可以为每个Logger自己配置级别:
<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 。 这是一个日志记录外观,它将收集所有旧框架的日志记录并将其路由到您选择的框架,即log4j或logback。 我建议您将Logback用作日志记录实现,因为它已经基于SLF4J,它既现代又快速,并且与Log4J一样容易。
更新
为了使其正常工作,首先需要将这些Jar包含在类路径中(通过Maven或“ lib” -directroy):
在“ src / java / resources”(Maven)或您的类路径的默认包(“ src”)中放置一个名为“ logback.xml”的文件,并添加一些内容 ,即:
<?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>
例如,将根记录器设置为“ warn”,将项目特定的记录器设置为“ info”。 这将显示项目中最多的日志,但仅显示其他库中的警告和错误。
在您的班级中,以这种方式创建记录器:
//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());
尝试使用此Mkyong ,它使用log.properties
文件设置格式并构建日志。 整个应用程序仅使用一个全局记录器。
src文件夹中必须有一个log4j.properties
文件,已配置巫婆用于日志消息输出。现在,您要知道,我们需要为每个类创建单独的Logger对象。
private final static Logger LOG = Logger.getLogger(SubjectRepository.class);
private final static Logger LOG = Logger.getLogger(UserRepository.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.