网上一查关于android上面运用Log4j的运用,各种说需要添加多样的包的,照着log4j的官网教程看了下,给了个简单的输出到console上面的代码,似乎没什么用。看网上关于Log4j更多是在java web上面的,需要设置properties文件,但是这在android中我试了下,不怎么方便,随着APK一起打包,只能放在Assets中,但是在这个包里面,会导致资源被压缩,就有可能出问题,反正我这里是不行的。下面给出一个我在我项目中看到的一些代码,两个类。

  

package com.csshu.helper;

import java.io.IOException;

import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.helpers.LogLog; /**
* Log4j配置文件类
* @function
*/
public class AppLogConfigurator {
private Level rootLevel = Level.DEBUG; // 根等级,初始比较等级
private String filePattern = "%d - [%p::%c::%t] - %m%n"; // 文件输出模式
private String logCatPattern = "%m%n"; // 日志模式
private String fileName = "TestKit.log"; // 文件名字
private int maxBackupSize = 5; // 最大备份数量
private long maxFileSize = 512 * 1024; // 最大文件大小
private boolean immediateFlush = true; // 马上刷新
private boolean useLogCatAppender = true; // 使用Logcat输出器
private boolean useFileAppender = true; // 使用文件输出器
private boolean resetConfiguration = true; // 重新设置配置清单
private boolean internalDebugging = true; // 内部调试 public AppLogConfigurator() {
} public void configure() {
final Logger root = Logger.getRootLogger(); // 获取跟日志级别 if (isResetConfiguration()) { // 如果重设,则执行重设命令
LogManager.getLoggerRepository().resetConfiguration();
} LogLog.setInternalDebugging(isInternalDebugging()); if (isUseFileAppender()) {
configureFileAppender();
} if (isUseLogCatAppender()) {
configureLogCatAppender();
} root.setLevel(getRootLevel());
} public void setLevel(final String loggerName, final Level level) {
Logger.getLogger(loggerName).setLevel(level);
} /**
* 返回logger的等级
* @return
*/
public Level getRootLevel() {
return rootLevel;
} public void setRootLevel(final Level level) {
this.rootLevel = level;
} /**
* 获取文件的正则表达式的表示
* @return
*/
public String getFilePattern() {
return filePattern;
} public void setFilePattern(final String filePattern) {
this.filePattern = filePattern;
} /**
* 获取logcat输出模式
* @return
*/
public String getLogCatPattern() {
return logCatPattern;
} public void setLogCatPattern(final String logCatPattern) {
this.logCatPattern = logCatPattern;
} /**
* 获取文件名字的正则表达式
* @return
*/
public String getFileName() {
return fileName;
} public void setFileName(final String fileName) {
this.fileName = fileName;
} public int getMaxBackupSize() {
return maxBackupSize;
} public void setMaxBackupSize(final int maxBackupSize) {
this.maxBackupSize = maxBackupSize;
} public long getMaxFileSize() {
return maxFileSize;
} public void setMaxFileSize(final long maxFileSize) {
this.maxFileSize = maxFileSize;
} public boolean isImmediateFlush() {
return immediateFlush;
} public void setImmediateFlush(final boolean immediateFlush) {
this.immediateFlush = immediateFlush;
} /**
* 返回是否用户文件输出
* @return
*/
public boolean isUseFileAppender() {
return useFileAppender;
} public void setUseFileAppender(final boolean useFileAppender) {
this.useFileAppender = useFileAppender;
} /**
* 是否设置用户的logcat输出器
* @return
*/
public boolean isUseLogCatAppender() {
return useLogCatAppender;
} public void setUseLogCatAppender(final boolean useLogCatAppender) {
this.useLogCatAppender = useLogCatAppender;
} public void setResetConfiguration(boolean resetConfiguration) {
this.resetConfiguration = resetConfiguration;
} /**
* 返回是否重设配置
* @return
*/
public boolean isResetConfiguration() {
return resetConfiguration;
} public void setInternalDebugging(boolean internalDebugging) {
this.internalDebugging = internalDebugging;
} /**
* 返回是否内部调试
* @return
*/
public boolean isInternalDebugging() {
return internalDebugging;
} /**
* 配置文件输出器
*/
private void configureFileAppender() {
final Logger root = Logger.getRootLogger();
// 这个输出器旨在,当用户的日志文件超过一个确定的大小去备份文件
final RollingFileAppender rollingFileAppender;
// Extend this abstract class to create your own log layout format
// A flexible layout configurable with pattern string.
final Layout fileLayout = new PatternLayout(getFilePattern()); try {
rollingFileAppender = new RollingFileAppender(fileLayout,
getFileName()); // 规定文件输出模式和文件名字输出模式
} catch (final IOException e) {
e.printStackTrace();
throw new RuntimeException("Exception configuring log system", e);
} rollingFileAppender.setMaxBackupIndex(getMaxBackupSize()); // 设置最大备份索引
rollingFileAppender.setMaximumFileSize(getMaxFileSize()); // 设置最大文件大小
rollingFileAppender.setImmediateFlush(isImmediateFlush()); // 设置是否立即刷新 root.addAppender(rollingFileAppender); // 在根上添加输出器
} /**
* 配置类似LogCat的日志输出
*/
private void configureLogCatAppender() {
final Logger root = Logger.getRootLogger();
final Layout logCatLayout = new PatternLayout(getLogCatPattern());
final LogCatAppender logCatAppender = new LogCatAppender(logCatLayout); root.addAppender(logCatAppender);
}
}

