Tag: log4j2

如何在log4j2属性中设置类的日志级别

在log4j中我可以在属性文件中指定一个类来记录调试级别,如下所示: log4j.logger.com.mycompany.mypackage.ClassName=DEBUG 我如何在log4j2中执行此操作? 注意我仍然需要使用新的属性文件(不是xml或json)。 TIA

log4j2的性能与log4j1相比

我正在尝试将我的应用程序迁移到使用log4j2。 它目前使用的是log4j 1.2.16。 我的项目也有性能构建,升级到log4j 2后,性能似乎有了很大提高。 也就是说,直到我读到有关桥接的内容。 根据文档,我必须从类路径中排除log4j1 JAR,并包括桥接JAR – 我假设它被命名为’org.apache.logging.log4j:log4j-1.2-api’。 一旦我这样做,性能再次下降。 总结一下: 性能与log4j2 +桥接jar + log4j-1.2-api + log4j1:好 使用log4j2 +桥接jar + log4j-1.2-api的性能:糟糕(以至于它降回到log4j1的性能) 我已经检查过log4j-1.2-api是否在类路径中较早。 所以它应该先加载。 知道什么可能导致这个问题吗? 非常感谢你提前! 哦,我完整的日志记录是: org.slf4j:SLF4J的API org.slf4j:log4j的环比SLF4J org.slf4j:JCL-过SLF4J org.apache.logging.log4j:log4j的-SLF4J-IMPL org.apache.logging.log4j:log4j的核心 org.apache.logging.log4j:log4j的-API org.apache.logging.log4j:log4j的-1.2-API log4j:log4j(有和没有,如上所述) 版本: Log4j2:2.6.2 slf4j:1.7.20 log4j1:1.2.16 我的配置文件如下: log4j2-xinclude-appenders.xml如下所示: %d|%X{active.profiles}| %-5p |%X{fcp.session}|%X{StateMachine.key}|%X{StateMachine.currentState}| %m | %t | %c{1.}%n 编辑:这是包含在类路径中的log4j 1 xml文件 编辑2 :性能不佳的类路径顺序: log4j-1.2-api-2.6.2.jar […]

如何在log4j2中创建滚动文件appender插件

