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配置指定的文件中即可找到记录的异常日志信息!
相关推荐
CarPlay认证的协议log记录 ATS文件,在2018年认证通过的log,供carplay开发者参考。
6. **分析工具**:日志收集后,通常需要借助专门的分析工具(如Google Play Console、Crashlytics等)进行解析和故障排查。这些工具可以提供详细的崩溃报告,帮助定位问题根源。 7. **优化实践**:基于崩溃日志,...
15. **日志配置**:Play框架允许自定义日志级别,生产环境的配置可以确保日志的记录和分析。 16. **多环境配置**:`application.conf`可以针对开发、测试和生产环境有不同的配置,便于不同阶段的管理。 17. **生产...
开发过程中,日志记录和应用监控至关重要。这个模块可能提供了更强大的日志配置和监控工具,便于问题排查和性能分析。 7. **国际化与本地化**: 多语言支持是许多应用程序的需求。Play-Utils 可能增强了 Play 的 ...
这是一个关于Android平台GPS日志记录程序的源码项目,适合计算机专业的学生进行毕业设计学习。在深入探讨这个项目之前,让我们先理解一下Android系统、GPS技术以及日志记录在移动应用开发中的重要性。 Android是一...
5. **类增强Enhancement**:Play允许在运行时对类进行增强,例如添加拦截器或AOP(面向切面编程)功能,这有助于实现如日志记录、事务管理等功能。 6. **HTTP路由**:通过`routes`文件定义,Play将URL映射到控制器...
通过Action Composition,开发者可以方便地实现权限控制、日志记录等功能。 4. **模板引擎**:Play提供了一种灵活的模板引擎,使得HTML与业务逻辑可以轻松分离。模板支持嵌入Scala或Java表达式,让视图层的编写更加...
除了手动在代码中插入日志,还可以使用第三方库如Crashlytics、Fabric、HockeyApp或Google Play服务中的Firebase Crash Reporting等,它们能自动收集错误日志,并提供详细的堆栈跟踪,甚至在用户设备上发生崩溃时也...
* 类增强的应用场景:类增强可以应用于日志记录、安全检查、缓存等方面。 Java PLAY框架是一个功能强大且灵活的Web应用程序框架,提供了许多有用的功能和机制,帮助开发者快速构建高质量的Web应用程序。
11. **扩展性**:`play的扩展.wps`可能涵盖了如何添加和使用Play的插件或第三方库,以增强应用的功能,比如添加缓存支持、日志记录、安全组件等。 12. **标签**:在Play的视图层中,`play标签.wps`可能包含了一些...
3. `changelog.txt`:这是一个变更日志文件,记录了PlayTime从早期版本到v1.5.3的所有更新和改进。通过阅读此文件,用户可以了解到新版本带来了哪些新功能、修复了哪些问题,以便更好地利用新版本。 4. `PlayTime....
同时,日志记录有助于追踪和诊断问题,Play框架提供日志配置,可以整合如Logback或Log4j等日志框架。 8. **安全性与性能优化**: 除了基本的功能,系统还需要考虑安全性和性能。这包括防止SQL注入、XSS攻击,以及...
PLAYA的源代码中会包含错误检测、日志记录和调试工具,帮助开发者定位和修复问题。 10. **编译与构建系统**:最后,PLAYA的源代码还包括构建脚本和配置文件,这些用于编译和打包软件,对于理解软件工程流程也很有...
根据提供的日志文件TXT内容,我们可以提取出一系列与网络通信相关的事件记录,这些记录包含了不同类型的网络协议交互、数据包传输以及设备之间的通信情况。接下来,我们将深入分析这些记录所涉及的关键技术点。 ###...
因此,良好的错误处理机制和日志记录是必不可少的。 在提供的压缩包`Cocos2dX_GooglePlayGamesServices-master`中,可能包含了示例代码、资源文件以及必要的配置指南。通过研究这些文件,Cocos2dx开发者可以更深入...
- **API扩展性**:允许用户根据需求扩展API,比如添加日志记录、统计分析等功能。 ### 注意事项 - Google Custom Search API可能有免费的查询额度限制,超出后可能产生费用,使用前请了解清楚计费政策。 - 遵守...
- **错误处理和日志记录**:在开发过程中,充分的错误处理和日志记录是必不可少的,它们可以帮助开发者调试问题,提升产品的稳定性和可靠性。 - **兼容性测试**:由于涉及多个平台和标准,开发者需要进行广泛的兼容...
Arma3 任务重播。 先决条件 ...将P:\@ar3play文件夹设置为Output Mod Folder ,将P:\ar3play文件夹设置为Source Folder 。 按Crunch 命令行界面 以空闲驱动器为参数调用jenkins.bat ,即jenkins.bat P:
4. **与其他库集成**:Scala logging库可以轻松与Akka、Play Framework等其他Scala库集成,提供一致的日志体验。 5. **Scala-js 版本**:对于Scala.js项目,Scala logging库也有相应的实现,使得JavaScript环境下的...
5. **logback.log**:Logback是Java日志框架,通常用于记录应用程序的运行信息。这个文件可能是日志输出,帮助开发者调试问题或监控应用性能。在Play框架中,日志配置可以通过logback.xml或logback.groovy文件进行...