上面是配置类,我都写有简单的注释,具体的log4j的配置,请参看官网。下面是调用类。
  

package com.csshu.helper;

import java.io.File;

import org.apache.log4j.Level;
import org.apache.log4j.Logger; import com.csshu.util.Config; public class AppLogger {
private static boolean isInitConfig = false;
private static final Logger log = Logger.getRootLogger(); private AppLogger() {
} /**
* 私有构造器
*/
private static void initConfig() {
if (!isInitConfig) { AppLogConfigurator logConfiger = new AppLogConfigurator();
// 设置Log4j的输出路径文件夹
String rootPath = Config.PATH;
File dirFile = new File(rootPath);
if (!dirFile.exists()) {
dirFile.mkdirs();
} // 文件夹准备 // 其实这下面可以做成一个生成器的设计模式
logConfiger.setFileName(rootPath + File.separator + "pressure.log"); // 设置文件名字
logConfiger.setRootLevel(Level.DEBUG); // 设置调试等级 logConfiger.setUseFileAppender(true); // 设置用户文件输出器
logConfiger.setFilePattern("%d - [%p::%t] - %m%n"); // 设置文件输出模式
logConfiger.setImmediateFlush(true); // 设置是否立即刷新
logConfiger.setInternalDebugging(false);
logConfiger.setMaxBackupSize(20); // 设置最大备份数量
logConfiger.setMaxFileSize(1024 * 1024); // 设置最大文件数量 logConfiger.setUseLogCatAppender(true);
logConfiger.setLogCatPattern("%m%n");
logConfiger.configure();
isInitConfig = true;
}
} public static void v(String msg) {
initConfig();
log.debug(buildMessage(msg)); } public static void v(String msg, Throwable thr) {
initConfig();
log.debug(buildMessage(msg), thr);
} public static void d(String msg) {
initConfig();
log.debug(buildMessage(msg));
} public static void d(String msg, Throwable thr) {
initConfig();
log.debug(buildMessage(msg), thr);
} public static void i(String msg) {
initConfig();
log.info(buildMessage(msg));
} public static void i(String msg, Throwable thr) {
initConfig();
log.info(buildMessage(msg), thr);
} public static void w(String msg) {
initConfig();
log.warn(buildMessage(msg));
} public static void w(String msg, Throwable thr) {
initConfig();
log.warn(buildMessage(msg), thr);
} public static void w(Throwable thr) {
initConfig();
log.warn(buildMessage(""), thr);
} public static void e(String msg) {
initConfig();
log.error(buildMessage(msg));
} public static void e(String msg, Throwable thr) {
initConfig();
log.error(buildMessage(msg), thr);
} /**
* 生成消息
* @param msg
* @return
*/
protected static String buildMessage(String msg) {
initConfig();
StackTraceElement caller = new Throwable().fillInStackTrace()
.getStackTrace()[2]; return new StringBuilder().append(caller.getClassName()).append(".")
.append(caller.getMethodName()).append("(): ").append(msg)
.toString();
}
}

  如果只是单纯的设置输出到文件中,这样就可以了,具体路径参看配置。下次直接调用下面一个类的静态方法。注意写权限的设置。

  考虑更加集成一点,可以把Logcat的也集中放在log4j的appender中,做到一个配置,多个输出。

  另外作为帮助类,写一个异常处理类,也是有必要咯,下次再表。

  

  

