java如何在log4j2中以编程方式配置记录器。02?
我想使用log4j而不使用任何配置文件。 我想做的是:
logger = (Logger) LogManager.getLogger(this.getClass());
String pattern = "[%level] %m%n";
//do something to make this logger output to an local file "/xxx/yyy/zzz.log"
我找到了这个答案:Configuring Log4j Loggers Programmatically
但是Logger#addAppender
的文件说:
此方法不是通过公共API公开的,主要用于单元测试
我不确定在我的代码中使用此方法是否正确,或者是否有其他更好的解决方案来解决我的问题
# 1 楼答案
如果我只是回应你的要求,我可以提出三个选择。我将第一个用于一种引导记录器配置;然而,一开始我认为第二个是必要的。您的第三个选择似乎很麻烦,因为您需要调用不同的log4japi-s来进行配置
在Java的简单日志框架上使用Log4j
创建一个“最小”或“默认”log4j。JAR文件的资源中的属性文件。然后声明一些静态
将配置写入StreamWriter,而不是将文件放入JAR中,然后将流作为StringReader提供给日志配置器,并使用上面的示例(或多或少)
您可以使用slf4j API进行日志配置,而不是直接写入Log4j。我去过的大多数地方都喜欢SLF4J路线
就个人而言,我更喜欢选项1;它很容易维护。很简单,您始终可以重新排序代码以接受/查找要首先加载的文件。还有一些其他的横向途径可以考虑,例如在启动时以编程方式设置环境变量。那在我看来似乎是做作的
我使用#1的方式是通过resources文件建立默认/引导记录器配置,该文件本身被包装到JAR文件中。您可以在以后重新配置东西“”,而此选项为您提供了最低限度的启动或引导配置。在早期阶段,我发现事情还没有被记录下来,因为记录器初始化还没有在嵌入式应用上发生。因此,我一直将引导(或默认)的简单选项作为基本选项。希望这有帮助
# 2 楼答案
在最新版本的
log4j2
中,所有API都像如果已被弃用,最好使用自定义日志
ConfigurationFactory
和ConfigurationBuilder
以编程方式定义日志配置# 3 楼答案
The official documentation显示了一个示例:以编程方式添加到当前配置中
有了这些限制:
此解决方案避免使用核心实现
org.apache.logging.log4j.core.Logger
中的方法,并避免像这样的脏强制转换: