Android中使用log4j输出log内容到sd卡

在android中,实现输出log内容到sd卡中的文件里面,做法是:

还是相对来说,log4j,算是好用。

1.下载android的log4j的库(的封装)

去:http://code.google.com/p/android-logging-log4j/

下载对应的android-logging-log4j-1.0.3.jar,加到项目中。

2.再去下载所依赖的apache的log4j库

去:http://logging.apache.org/log4j/1.2/download.html

下载1.2系列版本的:log4j-1.2.17.zip

解压得到log4j-1.2.17.jar加到项目中。

3.写测试代码:

package com.test.usb;

import java.io.File;

import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import de.mindpipe.android.logging.log4j.LogConfigurator;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity{
	private Logger gLogger;
	bsit_cardreader reader;
	TextView txt,txt1,txt2,txt3,txt4,txt5;
	private static final String TAG = MainActivity.class.getCanonicalName();

	 public void configLog()
	    {
	        final LogConfigurator logConfigurator = new LogConfigurator();
	         
	        logConfigurator.setFileName(Environment.getExternalStorageDirectory() + File.separator + "crifanli_log4j.txt");
	        // Set the root log level
	        logConfigurator.setRootLevel(Level.DEBUG);
	        // Set log level of a specific logger
	        logConfigurator.setLevel("org.apache", Level.ERROR);
	        logConfigurator.configure();
	 
	        gLogger = Logger.getLogger(this.getClass());
//	        gLogger = Logger.getLogger("CrifanLiLog4jTest");
	        
	    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        configLog();
        gLogger.debug("test android log to file in sd card using log4j");
        txt=(TextView) findViewById(R.id.txt);
        txt1=(TextView) findViewById(R.id.txt1);
        txt2=(TextView) findViewById(R.id.txt2);
        txt3=(TextView) findViewById(R.id.txt3);
        txt4=(TextView) findViewById(R.id.txt4);
        txt5=(TextView) findViewById(R.id.txt5);
        reader = new bsit_cardreader();
        int openResult = reader.openreader(this);
        txt.setText("MainActivity--reader ="+ openResult);
        Log.i(TAG, "---------------4---MainActivity--reader =" + openResult);//7
        int bslot = 0 ; //非接触卡通道
        byte[] atr = reader.card_poweron(bslot);
        Log.i(TAG, "---------------5---MainActivity--atr =" + atr);
        txt1.setText("MainActivity--reader ="+ openResult);
        byte[] cmd = new byte[5];
        cmd[0] = 0x00;
        cmd[1] = -124;
        cmd[2] = 0x00; 
        cmd[3] = 0x00;
        cmd[4] = 0x08;
        Log.i(TAG, "---------------6---MainActivity--cmd =" + cmd[1]);
        txt2.setText("MainActivity--cmd ="+ cmd[1]);
        byte[] resp= reader.sendapdu(bslot, 5, cmd);  
        
    	for (int i = 0; i < resp.length; i++) {
			Log.i(TAG, "------------7-------resp[" + i + "]=" + resp[i]);
			 txt3.setText("------------7-------resp[" + i + "]=" + resp[i]);
		}
        reader.card_poweroff(bslot);
        
        
//        byte cmd = (byte) 0x84;
//        Log.i(TAG, "---------------6---MainActivity--cmd =" + cmd);
    }
    
    public boolean post(byte[] paramArrayOfByte,String http) { 
        ByteArrayEntity arrayEntity = new ByteArrayEntity(paramArrayOfByte); 
        arrayEntity.setContentType("application/octet-stream"); 
        HttpPost httpPost = new HttpPost(http); 
        httpPost.setEntity(arrayEntity); 
        DefaultHttpClient client = new DefaultHttpClient(); 
        try { 
            int result=client.execute(httpPost).getStatusLine().getStatusCode(); 
            Log.i(TAG, "post=" + result); 
            txt4.setText("post=" + result);
        } catch (Exception e) { 
            throw new RuntimeException(e); 
        } 
        return false; 
    }

}

即可实现:

(1)可以在/mnt/sdcard中生成对应的crifanli_log4j.txt文件

(2)log输出的内容中,是DEBUG,且对应的是自己的字符串标识符CrifanLiLog4jTest

因此,可以另外多下载一个叫android-logging-log4j的项目,地址在: 
http://code.google.com/p/android-logging-log4j/downloads/list,注意,原本的log4j还是需要的。

在AndroidManifest.xml中,增加如下设置: 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
   然后在程序中如下使用:

