当前位置: 首页 > 知识库问答 >
问题:

如何使用coninient方法创建自己的log4j日志级别

杨鸿畅
2023-03-14

随着项目的增长,我们在记录这些项目中的不同场景方面达成了新的协议,因为我们通常会忘记删除大量用于在生产代码中寻找错误的废弃记录器调用(我们甚至创建了一个咖啡错误,每个人都必须为每个不需要的记录器支付20c,但没有成功:/)。所以我希望为Log4j提供一个特殊的日志级别,我们只能用于调试目的。

目前有这些记录器:

DEBUG
INFO
WARN
ERROR
FATAL

warn、error和fatal是不言而喻的,但我希望在调试之前添加另一个类别,因为我们希望在生产模式和调试中用于应用程序的常规日志记录的信息提供了有关项目状态的详细信息,这些信息在生产模式中不必使用。

在DEBUG旁边,我希望有一个特殊的记录器,例如USER(或simular),用于临时包含的记录器,例如用于错误搜索或其他任何用途,当在代码中找到时可以随时删除,毫不犹豫。

我无意中读到了这篇有用的文章,创建了一个自己的自定义级别,但我讨厌,为了调试目的,我必须在每个日志中添加日志级别:

logger.log(MyLevel.DISASTER, "i am a disaster");

所以我想知道是否有任何方法可以简单地获得一种新的方法,比如

logger.disaster( "i am a disaster" );

例如,为Logger编写fassade。班不幸的是,我不确定日志程序的初始化和授权给日志程序的创建,所以我想知道,是否有人能简单地做到这一点。我知道用编码模板我可以很容易地生成级别,但它读起来不太好。

共有2个答案

丁毅庵
2023-03-14

在Eugene和Fildor对本主题提出非常有用的意见后,简单实现:

public class IspLogger
{
  private final Logger logger;

  private IspLogger( String clazzName )
  {
    logger = Logger.getLogger( clazzName );
  }

  public static IspLogger getLogger( Class<?> clazz )
  {
    return new IspLogger( clazz.getName() );
  }

  public void info( Object message )
  {
    logger.log( IspLogger.class.getCanonicalName(), Level.INFO, message, null );
  }

  public void info( Object message, Throwable t )
  {
    logger.log( IspLogger.class.getCanonicalName(), Level.INFO, message, t);
  }

  public void dev( Object message )
  {
    logger.log( IspLogger.class.getCanonicalName(), IspDebugLevel.ISP_DEBUG, message, null );
  }

  public void dev( Object message, Throwable t )
  {
    logger.log( IspLogger.class.getCanonicalName(), IspDebugLevel.ISP_DEBUG, message, t);
  }

  public void debug( Object message )
  {
    logger.log( IspLogger.class.getCanonicalName(), Level.DEBUG, message, null );
  }

  ...
}


class IspDebugLevel extends Level
{
  public static final IspDebugLevel ISP_DEBUG = new IspDebugLevel( 20000, "DEV", 0 );/20000 is equal to INFO.

  public IspDebugLevel( int level, String levelStr, int syslogEquivalent )
  {
    super( level, levelStr, syslogEquivalent );
  }

  public static IspDebugLevel toLevel( int val, Level defaultLevel )
  {
    return ISP_DEBUG;
  }

  public static IspDebugLevel toLevel( String sArg, Level defaultLevel )
  {
    return ISP_DEBUG;
  }
}


public class LoggerTest
{
  private static final IspLogger logger = IspLogger.getLogger( LoggerTest.class );

  public static void main( String[] args )
  {
    logger.dev( "Hello World" );
  }
}
鄂琛
2023-03-14

也许只是我,但不会:

 class DisasterLogger{
      private static final Log logger = Logger.getLogger(DisasterLogger.class); //or any other way you provide the logger
      public void log(String message){
           logger.log(MyLevel.DISASTER, message);
      }
 }

只是工作?

 类似资料:
  • 我想创建单独的日志文件,一个用于信息,另一个用于调试,我正在使用下面的log4j.property文件,请建议如何修改不同文件中的两级日志记录, 我想请求请发送我更新的属性文件而不是给我搜索或探索的指针,因为我已经花了3-4个小时在Google和StackOverflow上搜索这个解决方案, 提前道谢。

  • 我正在尝试创建基于不同级别的“不同”附加器,但到目前为止,我找不到一种隔离日志级别的方法。。。。 我需要一种方法,能够土地只有INFO优先排序的日志被追加。因为INFO级别的日志记录也会显示DEBUG标记的日志记录器...这对我没有帮助。 另一件事是,对于“相同”包,我无法定义不同的日志附加器: 在这里,我得到了如下错误:

  • 主要内容:如何设置日志级别?,日志级别如何工作?,Log4j 日志级别示例日志级别用于对日志文件中的信息进行分类。但是它们以非常具体的方式进行分类,即按紧急程度分类。该级别允许您管理以下类型的信息: 您可以在搜索过程中过滤您的日志文件。 您可以管理您记录的信息量。 系统中给出的信息量和类型以及事件日志由配置文件中的 log4j 日志级别设置控制。每条日志消息都以消息级别为前缀。 日志级别是org.apache.log4j.Level类的一个实例。 Log4j 具有以下级

  • 我使用log4j进行日志记录,并且使用.log格式的所有日志文件,其结构简单,如; log4j.rootcategory=info,C,R log4j.appender.c=org.apache.log4j.consoleappender log4j.appender.c.layout=org.apache.log4j.patternlayout log4j.appender.r.layout=o

  • 问题内容: 我想在我的Java项目中使用Log4j,我应该在配置文件中提供该配置,该配置文件每天晚上12:00将生成一个新文件,并且文件名应类似于 -output- log-of-MyProjectName-HostName-2013-Dec-10。 txt 名称)。我的配置文件就是这样- 它每天都在创建新文件,但在文件名后附加日期。请帮我。提前致谢。 问题答案: 我认为您想要DailyRolli

  • 问题内容: 我目前正在使用log4j的项目中。我正在运行一个测试用例(junit),并希望将日志级别设置为跟踪,以便我可以查看所有值是否正确。在项目中使用日志记录的类包含如下一行: 并使用类似这样的命令进行实际调试 我以前从未使用过log4j,有人知道我该如何仅为测试用例更改日志级别,最好仅通过在Eclipse的运行配置对话框中定义一个参数即可。 问题答案: 使用另一个配置文件 也许您可以指向另一