登录-获取方法名称

贡萨洛·卡多佐(GonçaloCardoso)

我们目前正在从log4j迁移到Logback,但是在获取触发日志的“原始”方法名称时遇到了问题。

我之所以称它为“原始”,是因为我们有一个集中式的记录器类(以隐藏和操作某些日志),并且日志中显示的是该集中式类的方法名称。

在log4j中,我们能够正确获取“原始”方法名称。

Logback是否可以获取它?

记录器参数

log4j

<param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss,SSS} %5p [%F] - %M() - %m%n"/>

退回

<pattern>%d{"dd-MM-yyyy HH:mm:ss,SSS"} %-5level [%logger - %M] - %msg%n</pattern>

结果:(方法名称-类名称)

log4j

doLogTester1 - a.Tester1            
doLogTester2 - b.Tester2            
doLogTester1 - a.Tester1            
doLogTester2 - b.Tester2            

退回

processLog - a.Tester1              
processLog - b.Tester2              
processLog - a.Tester1              
processLog - b.Tester2              

编辑-完整示例

Main.java

public class Main
{
private static final LoggerCommon logger = new LoggerCommon(Main.class);

    public static void main(String[] args)
    {
        logger.doLog("I'm on the Main class in the main method");
    }
}

记录仪通用

log4j

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class LoggerCommon
{
    private static Logger logger;

    public LoggerCommon(Class<?> c)
    {
        logger = Logger.getLogger(c);
    }

    public void doLog(String message)
    {
        logger.log(LoggerCommon.class.getName(), Level.INFO, message, null);
    }
}

登回

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerCommon
{
    private Logger logger;

    public LoggerCommon(Class<?> c)
    {
        logger = LoggerFactory.getLogger(c);
    }

    public void doLog(String message)
    {
        logger.info(message);
    }
}

配置的

log4j

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="CA" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%M - %F - %m%n"/>
        </layout>
    </appender>
    <root>
        <level value="debug"/>
        <appender-ref ref="CA"/>
    </root>
</log4j:configuration>

登回

<configuration>
    <appender name="CA" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%M - %logger - %msg %n</pattern>
        </encoder>
    </appender>
    <root level="TRACE">
        <appender-ref ref="CA"/>
    </root>
</configuration>
贡萨洛·卡多佐(GonçaloCardoso)

通过使用以下方法解决了它:

methodName = stackTrace[xxxx].getMethodName();

由于xxxx因服务器而异,因此并不完美,但这是我们能找到的最好的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

codeigniter从父方法获取方法名称

来自分类Dev

junit,获取失败的方法名称

来自分类Dev

获取Web服务的方法名称

来自分类Dev

如何获取模型的方法名称数组?

来自分类Dev

获取当前方法名称

来自分类Dev

获取引发异常的方法名称

来自分类Dev

smalltalk反射-如何获取方法名称?

来自分类Dev

登录,获取名称和注销错误

来自分类Dev

获取当前登录用户的名称

来自分类Dev

Spring bean方法:如何获取方法名称?

来自分类Dev

动态方法名称

来自分类Dev

获取通过lambda表达式传递的方法名称?

来自分类Dev

使用nameof在C#中获取setter方法名称

来自分类Dev

从lambda获取方法名称而无需调用

来自分类Dev

Java获取编译时安全的方法名称

来自分类Dev

在Java过滤器中获取方法名称

来自分类Dev

获取所有服务合同方法名称

来自分类Dev

JS-无法获取函数实例的构造方法名称

来自分类Dev

在授权前/授权后获取方法名称

来自分类Dev

从非托管库的方法名称中获取参数类型?

来自分类Dev

如何获取在传递参数的lambda中使用的方法名称

来自分类Dev

从AOP调用类获取方法名称和参数

来自分类Dev

在Java过滤器中获取方法名称

来自分类Dev

获取所有服务合同方法名称

来自分类Dev

无法获取/登录

来自分类Dev

获取 ReferencedSymbol 的方法名

来自分类Dev

BCEL-获取类名称,元素名称和方法名称

来自分类Dev

BCEL-获取类名称,元素名称和方法名称

来自分类Dev

从python目录中获取所有模块名称,类名称和方法名称