如何配置Logback以打印出类名

use*_*729 17 playframework-2.0 playframework-2.1

我正在使用Play 2.1.我正在使用默认记录器play.api.Logger.我对它是如何工作感到困惑.

在我的scala代码中,方法"getPayment()"中的类"com.myapp.tickets"中的一行像这样

Logger.info("getTickets")
Run Code Online (Sandbox Code Playgroud)

生成这样的日志消息.

14:58:58.005 INFO  application play.api.LoggerLike$class info  getTickets
Run Code Online (Sandbox Code Playgroud)

我的application-logger.xml模式是

%d{HH:mm:ss.SSS} %-5level %logger %class %method  %msg%n
Run Code Online (Sandbox Code Playgroud)

我的问题是%logger告诉我"应用程序",%class告诉我"play.api.LoggerLike $ class和%method告诉我"信息".我知道所有这些.我当然希望避免增加更多的瑕疵进入消息本身(如类名或方法).

如果我打印出调用堆栈(%调用者),那么级别2就有我想要的,但这似乎不是生成日志的可行方法.

如何配置它以输出特定于应用程序的类和方法,而不是输出记录器本身的类和方法?

jsp*_*oix 26

%class{0} 只会输出类名,所以代替:

com.something.MyClass
Run Code Online (Sandbox Code Playgroud)

你会得到:

MyClass
Run Code Online (Sandbox Code Playgroud)

这是我的logback模式通常看起来的样子:

%d{HH:mm:ss} [%thread] %-5p %class{0} - %m%n
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣,也可以添加方法和行:

%d{HH:mm:ss} [%thread] %-5p %class{0}.%method:%L - %m%n
Run Code Online (Sandbox Code Playgroud)


Din*_*nka 12

回归模式:

%d{HH:mm:ss.SSS} [%thread] %-5level %class{36}.%M %L - %msg%n
Run Code Online (Sandbox Code Playgroud)

结果:

14:53:47.816 [http-bio-8080-exec-3] DEBUG  c.f.s.w.s.i.example.ExServiceImpl.getStatus 993 - blocked-->0
Run Code Online (Sandbox Code Playgroud)
  • [http-bio-8080-exec-3] 是线程名称

  • c.f.s.w.s.i.example 是包名

  • ExServiceImpl 是班级名称

  • getStatus 是方法名称

  • 993 是行号

  • 这并没有真正解决原始问题,因为这仍然只显示相同的"play.api.LoggerLike $ class". (2认同)