package com.android.myapp;  
   

import java.io.File;  
   
  
import org.apache.log4j.Level;  
   
  
import org.apache.log4j.Logger;  

import android.app.Application;  
   
  
import android.os.Environment;  
   
  
import de.mindpipe.android.logging.log4j.LogConfigurator;  
 
   
public class MyApplication extends Application {  
   
  
        @Override  
   
  
        public void onCreate() {  
   
  
                super.onCreate();  
   
  
                LogConfigurator logConfigurator = new LogConfigurator();  
   
  
                logConfigurator.setFileName(Environment.getExternalStorageDirectory()  
   
  
                                + File.separator + "MyApp" + File.separator + "logs"  
   
  
                                + File.separator + "log4j.txt");  
   
  
                logConfigurator.setRootLevel(Level.DEBUG);  
   
  
                logConfigurator.setLevel("org.apache", Level.ERROR);  
   
  
                logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");  
   
  
                logConfigurator.setMaxFileSize(1024 * 1024 * 5);  
   
  
                logConfigurator.setImmediateFlush(true);  
   
  
                logConfigurator.configure();  
   
  
                Logger log = Logger.getLogger(MyApplication.class);  
   
  
                log.info("My Application Created");  
   
  
        }  
   
  
}

现在日志则是以: 
Environment.getExternalStorageDirectory() + File.separator + "MyApp" + File.separator + "logs" + File.separator + "log4j.txt 
   的方式保存了。

时间: 2024-10-21 13:08:32

Android中使用log4j输出log内容到sd卡的相关文章

【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是参考: http://stackoverflow.com/questions/2116260/logging-to-a-file-on-android 去看看: http://code.google.com/p/android-logging-log4j/ [[折腾过程] 1.去: https://

Android中使用log4j

在android中,实现输出log内容到sd卡中的文件里面,做法是: 1.导入者两个jar包 2.测试代码 import de.mindpipe.android.logging.log4j.LogConfigurator; import java.io.File; import android.os.Environment; import org.apache.log4j.Level; import org.apache.log4j.Logger;   public class BaseActi

备忘: Android中把EditText的输入内容转为大写

editText_SerialCode = (EditText) findViewById(R.id.editText_SerialCode); editText_SerialCode.addTextChangedListener(textWatcher); private TextWatcher textWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int

loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式

loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本loadrunnerstreamfilestring测试 .controller中运行脚本时无法查看输出log,可以手动写入代码输出log到外部文件,通过查看该log获得相关信息: 以下脚本是为了分析场景中多用户运行时参数列表如何取值(id,groupid,sid,uname),设置集合点后通过查看时

Android(java)学习笔记173:Sd卡状态广播接收者

1.广播接受者 >什么是广播.收音机. 电台:对外发送信号. 收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去,有短信发送进来. 使用广播机制步骤: (1)买收音机         public class SDStatusReceiver extends BroadcastReceiver (2)装电池          <receiver android:name="com.itheima.sd

android Loger日志类(获取内置sd卡)

Android手机自带内部存储路径的获取 原文地址:http://my.oschina.net/liucundong/blog/288183 直接贴代码: public static String getExternalSdCardPath() { if (SDCardUtils.isSDCardEnable()) { File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());

Android:创建文件或文件夹以及获取sd卡根目录

目录结构: 功能,可以根据录入的目录或者文件夹生成相应的文件或者文件夹 首先需要添加一个权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> MainActivity.java: package com.wyl.xml; import com.wyl.download.FileUtils; import android.app.Activity; import andr

android中几个EditText的内容相关联的设置

两个EditText,其中一个值发生改变,另一个随之改变,这种效果一点没做好,两个EditText就会在TextWatcher方法中陷入死循环,下面是我自己写的一些代码: text1 = (EditText) this.findViewById(R.id.edit1); text2 = (EditText) this.findViewById(R.id.edit2);textEN = new TextWatcher() {@Overridepublic void onTextChanged(Ch

Android拍照,剪切,并放入SD卡

android拍照之后,先对图片进行一次剪切,最后将图片保存到指定的目录.在项目需要用户拍照,并对图片进行剪切后,发送到服务器端做验证.这里贴出来一个小例子,能够实现基本的功能.文章最后会给出来demo.界面上就是一个点击事件. 1.首先点击事件中启动拍照,这里写死了图片的名称.实际上可以通过在公用的类中定义一个静态变量来操作. public void tackPhoto() { String status = Environment.getExternalStorageState(); if