我想创建一个自定义log4j2滚动文件appender。 我需要创建这个自定义appender,因为我想用我的应用程序特有的一些信息包装log4j日志事件。 例如userId,托管的应用程序名称。 我有一个扩展Log4jLogEvent实现LogEvent的类。 这个类包含了我需要用日志事件包装的信息。 请看这段代码: public class CustomLogEvent extends Log4jLogEvent implements LogEvent { private String userId; private String applicationName; private static final long serialVersionUID = 1L; public CustomLogEvent(String loggerName, Marker marker, String loggerFQCN, Level level, Message message, Throwable t, Map mdc, ThreadContext.ContextStack ndc, String threadName, StackTraceElement location, long timestamp){ super(loggerName,marker,loggerFQCN,level,message,t,mdc,ndc,threadName,location,timestamp); } //Getters and setters […]

Log4j2 YAML生成多个日志文件问题

我的目标; 生成2个日志文件。 第一个将仅记录消息(除了消息之外没有其他内容) 第二个将记录所有INFO日志 我做了类似下面的事情; log4j2-spring.yml Configuration: status: warn monitorInterval: 30 shutdownHook: disable CustomLevels: CustomLevel: – name: MESSAGE intLevel: 50 Appenders: Console: name: Console target: SYSTEM_OUT PatternLayout: Pattern: “[%d{yyyy-MM-dd HH:mm:ss}][%-5p][%t][%c{2}] – %m%n” RollingFile: name: InfoLog fileName: “logs/all-info-logs.log” filePattern: “logs/${date:yyyy-MM}/all-info-logs-%d{MM-dd-yyyy}-%i.log.zip” PatternLayout: Pattern: “[%d{yyyy-MM-dd HH:mm:ss}][%-5p][%t][%c{2}] – %m%n” Policies: SizeBasedTriggeringPolicy: size: 5 MB DefaultRolloverStrategy: max: 50 RollingFile: name: […]

OpenShift,Log4j2和Maven – 无法解决项目的依赖关系

我创建并运行了一个独立的Java程序,使用Slf4j通过Log4j2进行日志记录。 日志记录按预期工作。 然后,我将此function添加到我在Eclipse IDE中开发的现有(和工作) OpenShift Java Web应用程序中。 我将以下依赖项添加到pom.xml org.slf4j slf4j-api 1.7.21 org.apache.logging.log4j log4j-core 2.7 org.apache.logging.log4j log4j-api 2.7 org.apache.logging.log4j log4j-slf4j-impl 2.7 我使用了一个简单的log4j2.xml配置文件,并在Java类中添加了一些日志代码。 我在本地运行Web应用程序,日志工作正常。 然后我将pom.xml和log4j2.xml移动到Git Staging Area并执行Commit和Push 。 这通常很好,没有问题。 这次我在对话框控制台窗口中收到以下错误消息: [ERROR] Failed to execute goal on project testdb: Could not resolve dependencies for project testdb:testdb:war:1.0: Failure to find org.apache.logging.log4j:log4j-api:jar:2.7 in http://maven.repository.redhat.com/techpreview/all was cached in the local repository, […]

删除文件追加器后,Log4j2不会登录到服务器

我遇到了一个奇怪的问题,我不明白: 当我删除我的File appender时,它阻止我登录到我的服务器,即使File appender不应该负责将任何内容记录到服务器; 该任务应仅适用于我的GELF appender。 以下代码能够将两者都记录到我的控制台和服务器上 Java的 import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class App { private static final Logger log4j = LogManager.getLogger(App.class.getName()); public static void main(String[] args) { log4j.info(“This is my info message”); log4j.warn(“This is my warning message”); log4j.error(“This is my error message”); log4j.fatal(“This is my fatal message”); } } XML %d{MM/dd/yyyy hh:mm:ss} %5p […]

在log4j2中替换BasicConfigurator

我正在进行log4j 1到log4j 2的迁移。 在AppConfigInitializer文件中,我们使用这样的东西 – BasicConfigurator.configure(consoleAppender); 我应该用什么来替换它以使它在log4j2中工作。 我也在使用向后兼容性桥接器,但是已经破坏了BasicConfigurator实现。 我想我需要使用配置文件来做这件事,但无法找到方法。

Log4j2在指定的持续时间后自动翻转

我正在使用RollingFile appender。 我希望每20分钟后滚动一次日志文件,而不管日志记录事件如何。 例如,在一小时内我应该有3个日志文件,即使那个小时可能没有任何记录。 这可能使用Log4j2吗? 如果是,请提供所需的配置(在log4j2.xml中)。 以下配置似乎不起作用: %m%n

以编程方式从Log4j2 XML配置获取属性

在我的Log4j2配置文件中,我有这个: log-dir/ default-log-file 现在,在我的一些代码中,我创建了自定义记录器。 我需要访问“baseDir”的值并进行更改。 我尝试过使用上下文中的getProperties : LoggerContext context = (LoggerContext) LogManager.getContext(false); Configuration configuration = context.getConfiguration(); configuration.getProperties(); 但是返回的地图有“hostname”和“contextName”键。 不是我正在寻找的属性地图。 我以为我可以从rootLogger中获取它: LoggerContext context = (LoggerContext) LogManager.getContext(false); Configuration configuration = context.getConfiguration() for (Property p : configuration.getRootLogger().getPropertyList()) { … } 但是这会产生NullPointerException,因为getPropertyList返回null。 那么,我如何使用名称“baseDir”访问该属性,以便我可以以编程方式创建一个新的记录器,但具有不同的基本目录?

如何在项目中包含多个log4j2.xml文件?

我的项目由多个模块组成。 每个模块都可以独立运行,并具有单独的log4j2.xml 说项目X由三个模块组成: 模块A有log4j2.xml(包含Loggers和Appenders) 模块B有log4j2.xml 模块C有log4j2.xml 在集成模块时,我必须手动将Loggers和Appender从每个模块的log4j2.xml复制粘贴到项目特定的log4j2.xml文件中。 为了避免复制粘贴,我一直在寻找包含多个文件的XInclude ,但它只支持Appenders和Logger在不同的文件中。 http://logging.apache.org/log4j/2.x/manual/configuration.html#XInclude 如何XInclude多个log4j2.xml文件? 任何帮助是极大的赞赏。