首页 > 解决方案 > 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.propertiesin自定义日志记录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.xmlor中的任何相关内容Main.java

我是否遗漏了什么,或者可能是更改以某种方式被覆盖了?

标签: log4jactivejdbcjavalite

解决方案


这是我在所有 JavaLite ActiveWeb 项目中使用的方法。要求是:

  1. 为了方便起见,我想在开发时登录到控制台。
  2. 我想登录到任何其他环境中的文件
  3. 我希望我的日志文件具有 JSON 格式,因为我可以在 Splunk、ElasticSearch 或任何其他类似工具中对其进行分析。

所以,我用这个commit扩充了ActiveWeb

让我们一步一步来:

  1. 向 pom 文件添加属性<logger-name>CONSOLE</logger-name>
  2. 添加包含以下内容的文件 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

```

  1. 添加 SLF4J 依赖项以将其与 Log4J 集成:

```

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.7.5</version>
</dependency>

```

  1. 向 pom 添加配置文件:

<profiles> <profile> <id>file_log</id> <properties> <logger-name>FILE</logger-name> </properties> </profile> </profiles>

  1. 在 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-


推荐阅读