1》 log4j.properties 文件:
log4j.rootLogger=DEBUG,MINA,file
### 控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
log4j.appender.MINA=org.apache.log4j.ConsoleAppender
log4j.appender.MINA.layout=org.apache.log4j.PatternLayout
log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %c{1} %x - %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/logfile/minademos.log
log4j.appender.file.MaxFileSize=5120KB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[luozhonghua-error][%d] %p | %m | [%t] %C.%M(%L)%n
2》Log4jConfig:
import org.apache.log4j.PropertyConfigurator;
public class Log4jConfig {
private static boolean isReload = true;
/**
* 装载log4j配置文件
*/
public static void load() {
String path = Log4jConfig.class.getClass().getResource("/").getPath()
+ "config/log4j.properties";
System.out.println("log4j configfile path=" + path);
PropertyConfigurator.configureAndWatch(path, 1000);// 间隔特定时间,检测文件是否修改,自动重新读取配置
}
public static void main(String[] args) {
load();
}
private static void reload() {
if (isReload) {
load();
}
isReload = false;
}
public void setReload(boolean flag) {
isReload = flag;
}
}
3》Logger文件
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Logger {
private Log log = null;
static {
Log4jConfig.load();// 装载log4j配置文件
}
private Logger() {
log = LogFactory.getLog(this.getClass());
}
private Logger(Class c) {
log = LogFactory.getLog(c);
}
private Logger(String className) {
log = LogFactory.getLog(className);
}
public static Logger getLogger() {
return new Logger();
}
public static Logger getLogger(Class c) {
return new Logger(c);
}
public static Logger getLogger(String className) {
return new Logger(className);
}
public void trace(String info) {
if (log.isTraceEnabled())
log.trace(info);
}
public void debug(String info) {
if (log.isDebugEnabled())
log.debug(info);
}
public void info(String info) {
if (log.isInfoEnabled())
log.info(info);
}
public void warn(String info) {
if (log.isWarnEnabled())
log.warn(info);
}
public void error(String info) {
if (log.isErrorEnabled())
log.error(info);
}
public void error(Object info, Throwable t){
if (log.isErrorEnabled())
log.error(info+","+t);
}
public void fatal(String info) {
if (log.isFatalEnabled())
log.fatal(info);
}
public boolean isTraceEnabled() {
return log.isTraceEnabled();
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public boolean isInfoEnabled() {
return log.isInfoEnabled();
}
public boolean isWarnEnabled() {
return log.isWarnEnabled();
}
public boolean isErrorEnabled() {
return log.isErrorEnabled();
}
public boolean isFatalEnabled() {
return log.isFatalEnabled();
}
}
4:测试
public class test {
static Logger log = Logger.getLogger(test.class);
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
log.info("----------info");
log.debug("----------debug");
log.error("----------error");
System.out.println("***********************");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
测试通过,但貌似可用,不过log4j源码貌似强大应用场景
分享到:
相关推荐
在这个封装类中,可以添加自定义的`serious()`和`alarm()`等方法,它们接受对象参数,并在内部调用`Logger.log()`方法,传入自定义的日志级别和日志信息。 4. **配置`log4j.properties`或`log4j.xml`**: 在项目的...
- **使用封装类**: 创建Logger实例,然后调用对应的方法记录日志。 **4. 示例代码** ```csharp // 初始化Log4Net [assembly: log4net.Config.XmlConfigurator(Watch = true)] // 获取Logger实例 private static ...
**Qt之log4Qt Demo详解** Qt是一个跨平台的应用程序开发框架,被广泛用于创建桌面、移动和嵌入式应用程序。Log4Qt是基于Apache Log4j理念的一个日志记录库,为Qt应用程序提供了强大的日志处理功能。在这个"Qt之log4...
我也很困惑这件事,今天了解到自定义组件这个概念,就试了试,感觉好像弥补了template的那个缺点,于是写了个小demo,也算做个笔记 效果 做的就是个菜单组件,数据由外部灌入。 目前我还在看怎么样才能实现菜单弹出...
其实官方开源代码已经有大量demo可以参考了,也提供了VS可以直接打开编译的项目。 如何使用 1:把glog文件夹拷贝到源代码目录 2:在工程设置中添加附加包含目录(glog\include;)和附加库目录(glog\lib;),在附件...
5. **Interceptor使用**:可能有一些预定义的Interceptor如`logger`和`validation`,用于日志和表单验证,也可能是自定义的Interceptor,展示了如何扩展Struts2的功能。 6. **依赖的jar包**:Struts2运行所需的库,...
在这个项目中,可能自定义实现了日志功能,或者使用了某种现有框架,具体要看源代码。 2. **FileAppender.cs**: 这个文件名暗示了一个用于将日志信息写入文件的组件。在日志系统中,Appender(输出器)负责将日志...
对于`Demo`这个子文件,可能是封装好的Log工具类的实例代码,用于展示如何在项目中使用这个工具类。在阅读这个文件时,你可以关注以下几个方面: 1. **日志标签(Tag)**:是否可以自定义,以便区分不同模块的日志。...
此外,你可能还会发现如何将日志配置代码封装到单独的模块中,以实现日志配置的复用和模块化。 总的来说,理解和掌握Flask应用中的日志配置是提高开发效率和应用维护性的重要一环。通过这个项目,你可以学习到如何...
private static Logger logger = Logger.getLogger(Demo1Server.class); private static int PORT = 3005; public static void main(String[] args) { IoAcceptor acceptor = null; // 创建连接 try { ...
4. 测试文件:可能包括JUnit测试用例,帮助验证`ShowAppInfo`类的功能。 总的来说,这个项目为Java开发者提供了一个实用的起点,让他们了解如何在ACE框架下获取应用信息。通过学习和实践这个示例,开发者可以更好地...
private static Logger logger = Logger.getLogger(Demo1Server.class); private static int PORT = 3005; public static void main(String[] args) { IoAcceptor acceptor = null; try { // 创建一个非阻塞...
不像其他一些框架只提供一个 blog 的粗糙 demo。 wojilu framework 希望自己是一个真正从实战中来,到实战中去的框架。 4、从整体上考虑各子框架的设计,比如前端 ajax 部分和 mvc 框架的结合;比如IOC依赖注入和mvc...
包括iOS开发的常见功能:自定义NavigationController实现全屏右滑返回上一控制器的LBPNavigationController自定义UIScrollView实现全屏滑动显示不同控制器的LBPScrollSegmentView封装网络访问类AFNetPackage,具备...
POJO通常遵循JavaBean规范,具有getter和setter方法,用于封装数据和提供访问操作。在Hibernate中,POJO的作用是将数据库表中的记录映射为Java对象,从而实现对象关系映射(Object Relational Mapping, ORM)。每个...