`
schy_hqh
  • 浏览: 552571 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

play记录日志

 
阅读更多

Play的日志

 

由于当前使用play1.25,虽然play提供了Logger进行日志功能,

但是没有找到其保存日志的文件,只是在控制台显示一些INFO级别的信息,感觉很无助

难道play1.25就提供打印日志的功能,不能将打印信息保存到一个文件中吗?

 

application.conf文件中有关于Log的配置

 

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
#application.log=INFO
#
# More logging configuration
#application.log.path=/log4j.properties
#application.log.system.out=on

 

什么都不动,启动应用,IDE的控制台将按INFO级别输出日志

 打开注释:

 application.log=INFO ,也是输出按最低级别为INFO进行输出

 将其改为 application.log=DEBUG,效果与INFO一样,难到play的日志输出默认最低为INFO

 application.log=WARN 将输出WARN以上的信息

 application.log=ERROR 将输出ERROR以上的信息

 

Play中使用Log4j配置

 play如果检测到类路径下有log4j.properties文件,会自动加载该配置

 然后使用log4j的配置进行日志管理

但是,打印出来的日志信息有点问题,不能输出详细的异常链

log4j.properties配置

#使用play做日志,这里的异常级别只对控制台输出有效,对于写文件仍然按DEBUG为最低级别进行!
log4j.rootLogger=ERROR, Rolling, Console

#this config for what ?
#log4j.logger.play=INFO

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p  %m%n

# Rolling files 

log4j.appender.Rolling=org.apache.log4j.RollingFileAppender
 
log4j.appender.Rolling.File=application.log

#日志记录最低级别为ERROR
log4j.appender.Rolling.Threshold=ERROR 
log4j.appender.Rolling.MaxFileSize=1MB
 
log4j.appender.Rolling.MaxBackupIndex=100 

log4j.appender.Rolling.layout=org.apache.log4j.PatternLayout
 
log4j.appender.Rolling.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

 

模拟一个异常

	public static void index(){
		String username = Security.connected();
		//Post对象的author属性为User类型
		List<Post> posts = Post.find("author.username", username).<Post>fetch();
		try {
			int i = 1/0;
		} catch(Exception e) {
			Logger.error(e.getMessage(), e);
		}
		render(posts);
	}
	

 

 

虽然指定了级别为ERROR以上,但是控制台仍会输出INFO级别

而且,记录日志的文件中也没有具体的异常链信息

只是记录了异常消息

2013-09-08 14:25:21,023 [play-thread-1] [play] [ERROR] - / by zero

 而想要的是这样的异常记录

2013-09-08 14:20:34,407 [play-thread-1] [controllers.Admin] [ERROR] - / by zero
java.lang.ArithmeticException: / by zero
	at controllers.Admin.index(Admin.java:41)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
	at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:251)
	at play.Invoker$Invocation.run(Invoker.java:278)
	at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:229)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)

  

 

 

记录日志正确的做法 

仍然增加一个log4j的配置

出现异常的地方,不使用Logger.error()记录日志,而是将异常包装为RuntimeException向上抛

抛到play中,由play来处理这个异常!

play接收到异常后,会将异常按log4j的配置进行保存,这样就得到了想要的日志了!!!

	public static void index(){
		String username = Security.connected();
		//Post对象的author属性为User类型
		List<Post> posts = Post.find("author.username", username).<Post>fetch();
		try {
			int i = 1/0;
		} catch(Exception e) {
                        //Logger.errro(e.getMessage,e);//无法得到具体的异常信息
			throw new RuntimeException(e);
		}
		render(posts);
	}

 

重新打开application.log,此时记录的异常就详细多了

2013-09-08 15:15:29 ERROR  

@6fgka5n30
Internal Server Error (500) for request GET /admin/index

Execution exception (In /app/controllers/Admin.java around line 43)
RuntimeException occured : java.lang.ArithmeticException: / by zero

play.exceptions.JavaExecutionException: java.lang.ArithmeticException: / by zero
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
	at Invocation.HTTP Request(Play!)
Caused by: java.lang.RuntimeException: java.lang.ArithmeticException: / by zero
	at controllers.Admin.index(Admin.java:43)
	at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
	at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
	at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
	... 1 more
Caused by: java.lang.ArithmeticException: / by zero
	at controllers.Admin.index(Admin.java:41)
	... 6 more

 

小结

 play中做日志:

application.conf 不修改任何有关log的配置

增加log4j.properties文件,写两个Appender,一个往控制台打印,一个记录到文件

程序中catch到Exception时,直接使用RuntimeException包装后,往上抛即可

最后,在log4j配置指定的文件中即可找到记录的异常日志信息!

 

 

 

 

 

分享到:
评论
1 楼 chenzhihui 2014-04-10  
不是可以在log4j中配置以控制台或者文件方式保存日志的?

相关推荐

    CarPlay认证协议log记录 ATS文件

    CarPlay认证的协议log记录 ATS文件,在2018年认证通过的log,供carplay开发者参考。

    Android手机端崩溃日志记录.zip

    6. **分析工具**:日志收集后,通常需要借助专门的分析工具(如Google Play Console、Crashlytics等)进行解析和故障排查。这些工具可以提供详细的崩溃报告,帮助定位问题根源。 7. **优化实践**:基于崩溃日志,...

    play framework 框架手册 word 版

    15. **日志配置**:Play框架允许自定义日志级别,生产环境的配置可以确保日志的记录和分析。 16. **多环境配置**:`application.conf`可以针对开发、测试和生产环境有不同的配置,便于不同阶段的管理。 17. **生产...

    Play-Utils是一个专门为PlayFramework开发的实用工具包模块

    开发过程中,日志记录和应用监控至关重要。这个模块可能提供了更强大的日志配置和监控工具,便于问题排查和性能分析。 7. **国际化与本地化**: 多语言支持是许多应用程序的需求。Play-Utils 可能增强了 Play 的 ...

    Android Gps日志记录程序源码-IT计算机-毕业设计.zip

    这是一个关于Android平台GPS日志记录程序的源码项目,适合计算机专业的学生进行毕业设计学习。在深入探讨这个项目之前,让我们先理解一下Android系统、GPS技术以及日志记录在移动应用开发中的重要性。 Android是一...

    play框架手册完整版本

    5. **类增强Enhancement**:Play允许在运行时对类进行增强,例如添加拦截器或AOP(面向切面编程)功能,这有助于实现如日志记录、事务管理等功能。 6. **HTTP路由**:通过`routes`文件定义,Play将URL映射到控制器...

    play 1.1框架

    通过Action Composition,开发者可以方便地实现权限控制、日志记录等功能。 4. **模板引擎**:Play提供了一种灵活的模板引擎,使得HTML与业务逻辑可以轻松分离。模板支持嵌入Scala或Java表达式,让视图层的编写更加...

    android 错误日志的收集

    除了手动在代码中插入日志,还可以使用第三方库如Crashlytics、Fabric、HockeyApp或Google Play服务中的Firebase Crash Reporting等,它们能自动收集错误日志,并提供详细的堆栈跟踪,甚至在用户设备上发生崩溃时也...

    JAVA PLAY框架入门学习手册

    * 类增强的应用场景:类增强可以应用于日志记录、安全检查、缓存等方面。 Java PLAY框架是一个功能强大且灵活的Web应用程序框架,提供了许多有用的功能和机制,帮助开发者快速构建高质量的Web应用程序。

    Play_Framework(手册、配置文档、标签等)

    11. **扩展性**:`play的扩展.wps`可能涵盖了如何添加和使用Play的插件或第三方库,以增强应用的功能,比如添加缓存支持、日志记录、安全组件等。 12. **标签**:在Play的视图层中,`play标签.wps`可能包含了一些...

    PlayTime-v1.5.3.zip

    3. `changelog.txt`:这是一个变更日志文件,记录了PlayTime从早期版本到v1.5.3的所有更新和改进。通过阅读此文件,用户可以了解到新版本带来了哪些新功能、修复了哪些问题,以便更好地利用新版本。 4. `PlayTime....

    任务管理系统(基于play框架)

    同时,日志记录有助于追踪和诊断问题,Play框架提供日志配置,可以整合如Logback或Log4j等日志框架。 8. **安全性与性能优化**: 除了基本的功能,系统还需要考虑安全性和性能。这包括防止SQL注入、XSS攻击,以及...

    MPEG4播放器PLAYA的源代码

    PLAYA的源代码中会包含错误检测、日志记录和调试工具,帮助开发者定位和修复问题。 10. **编译与构建系统**:最后,PLAYA的源代码还包括构建脚本和配置文件,这些用于编译和打包软件,对于理解软件工程流程也很有...

    日志文件TXT

    根据提供的日志文件TXT内容,我们可以提取出一系列与网络通信相关的事件记录,这些记录包含了不同类型的网络协议交互、数据包传输以及设备之间的通信情况。接下来,我们将深入分析这些记录所涉及的关键技术点。 ###...

    cocos2dx 3.x 加入google play game 排行榜demo

    因此,良好的错误处理机制和日志记录是必不可少的。 在提供的压缩包`Cocos2dX_GooglePlayGamesServices-master`中,可能包含了示例代码、资源文件以及必要的配置指南。通过研究这些文件,Cocos2dx开发者可以更深入...

    play-google, Play-Google可以快速地搭建一台Google搜索服务器。.zip

    - **API扩展性**:允许用户根据需求扩展API,比如添加日志记录、统计分析等功能。 ### 注意事项 - Google Custom Search API可能有免费的查询额度限制,超出后可能产生费用,使用前请了解清楚计费政策。 - 遵守...

    Airplay-SDK:Airplay接收器SDK支持Airplay镜像和AirPlay投射到接收器设备

    - **错误处理和日志记录**:在开发过程中,充分的错误处理和日志记录是必不可少的,它们可以帮助开发者调试问题,提升产品的稳定性和可靠性。 - **兼容性测试**:由于涉及多个平台和标准,开发者需要进行广泛的兼容...

    ar3play-addon:用于 ar3play 日志记录的 Arma 3 插件

    Arma3 任务重播。 先决条件 ...将P:\@ar3play文件夹设置为Output Mod Folder ,将P:\ar3play文件夹设置为Source Folder 。 按Crunch 命令行界面 以空闲驱动器为参数调用jenkins.bat ,即jenkins.bat P:

    日志:Scala的高级日志记录库

    4. **与其他库集成**:Scala logging库可以轻松与Akka、Play Framework等其他Scala库集成,提供一致的日志体验。 5. **Scala-js 版本**:对于Scala.js项目,Scala logging库也有相应的实现,使得JavaScript环境下的...

    play所需要的文件.zip

    5. **logback.log**:Logback是Java日志框架,通常用于记录应用程序的运行信息。这个文件可能是日志输出,帮助开发者调试问题或监控应用性能。在Play框架中,日志配置可以通过logback.xml或logback.groovy文件进行...

Global site tag (gtag.js) - Google Analytics