java - 打包时如何更改log4j配置

标签 java maven log4j

我有一个相当简单的 Java 应用程序,它作为可执行 JAR 文件分发给用户。为了跟踪使用情况并协助诊断,我想向应用程序添加日志记录功能,但从一次执行到下一次执行,我永远无法确定用户将在何处运行此应用程序。

为了完成这项工作,我已将我的应用程序配置为使用 log4j 套接字附加程序 - 无论用户在何处运行此应用程序,消息都会发送到套接字并正确记录,这是完美的。

不过,我现在遇到的问题是,当我在本地运行时与将此应用程序部署到生产环境时相比,我更愿意使用不同的 log4j 配置。在本地运行时(从我的 IDE,IntelliJ),出于以下几个原因,我更愿意使用控制台附加程序:

  1. 查看正在发生的事情是微不足道的。
  2. 如果我在没有 Internet 连接的情况下进行开发,我不想因为无法连接而挂断电话。
  3. 我不想让生产日志与我在开发期间所做的事情混在一起。

但是,当我打包并分发应用程序时,我希望它使用套接字附加程序,而不是控制台附加程序。

有什么简单的方法可以完成我想要的吗?我正在使用 Maven 来构建我的应用程序,但我并不十分熟练。

最佳答案

这里有一个更简单的方法来解决您的问题...

src/main/resources下放两个log4j.properties文件目录,像这样:-

src/main/resources
|- log4j.properties 
|- log4j_dev.properties 

log4j.properties包含生产配置,默认情况下,Log4J 会自动选择此文件,因为您使用的是标准文件名。

log4j_dev.properties包含开发配置。为了确保 IntelliJ 在开发过程中选择它,您将使用 -Dlog4j.configuration=<configuration-file> 覆盖日志配置。虚拟机选项。我附上了一张关于如何使用 IntelliJ 配置它的屏幕截图:-

enter image description here

关于java - 打包时如何更改log4j配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372117/

相关文章:

java - 基于 Jersey Moxy 的休息服务不消耗嵌套 json post 请求负载

java - C# 中有没有一种方法可以像 Java 一样初始化锯齿状数组

java - Java的Vector如何添加原始数组?

java - 为什么我不能在 Eclipse 中新建的 maven webapp 项目中使用 New->Source Folder?

java - 是否可以导入两个具有相同包的 jar ?

android - Android项目中的第二个Maven存储库

java - 使用多个源文件夹(作为将大型 Java 项目转换为 Maven 的中间步骤)

java - 配置 Java FileHandler 日志记录以在目录不存在时创建目录

neo4j - 来自 Neo4j 服务器扩展的 Log4j 日志记录

java - Log4j FileNotFoundException - Java FileSystem getBooleanAttributes() 方法如何工作?