Logging Input and Output in a text-based interface of Wolfram language

Although I am using Mathematica 9 notebook usually, I am interested in the logging input and output in a text-based interface of Wolfram Language.
I found a package of SessionLog.m in Programming Mathematica written by Roman Maeder.
$cat SessionLog.m

(* ::Package:: *)
BeginPackage["ProgrammingInMathematica`SessionLog`"]
OpenLog::usage = "OpenLog[filename, opts..] starts logging all input and output to filename."
CloseLog::usage="CloseLog[] closes the logfile opened by OpenLog[]."
Begin["`Private`"]
logfile=""
OpenLog[ filename_String, opts___?OptionQ] := (
	logfile = OpenWrite[filename, opts];
	If[ logfile === $Failed, Return[logfile] ];
	AppendTo[$Echo, logfile];
	AppendTo[$Output, logfile];
	logfile
	)
CloseLog[] := (
	$Echo = Complement[$Echo, {logfile}];
	$Output = Complement[$Output, {logfile}];
	Close[logfile]
	)
End[ ]
Protect[ OpenLog, CloseLog ]
EndPackage[]

My trial is the following.

pi@raspberrypi ~/workmath $ sudo wolfram
Wolfram Language (Raspberry Pi Pilot Release)
Copyright 1988-2013 Wolfram Research
Information & help: wolfram.com/raspi
In[1]:= << SessionLog.m                                                         
In[2]:= OpenLog["session.log"]                                                  
Out[2]= OutputStream[session.log, 56]
In[3]:= Expand[ (x+y)^3 ]                                                       
         3      2          2    3
Out[3]= x  + 3 x  y + 3 x y  + y
In[4]:= CloseLog[]                                                              
Out[4]= session.log
In[5]:= Quit[]
                                                          
pi@raspberrypi ~/workmath $ cat session.log
Out[2]= OutputStream["session.log", 56]
Expand[ (x+y)^3 ]Out[3]= x^3 + 3*x^2*y + 3*x*y^2 + y^3
CloseLog[]

I want to make another format which is written in the book.

Out[2]= OutputStream["session.log", 56]
Expand[ (x+y)^3 ]
Out[3]= x^3 + 3*x^2*y + 3*x*y^2 + y^3
CloseLog[]

Would you please give me a suggestion how to solve this problem ?
Yoshihiro Sato

I found a little tricky way to answer a question.
Is there a more efficient program ?

$ cat SessionLog.m
(* ::Package:: *)
BeginPackage["ProgrammingInMathematica`SessionLog`"]
OpenLog::usage = "filename, opts..] starts logging all input and output to filename."
CloseLog::usage="CloseLog[] closes the logfile opened by OpenLog[]."

Begin["`Private`"]
logfile=""
OpenLog[ filename_String, opts___?OptionQ] := (
	logfile = OpenWrite[filename, opts];
        outfile=filename;
	If[ logfile ===$Failed, Return[logfile] ];
	AppendTo[$Echo, logfile];
	AppendTo[$Output, logfile];
	logfile
	)
CloseLog[] := (
	$Echo = Complement[$Echo, {logfile}];
	$Output = Complement[$Output, {logfile}];
	Close[logfile];
    (* ----- *)
   rawdata=Import[outfile,"Lines"];
   dataString=  hh2[rawdata];
   ofile=(First[#]<>"2."<>Rest[#])&@StringSplit[outfile, "."];
   Export[ofile, dataString,"Table"];
    (* input *)
   in = Select[dataString, StringTake[#, 3] =!= "Out" &];
   script=First[StringSplit[outfile, "."]] <> ".wl";
   Export[script, Most[in], "Table"];
   Print["outfile= ", outfile,", ",ofile,", ",script];
	)
(*  translate comma to String   *)
fcomma[x_]:=If[Length[x]!=0,StringJoin[First[x],MapThread[StringJoin[#1,#2]&,{Table[",",{Length[x]-1}],Rest[x]}]]]
ff[x_]:=
    If[StringTake[x[[1]],3]=="Out",
    {{fcomma[x]}},Partition[StringSplit[First[StringReplace[{fcomma[x]},"Out["->",Out["]],","],1]]
hh2[y_List]:=If[Head[y[[1]]]===String,Flatten[Apply[Join,ff[#]&/@StringSplit[y,","]]], Flatten[Apply[Join,ff[#]&/@y]]]

End[ ]
Protect[ OpenLog, CloseLog ]
EndPackage[]
$ wolfram
Wolfram Language (Raspberry Pi Pilot Release)
Copyright 1988-2013 Wolfram Research
Information & help: wolfram.com/raspi

In[1]:= << SessionLog.m
                                                        
In[2]:= OpenLog["math.log"]
                                                     
Out[2]= OutputStream[math.log, 68]

In[3]:= Expand[ (a+b)^2 ]                                                       
         2            2
Out[3]= a  + 2 a b + b

In[4]:= Factor[ x^5-1 ]                                                         
                           2    3    4
Out[4]= (-1 + x) (1 + x + x  + x  + x )

In[5]:= CloseLog[]                                                              
outfile= math.log, math2.log, math.wl

In[6]:= FilePrint["math.log"]                                                   
Out[2]= OutputStream["math.log", 68]
Expand[ (a+b)^2 ]Out[3]= a^2 + 2*a*b + b^2
Factor[ x^5-1 ]Out[4]= (-1 + x)*(1 + x + x^2 + x^3 + x^4)
CloseLog[]
                                                                  
In[7]:= FilePrint["math2.log"]                                                  
Out[2]= OutputStream["math.log", 68]
Expand[ (a+b)^2 ]
Out[3]= a^2 + 2*a*b + b^2
Factor[ x^5-1 ]
Out[4]= (-1 + x)*(1 + x + x^2 + x^3 + x^4)
CloseLog[]
                                                                     
In[8]:= FilePrint["math.wl"]                                                    
Expand[ (a+b)^2 ]
Factor[ x^5-1 ]
                                                                     
In[9]:= Quit[]
$ wolfram < math.wl
Wolfram Language (Raspberry Pi Pilot Release)
Copyright 1988-2013 Wolfram Research
Information & help: wolfram.com/raspi

In[1]:= 
         2            2
Out[1]= a  + 2 a b + b

In[2]:= 
                           2    3    4
Out[2]= (-1 + x) (1 + x + x  + x  + x )

In[3]:= 
$