log4j - log4j.properties 对登录 activeJDBC 没有影响
问题描述
我目前正在使用 javalite webactive 和 activeJDBC 开发一个简单的 Web 应用程序。从 javalite 开始,我只是使用了https://github.com/javalite/activeweb-simple/并从那里扩展。
我想改变一件事,因为我已经实现了一些我想自定义记录器的控制器和模型:
[qtp1442407170-13] INFO org.javalite.activeweb.RequestDispatcher - {"controller":"app.controllers.HomeController","duration_millis":685,"remote_ip":"0:0:0:0:0:0:0:1","method":"GET","action":"index","url":"http://localhost:8080/home/index","status":200}
.
我真的不明白前缀代表什么,因此我想更改该部分以显示日期和时间戳。
按照http://javalite.io/logging#log4j-configuration我应该能够通过log4j.properties
in自定义日志记录src/main/resources
,但这似乎没有任何区别。
文件内容:
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %4p %c{1} - %m%n
我怀疑我以某种方式覆盖了默认记录器,尽管我没有更改pom.xml
or中的任何相关内容Main.java
。
我是否遗漏了什么,或者可能是更改以某种方式被覆盖了?
解决方案
这是我在所有 JavaLite ActiveWeb 项目中使用的方法。要求是:
- 为了方便起见,我想在开发时登录到控制台。
- 我想登录到任何其他环境中的文件
- 我希望我的日志文件具有 JSON 格式,因为我可以在 Splunk、ElasticSearch 或任何其他类似工具中对其进行分析。
让我们一步一步来:
- 向 pom 文件添加属性
<logger-name>CONSOLE</logger-name>
- 添加包含以下内容的文件 log4j.properties:
```
log4j.rootLogger=INFO, ${logger-name}
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %4p [%t]: %c{1} - %m%n
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=logs/activeweb-simple.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Encoding=UTF-8
log4j.appender.FILE.layout=org.javalite.logging.JsonLog4jLayout
```
- 添加 SLF4J 依赖项以将其与 Log4J 集成:
```
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
```
- 向 pom 添加配置文件:
<profiles>
<profile>
<id>file_log</id>
<properties>
<logger-name>FILE</logger-name>
</properties>
</profile>
</profiles>
- 在 pom 中添加属性过滤:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
让我们看看这是如何工作的。
当您在没有配置文件的开发环境中运行程序时,maven${logger-name}
会在您的log4j.properties
文件中替换CONSOLE
. 这样,您就可以使用 CONSOLE 记录器,并将所有内容都打印到您的控制台。如果您使用 profile 运行程序-Pfile_log
,那么您的 Maven 将替换 ${logger-name}
为FILE
,因此 Log4J 将记录到相应的文件。
此外,看到控制台布局是org.apache.log4j.ConsoleAppender
,但文件布局是org.javalite.logging.JsonLog4jLayout
. 这org.javalite.logging.JsonLog4jLayout
是一个与 Log4J 的 JavaLite 集成,专门用于与 Log4J 集成并生成 JSON 输出。
那么,你如何使用它呢?在开发环境中,您不需要做任何特别的事情,它就可以工作。当你需要构建它时,运行mvn package -Pfile_log
-
推荐阅读
- algorithm - 如何找到一种算法来找到与其他人距离较小的一行中的一个点?
- mainframe - 如何在 JCL 中引用最新的物理顺序 (PS) 文件
- python - 如何评估每对变量的 KNN 分类器?
- pdf - Power Query - 当文件具有不同页面时从 PDF 中获取数据
- python - 无法通过 Python 使用特定 macOS 应用程序打开文件
- slack - 每次发布新消息时,是否都会调用监听特定消息事件的 Slack 机器人?有没有人遇到过这个问题?
- javascript - Cloudfront 不断将我重定向到 index.html
- docker - Redis HA 与 Docker 上的 Sentinel
- forms - Symfony 5 如何使用 paramconverter 作为字段之一的值创建表单
- java - 如何对 Lucene 查询搜索结果执行新的查询搜索