Android中log4j的运用的更多相关文章

  1. Android中使用Log4j及配置说明

    目前在进行Android开发时使用到了log4j,现在对其配置进行记录. 1. android-logging-log4j 下载地址 https://code.google.com/archive/p ...

  2. 在android中配置 slf4j + log4j 日志记录框架

    需求: 在项目开发中,需要记录 操作日志 .起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题. 实现: 考虑使用 slf4j + log4j ...

  3. 【转】Android使用Log4j例子

    Step 1 Download Log4J library from http://logging.apache.org/log4j/1.2/download.html Step 2 Configur ...

  4. Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向 ...

  5. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  6. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  7. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  8. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  9. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

随机推荐

  1. C# 操作 Word 修改word的高级属性中的自定义属性2

    word的类库使用的是word2007版本的类库,类库信息见下面图片,折腾了半天,终于找到入口,网上 很多说的添加或者修改word的高级属性中的自定义属性都是错误的,感觉都是在copy网上的代码,自己 ...

  2. 如何组建理想SOA团队

    趋向采用 SOA 软件开发领域的主要发展趋势是从传统软件体系结构过渡到面向服务的体系结构 (SOA).在传统软件体系结构中,将项目视为单个新应用程序的交付.在SOA中,将项目视为集成服务的交付——一些 ...

  3. LittleTools之批量替换工具

    身为程序员,有很多事情都可以交给机器来做,这样可以提高工作效率. 在此先写个批量替换工具,用来将某些对象统一替换为另一对象. 比方说场景中摆了一堆树,位置.比例.旋转都已经调好了,但是对树的样式不太满 ...

  4. 【JS】Intermediate5:Scope

    1.Scope=variable visibility a variable’s scope is the part of your code that can access and modify t ...

  5. Linux 设备模型浅析之 uevent 篇(2)

    Linux 设备模型浅析之 uevent 篇 本文属本人原创,欢迎转载,转载请注明出处.由于个人的见识和能力有限,不可能面 面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是 yzq.seen@gma ...

  6. oracle 创建索引

    一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...

  7. [原]ubuntu下制作ubuntu源

    ubuntu下可以用debmirror来下载ubuntu的所有源: 配置ubuntu12.04_mirror.sh ########################################## ...

  8. HDOJ-ACM1023(JAVA)

    题意:输入栈的大小,输出可能的出栈顺序的个数. 这道题,如果做了1022,那就只要在上面改改就行了, 第一想法是加上全排列-----结果是正确的,但是绝对会超时 验证性的实现了:(Time Limit ...

  9. Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络

    1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.1 ...

  10. CMD-CMD命令之新建一个用户!

    1>>>>>> 新建管理员账号: net user net user xxxxx 123 /add net localgroup administrators xx ...