在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.写测试代码:

packagecom.test.usb;importjava.io.File;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.entity.ByteArrayEntity;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.log4j.Level;importorg.apache.log4j.Logger;importde.mindpipe.android.logging.log4j.LogConfigurator;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Environment;importandroid.util.Log;importandroid.widget.TextView;publicclassMainActivityextendsActivity{privateLoggergLogger;bsit_cardreaderreader;TextViewtxt,txt1,txt2,txt3,txt4,txt5;privatestaticfinalStringTAG=MainActivity.class.getCanonicalName();publicvoidconfigLog(){finalLogConfiguratorlogConfigurator=newLogConfigurator();logConfigurator.setFileName(Environment.getExternalStorageDirectory()+File.separator+"crifanli_log4j.txt");//SettherootloglevellogConfigurator.setRootLevel(Level.DEBUG);//SetloglevelofaspecificloggerlogConfigurator.setLevel("org.apache",Level.ERROR);logConfigurator.configure();gLogger=Logger.getLogger(this.getClass());//gLogger=Logger.getLogger("CrifanLiLog4jTest");}@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);configLog();gLogger.debug("testandroidlogtofileinsdcardusinglog4j");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=newbsit_cardreader();intopenResult=reader.openreader(this);txt.setText("MainActivity--reader="+openResult);Log.i(TAG,"---------------4---MainActivity--reader="+openResult);//7intbslot=0;//非接触卡通道byte[]atr=reader.card_poweron(bslot);Log.i(TAG,"---------------5---MainActivity--atr="+atr);txt1.setText("MainActivity--reader="+openResult);byte[]cmd=newbyte[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(inti=0;i<resp.length;i++){Log.i(TAG,"------------7-------resp["+i+"]="+resp[i]);txt3.setText("------------7-------resp["+i+"]="+resp[i]);}reader.card_poweroff(bslot);//bytecmd=(byte)0x84;//Log.i(TAG,"---------------6---MainActivity--cmd="+cmd);}publicbooleanpost(byte[]paramArrayOfByte,Stringhttp){ByteArrayEntityarrayEntity=newByteArrayEntity(paramArrayOfByte);arrayEntity.setContentType("application/octet-stream");HttpPosthttpPost=newHttpPost(http);httpPost.setEntity(arrayEntity);DefaultHttpClientclient=newDefaultHttpClient();try{intresult=client.execute(httpPost).getStatusLine().getStatusCode();Log.i(TAG,"post="+result);txt4.setText("post="+result);}catch(Exceptione){thrownewRuntimeException(e);}returnfalse;}}

即可实现:

(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" />
然后在程序中如下使用:

packagecom.android.myapp;importjava.io.File;importorg.apache.log4j.Level;importorg.apache.log4j.Logger;importandroid.app.Application;importandroid.os.Environment;importde.mindpipe.android.logging.log4j.LogConfigurator;publicclassMyApplicationextendsApplication{@OverridepublicvoidonCreate(){super.onCreate();LogConfiguratorlogConfigurator=newLogConfigurator();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();Loggerlog=Logger.getLogger(MyApplication.class);log.info("MyApplicationCreated");}}

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